diff --git a/src/Image-ExifTool/Changes b/src/Image-ExifTool/Changes index b4a11492..008f9548 100644 --- a/src/Image-ExifTool/Changes +++ b/src/Image-ExifTool/Changes @@ -2,11 +2,718 @@ 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 +RSS feed: https://exiftool.org/rss.xml -Note: The most recent production release is Version 11.11. (Other versions are +Note: The most recent production release is Version 11.70. (Other versions are considered development releases, and are not uploaded to CPAN.) +Dec. 5, 2019 - Version 11.78 + + - Added a new Nikon LensID (thanks Chris) + - Added two new FujiFilm SceneRecognition values + - Patched to avoid crash in Windows when writing a negative epoch time using + the "-d %s" option + - Fixed problem editing MIE tags when using the "-wm w" option + +Nov. 27, 2019 - Version 11.77 + + - Added a new Nikon LensID (thanks Joe Schonberg) + - Added a number of new Olympus LensType values (thanks LibRaw) + - Added a new Canon LensType + - Decode timed GPS from Ambarella A12 dash cam MP4 videos + - Decode a number of new Sigma tags (thanks LibRaw) + - Decode a couple of new PanasonicRaw tags (thanks LibRaw) + - Enhanced -fileOrder option to add -fast feature + +Nov. 12, 2019 - Version 11.76 + + - Added support for the Sony ILCE-9M2 (thanks Jos Roost) + - Added a couple of new XMP-GCamera tags + - Added MIMEType values for some formats that previously reported + "application/unknown" + - Enhanced -geotag feature to write pitch to CameraElevationAngle if available + - Improved determination of MIMEEncoding for TXT files + +Nov. 4, 2019 - Version 11.75 + + - Added ability to read some basic characteristics of TXT files + - Added kml_track.fmt to the fmt_files of the full distribution + - Added built-in support for decoding GPS from the four video subtitle text + formats that were previously handled by separate config files, and removed + these config files from the distribution + - Derive GPSDateTime from CreateDate and SampleTime if not already available + when extracting timed GPS metadata from QuickTime-format videos + - Changed family 2 groups of some Extra tags + +Oct. 29, 2019 - Version 11.74 + + - Added support for new XMP IPTC Extension version 1.5 tags + - Added a new Nikon LensID (thanks LibRaw) + - Decode GPS track from Auto-Vox dashcam MOV videos + - Improved Russian translations (thanks Andrei Korzhyts and Alexander) + - Enhanced convert_regions.config to support new IPTC Extension 1.5 ImageRegion + - Changed the way the FlatName element works when used in a structure element + (the structure name is now added as a prefix to the flattened tag name) + - Patched gpx.fmt and gpx_wpt.fmt to support sub-seconds in GPSDateTime value + +Oct. 23, 2019 - Version 11.73 + + - Decode timed metadata from Parrot drone videos + - Patched dji.config file to properly handle time zones + - Fixed bug which caused runtime error when reading timed metadata from Cobra + Dash Cam AVI videos + +Oct. 22, 2019 - Version 11.72 + + - Added warning messages for corrupted Photoshop document data + - Added a new Olympus CameraType + - Added a new Canon LensType + - Decode more Sigma tags + - Improved Russian translations (thanks Alexander) + - Updated decoding of some CanonCustom settings for recent models + - Documented DNG OpcodeList values + +Oct. 16, 2019 - Version 11.71 + + - Added a new Sony LensType (thanks Jos Roost) + - Added a few new Nikon Z LensID's + - Added a simple print conversion for DNG OpcodeList tags (note that due to + this, these tags must now be copied using the -n option) + - Fixed problems determining some video parameters for DV files + - Changed behaviour of -sep option when writing empty list items + - API Changes: + - Changed ListSplit option to preserve empty list items + +Oct. 10, 2019 - Version 11.70 (production release) + + - Added a new CanonModelID (thanks Laurent Clevy) + - Improved identification of Office Open XML files + - Removed RAF version check when writing FujiFilm RAF files + - Limited the number of accelerometer records that ExifTool will read by + default with the -ee option from INSV files to avoid excessive processing + times and memory usage + - Patched Windows version to allow reading of shared files with Unicode names + (thanks Eriksson) + - Patched to avoid converting some bad GPS coordinates (thanks Csaba Toth) + - Fixed verbose output to include YCbCrSubSampling for JPEG files + - Fixed conversion and group names for the new FujiFilm tag added in 11.68 + - Fixed format of GeoTiffDirectory and GeoTiffDoubleParams when writing + +Oct. 2, 2019 - Version 11.69 + + - Fixed bug introduced in version 11.66 where the sign was lost when writing + coordinate values between 0 and -1 to QuickTime:GPSCoordinates + +Oct. 1, 2019 - Version 11.68 + + - Added read support for yet another type of streaming GPS in MP4 videos + - Added a number of new FujiFlashMode values + - Decode a new FujiFilm tag + - Made NikonCaptureOffsets and NikonCaptureVersion deletable + - Enhanced tag name documentation to indicate deletable MakerNotes tags + +Sept. 30, 2019 - Version 11.67 + + - Added config_files/thinkware.config to the distribution + - Fixed bug decoding negative GPS coordinates from INSV videos + +Sept. 30, 2019 - Version 11.66 + + - Added a new Nikon LensID (thanks LibRaw) + - Added a few new Canon LensType values (thanks LibRaw and Tom Lachecki) + - Decode a few more Hasselblad tags (thanks LibRaw) + - Decode a new Canon tag (thanks Laurent Clevy) + - Decode more Samsung trailer tags + - Extract BWF iXML, aXML and UMID from RIFF-format files + - Extract ICC_Profile from more types of PDF files + - Enhanced %s of the -W option to recognize the PICT format + - Recognize MacOS alias files + - Changed name of Ricoh CropMode35mm tag and added a new value (thanks LibRaw) + - Minor change to a Minolta lens name (thanks Jos Roost) + - Fixed problem where NikonCapture information couldn't be deleted from an NEF + - Fixed problem identifying some SVG files + - Fixed typo in a CanonModelID value (thanks Dmitry) + - Fixed bug which could result in "Internal error: no list index" warning when + creating nested XMP lang-alt lists + - Fixed the names of a few Tamron lenses for Nikon (thanks Tom Lachecki) + - Fixed problem extracting Layer information from some PSD files + - Fixed writing of QuickTime GPSCoordinates to use the correct number of + digits before the decimal point for latitude and longitude + +Aug. 29, 2019 - Version 11.65 + + - Added new SonyModelID and Sony LensType values (thanks LibRaw and Jos Roost) + - Added support for some new Sony models (thanks Jos Roost) + - Added a couple of new CanonModelID values (thanks LibRaw) + - Added a new Canon ColorDataVersion value + - Enhanced FastScan option so a setting of 2 stops processing PNG images at + the IDAT chunk when reading + - Preserve order of nested lang-alt list entries when -struct option is used + +Aug. 28, 2019 - Version 11.64 + + - Added a new Canon LensType (thanks LibRaw) + - Added a new Nikon LensID (thanks Bruno) + - Added config file for converting streaming GPS from BlueSkySea dashcam + - Decode FocusDistance for Nikon Z6/Z7 + - Documented groups in families 5 and 6 (available but undocumented since + Exiftool version 8.22 and 11.50 respectively) + - Fixed some ordering problems when writing/copying nested XMP lang-alt lists + - Fixed some minor quirks with QuickTime language codes (thanks Hayo Baan) + - Fixed a CanonModelID value (thanks Dmitry) + - API Changes: + - Documented SavePath and SaveFormat options + +Aug. 20, 2019 - Version 11.63 - "PNG Early Text" + + - Added a few new Sigma lenses (thanks LibRaw) + - Improved handling of Canon CNTH atom in MOV/MP4 videos + - Changed PNG writer to place all text chunks before IDAT (not just XMP) + - Issue minor warning for any text chunk after PNG IDAT (not just XMP) + - Enhanced ForceWrite feature to allow "PNG" to be specified (to move existing + text chunks to before IDAT without editing any metadata) + - Removed Windows "surrogate" warning for files that wouldn't be processed + anyway + - Fixed some entries in the Minolta LensType list (thanks Jos Roost) + - Fixed identification of a Sony lens (thanks Jos Roost) + +Aug. 15, 2019 - Version 11.62 + + - Added a number of new Canon, Pentax, Sony and Sigma lenses (thanks LibRaw) + - Removed some extraneous verbose warnings when geotagging + - Removed Minolta LensType value for a non-existent lens (thanks LibRaw) + - Patched problem writing some simple qualified XMP values + - Patched to avoid writing files in Windows with Unicode surrogate characters + in their name unless the -overwrite_original_in_place option is used + - Fixed an incorrect Pentax LensType (thanks LibRaw) + - Fixed family 2 group names of some XMP-exifEX and XMP Composite tags + +Aug. 7, 2019 - Version 11.61 + + - Added a new FujiFilm CropMode (thanks LibRaw) + - Added a few new proprietary CustomRendered values (thanks Jeffrey Friedl) + - Added a new Nikon LensID and fixed a Canon LensType (thanks LibRaw) + - Added a new CanonModelID + - Decode more Sony DSC-RX100M7 tags (thanks Jos Roost) + - Write standard EXIF to PNG even if non-standard EXIF already exists + - Changed a Minolta/Sony LensType (thanks LibRaw) + - Changed Composite GPS reference direction tags to be derived from only the + XMP-exif GPS coordinate tags (and not other XMP GPS coordinates) + - Reverted a PNG Validation check that was removed from 11.60 + - Patched to avoid problems overriding new values when writing thumbnail and + preview images + +July 30, 2019 - Version 11.60 + + - Added a few new Sigma LensType values (thanks LibRaw) + - Updated Sony makernote decoding for the DSC-RX100M7 (thanks Jos Roost) + - Various internal improvements to PNG reader/writer + - Fixed bug in RIFF decoder that could cause an "undefined subroutine" error + (thanks Hayo Baan) + - Fixed problem writing some QuickTime tags if the PREFERRED levels were + changed via the config file + - Install Changes: + - Properly erase all temporary files after validation tests + +July 25, 2019 - Version 11.59 + + - Added a new SonyModelID (thanks LibRaw) + - Changed block delete to allow subsequent writing of tags from the same group + (like a group delete) + - Minor changes to warnings and verbose output when writing PNG images + - Fixed potential runtime warning on an error rewriting XMP in a PNG image + +July 25, 2019 - Version 11.58 + + - Added a number of new Canon and Sony LensType values (thanks LibRaw) + - Decode NikonMeteringMode for the D500 + - Decode LensID for Nikon Z lenses + - Extract RawThermalImage from Parrot Bebop-Pro Thermal images + - Validate PNG CRC values when writing or using the Validate option + - Improved Russian translation (thanks Andrei Korzhyts) + - Improved identification of some Tamron lenses for Canon cameras + - Changed name of D810MeteringMode tag to NikonMeteringMode + - Patched writing of XMP in PNG images to always come before IDAT, and warn if + XMP comes after IDAT when reading + - Fixed problem replacing multiple lang-alt default-language structure + elements in lists of XMP structures (behaviour for other languages still not + ideal) + - API Changes: + - Removed PNGEarlyXMP option + - Fixed problem introduced in 11.54 which caused Options('UserParam') to + return undef + - Internal Changes: + - A block delete of EXIF, XMP, IPTC, etc now sets the group delete flag + +July 19, 2019 - Version 11.57 + + - Improved decoding of some tags for the Sony ILCE-7RM4 (thanks Jos Roost) + - Minor change to a Sony lens name + - Fixed format of a number of 8-bit integer QuickTime tags when writing + - Fixed problem replacing multiple structure elements in lists of XMP + structures + +July 18, 2019 - Version 11.56 + + - Added support for the Sony ILCE-7RM4 (thanks Jos Roost) + - Added a new SonyModelID (thanks LibRaw) + - Added a few new Sony/Minolta LensType values (thanks LibRaw and Jos Roost) + - Decode some new Nikon and Motorola tags (thanks Neal Krawetz) + - Decode a couple more ColorData tags for some Canon models + - Extract PreviewImage from DNG files which don't have a .DNG extension + - Extract Huawei APP7 maker notes with the Unknown (-u) option + - Internal change in LensID logic for Sony E-type lenses + +July 12, 2019 - Version 11.55 + + - Added write support for XMP-crs:Texture and XMP-drs tags + - Added a number of new Panasonic NoiseReduction values + - Added definition for a new Kodak tag (thanks LibRaw) + - Added a couple of new Panasonic AFAreaMode values (thanks Daniel Beichl) + - Added a couple of new Sony/Minolta LensTypes (thanks Jos Roost and LibRaw) + - Added a new CanonModelID + - Decode HEVCConfiguration record from HEIC images + - Decode a new Panasonic tag + - Decode a new QuickTime tag + - Changed internal handling of Composite tag ID's to include module name + - Removed "FE" designation from Samyang E-mount lenses + - Dropped Validate warning about missing GPSProcessingMethod tag + +July 2, 2019 - Version 11.54 + + - Added new Canon and Sony/Minolta LensType values (thanks LibRaw) + - Added a number of new Sony/Minolta LensType values (thanks Jos Roost) + - Added "Unknown" value for new EXIF CompositeImage tag + - Added ability to write GSpherical tags in video track of MOV/MP4 files + - Added support for geotagging from GPS/IMU CSV-format files + - Improved Russian translation (thanks Alexander) + - Improved Validate feature to check ExifVersion/GPSVersionID numbers + - Accept unsigned numbers when setting GPSAltitudeRef from a numerical value + - Fixed decoding of DepthMapWidth/Height for some Samsung live-focus images + - Fixed a couple of incorrect/incomplete CanonModelID values (thanks LibRaw) + - Fixed problem identifying some Canon lenses when used on a Sony camera with + a Metabones adapter + - API Changes: + - Added FilterW option + - Enhanced Compact option to improve flexibility and include features of + XMPShorthand option + - Removed XMPShorthand option from documentation + +June 24, 2019 - Version 11.53 - "Exif 2.32" + + - Added support for the new tags of the Exif 2.32 specification + - Added a new SamsungModelID (thanks LibRaw) + - Added warning if extracting ZIP file contents without the -a option + - Added ability to extract EmbeddedVideo from the trailer of Android JPEG + images with the ExtractEmbedded option + - Decode timed GPS from Cobra Dash Cam AVI videos + - Decode a new GoPro tag + - Enhanced -struct option to allow extraction of structured Torrent Info + - Improved error handling when an unexpected terminator is encountered while + writing a QuickTime-format file + - Renamed one of the Nikon Saturation tags to "SaturationAdj" + - Removed warning message when writing FujiFilm RAFVersion 0240 and 0261 files + - Fixed encoding problem when writing some QuickTime UserData tags with + strings containing special characters + - API Changes: + - Enhanced XMPShorthand option to add level 2 + +June 17, 2019 - Version 11.52 + + - Added a few new Nikon CropHiSpeed values (thanks Hayo Baan) + - Added a new Nikon LensID (thanks Yves) + - Fixed problem where reading a large, corrupt AIFF file may could take an + excessively long time + - API Changes: + - Enhanced Compact option to add levels 3, 4 and 5 + +June 13, 2019 - Version 11.51 + + - Decode Canon DistortionCorrection tags + - Removed a minor EXIF warning when processing EPS files with a DOS header + - Fixed bug which caused an error when rewriting some EPS files multiple times + +June 11, 2019 - Version 11.50 (production release) + + - Added a new Canon LensType and two new Sony LensTypes (thanks LibRaw) + - Added tiff_version and rotate_regions config files to the distribution + - Added two new QuickTime Keys tags and made some existing Keys unwritable + - Improved Composite LensID logic to make better use of EXIF LensModel + - Improved logic when writing BinaryData tags to allow multiple interdependent + tags to be written in a single command + - Improved -htmldump output to show names of Unknown tags + - Allow advanced formatting expressions to access the current tag key ($tag) + - Remove escaped nulls from -json string values + - Reverted change in ExifTool 11.38 so that Composite GPS reference directions + are generated again even if the EXIF versions of these tags already exist + - Fixed an incorrect FlashPix CodePage conversion + +June 5, 2019 - Version 11.49 + + - Added inverse print conversion for one of the QuickTime ItemList Genre tags + - Avoid creating a few obscure QuickTime UserData tags when writing + - Fixed problem where some QuickTime groups were not being created when + writing QuickTime tags without specifying a group + - Fixed problem where QuickTime Keys tags could be duplicated when writing an + existing alternate-language tag + - Fixed problem were QuickTime Keys alternate-language tags would not be + written when deleting the corresponding default-language tag in the same + command + - Fixed some inconsistencies when writing QuickTime tags using the -wm + (WriteMode) option + - Fixed an incorrect Pentax Sigma LensType value + +June 1, 2019 - Version 11.48 + + - Added write support for Google GCamera and GCreation XMP tags + - Renamed XMP-GDepth "Data" tag to "DepthImage" + - Fixed bug where some QuickTime UserData tags could be duplicated when + writing + +May 31, 2019 - Version 11.47 + + - Fixed problem which resulted in a warning for one of the CanonVRD tests on + some platforms + +May 31, 2019 - Version 11.46 - "CR3 update" + + - Added ability to write CanonVRD tags in CR3 images + - Decode a couple more tags from Canon CR3 images + - Enhanced Validate option to check for duplicate QuickTime atoms + - Relaxed contraints when writing IPTC date tags to allow use of separators + other than a colon + - Fixed CR3 writing to update CTBO table with any changed offsets or sizes + (although this table doesn't seem to be used by any RAW viewer, it may be + used in-camera to improve response time when browsing images) + +May 29, 2019 - Version 11.45 + + - CORRUPTION WARNING: Patched problem where Canon DPP would destroy a CR3 + image if the file had previously been edited by DPP then Exiftool + (If you have edited any CR3 images with ExifTool that had been previously + edited by DPP, then re-edit with ExifTool 11.45 or later to restructure the + file so DPP doesn't destroy it if used later to edit the file again) + - Added ability to create and delete QuickTime Keys tags + - Added sample config file (mini0806.config) to generate GPS tags from + subtitle Text in Mini 0806 dashcam videos + - Added new Canon and Nikon lenses (thanks LibRaw) + - Added a new Olympus CameraType (thanks LibRaw) + - Decode CanonVRD tags from CR3 images + - Improved handling of QuickTime language tags when writing + - Fixed bug introduced in 11.38 which could cause "Use of uninitialized value" + runtime warning when reading XMP GPS tags + - Fixed bug where QuickTime tags could be written when another group was + specified + - API Changes: + - Added QuickTimeHandler option + +May 21, 2019 - Version 11.44 + + - Added ability to extract XMP as a block from XMP files + - Prevent ExifIFD from being deleted from any RAW file type + - Fixed problem where some Canon tags couldn't be written in CR3 files + - Fixed problem reading QuickTime Keys tags with a space in the tag ID + - Fixed incorrect family 1 group when reading some QuickTime Keys tags + +May 17, 2019 - Version 11.43 - "Write HEIC and CR3" + + - Added ability to write/create EXIF and write ICC_Profile in HEIC images + - Added ability to write/create EXIF and write MakerNotes in CR3 images + (one might hope/expect EXIF to be stored in the same location for HEIC and + CR3 since they are both based on the QuickTime file format, but in fact they + couldn't be more different, and both are much more complicated than + necessary, which of course follows the seemingly established practice of + intentional obfuscation and zero standardization in video metadata) + - Added support for QuickTime ItemList:Author and Keys:DisplayName tags + - Prevent MakerNotes from being deleted from any RAW file type + - Fixed writing of XMP in HEIC files to conform with the HEIC specification + (obviously, Apple couldn't put this XMP in the same place as any other + QuickTime-based file format, because Apple is, after all, king of "Let's + reinvent the wheel!") + - Fixed problem where API WriteMode option wouldn't always prevent groups from + being created when group creation was disabled + +May 13, 2019 - Version 11.42 + + - Added ability to edit ThumbnailImage in Canon MOV videos + - Improved verbose hex dump for HEIC files + - Fixed another "Chunk offset outside movie data" error when writing some HEIC + files + +May 9, 2019 - Version 11.41 + + - Added write support and improved language handling for 3GP QuickTime tags + - Fixed format problems writing some binary values to QuickTime tags + - Fixed some language translations (thanks Herbert Kauer) + +May 7, 2019 - Version 11.40 + + - Added a new Canon LensType + - Added a new value for EXIF:SceneCaptureType used by some Samsung cameras + - Fixed QuickTime writing to preserve existing same-named default-language + tags in other groups when writing a default language tag + +May 3, 2019 - Version 11.39 - "Create QuickTime tags" + + - Added ability to create new QuickTime tags in MOV/MP4 videos + - Added two new Canon LensTypes and a new CanonModelID (thanks LibRaw) + - Added a few new Sony/Minolta LensType values (thanks Jos Roost) + - Added a number of new QuickTime GenreID values + - Added range check on date/time values when writing + - Decode Canon EOS D60 black levels + - Split off some QuickTime tags into different family 1 groups + - Fixed "Chunk offset outside movie data" error when writing some HEIC files + - Fixed decoding of Pentax AutoBracketing for K-1 and K-5 + - Fixed some QuickTime family 2 group names + - Fixed bug introduced in 11.38 that broke extraction of thumbnail images from + Canon MOV videos + +Apr. 24, 2019 - Version 11.38 + + - Added Extra JPEGImageLength tag + - Added nksc.config to the sample config files + - Added a couple more Sony/Minolta LensTypes (thanks Jos Roost) + - Added a couple of new Sigma LensType values + - Decode a couple more tags from Pittasoft dashcam videos + - Decode two new FLIR tags (thanks Corinne Berthier) + - Decode a new ERF tag, and fix wrong format for some others (thanks LibRaw) + - Improved decoding of Sigma maker notes for some models + - Enhanced Composite tag logic to allow a scalar Inhibit entry + - Enhanced XMP processing to support readable subdirectories embedded in a tag + - Updated some language translations + - Patched Composite GPS reference direction tags to prevent them from being + created if these tags already exist + - Fixed problem reading some odd PDF files + +Apr. 17, 2019 - Version 11.37 + + - Added a new Sony AFAreaMode (thanks Jos Roost) + - Decode GPS and other tags from Pittasoft Blackvue dashcam videos + - Improved decoding of FujiFilm FlickerReduction + - Ignore any garbage before an NMEA sentence when geotagging + - Fixed bug which could result in loss of timed GPS metadata when writing MP4 + videos + +Apr. 15, 2019 - Version 11.36 + + - Added a number of new MacOS tags + - Added a new CanonModelID (thanks Laurent Clevy) + - Added some new Canon EasyMode and AFAreaMode values + - Added two new Canon AspectRatio values (thanks LibRaw) + - Decode a new Nikon tag (thanks LibRaw) + - Decode some new FujiFilm tags + - Updated Sony maker notes for the DSC-RX0M2 (thanks Jos Roost) + - Hide the Nikon ShotInfo offset tags + - Fixed problem decoding NikonCustom settings for some D810 firmware versions + - Fixed typo in a warning message (thanks Hayo Baan) + +Apr. 9, 2019 - Version 11.35 + + - Added print conversion for MDItemFSLabel + - Added a new Sony LensType (thanks Jos Roost) + - Added an additional -validate check for PNG images + - Decode a few more FujiFilm RAF tags (thanks LibRaw) + - Decode a couple more QuickTime tags + - Allow "Copy0" to be specified as a group name for the copy number of the + primary tag when extracting information + - Improved the Composite ImageSize tag to report the RawImageCroppedSize for + FujiFilm RAF images + - Changed Composite ImageSize tag to use a space instead of "x" as a separator + when the -n option is used + - Fixed problem writing user-defined PhaseOne SensorCalibration tags + - Fixed problem where a List-type tag may not be split into individual items + with the -sep option when using the advanced-formatting "@" feature + - API Changes: + - Patched a potential pitfall if calling code used both the old List and + ListSep options at the same time as the new ListJoin option + +Apr. 4, 2019 - Version 11.34 + + - Added a couple of new Canon LensType values (thanks LibRaw for one) + - Added a new CanonExposureMode value (thanks Arnold van Oostrum) + - Added support for FujiFilm X-H1 Ver2.01 RAF images + - Decode a couple of new Sony tags (thanks LibRaw) + - Improved decoding of Sony Shutter tag (thanks Jos Roost) + - Improved identification of some Sony lenses (thanks Jos Roost) + - Improved parsing of streamed metadata from TomTom Bandit videos + - Improved warning for truncated QuickTime atom + - Accept wider range of formats when writing QuickTime:GPSCoordinates + - API Changes: + - Changed SetFileName() 'Link' option name to 'HardLink' (but still allow + 'Link' for backward compatibility) + +Mar. 28, 2019 - Version 11.33 + + - Added write support for HEIC/HEIF files + - Added new write-only SymLink tag for creating symbolic links + - Made EXIF GDALMetadata and GDALNoData writable + - Enhanced writing capabilities for MOV/MP4 videos + - Enhanced -validate option to add more IPTC checks + - Updated decoding of Sony ILCE-9 maker notes for firmware version 5.00 + (thanks Jos Roost) + - Fixed problem reading streamed metadata from some TomTom Bandit videos + - API Changes: + - Added SymLink option to SetFileName() + +Mar. 14, 2019 - Version 11.32 + + - Added a new Nikon LensID (thanks Kenneth Cochran) + - Added a couple of new QuickTime HandlerType values + - Decode streamed metadata from DuDuBell M1 and VSYS M6L dashcam videos + - Attempt to improve Nikon lens identification + - API Changes: + - Added new single-argument version of ShiftTime() + +Mar. 7, 2019 - Version 11.31 + + - Added read support for FITS images + - Another try at removing spaces from some DICOM values (github issues #10/12) + +Mar. 6, 2019 - Version 11.30 (production release) + + - Added a new Sony/Minolta LensType (thanks Jos Roost) + - Decode streaming metadata from TomTom Bandit Action Cam MP4 videos + - Decode Reconyx HF2 PRO maker notes + - Decode ColorData for some new Canon models (thanks LibRaw) + - Enhanced -geotag feature to set AmbientTemperature if available + - Remove non-significant spaces from some DICOM values (github issues #10/12) + - Fixed possible "'x' outside of string" error when reading corrupted EXIF + - Fixed incorrect write group for GeoTIFF tags added in version 11.24 + +Feb. 28, 2019 - Version 11.29 + + - Added support for Ricoh GR III maker notes + - Added a new Canon LensType (thanks Claude Jolicoeur) + - Added a new XMP-crs tag (github issue #8) + - Enhanced -csv option to output base64-encoded binary data when combined with + -b or when the -charset option is used and the text has invalid characters + (github issue #11) + - Remove trailing space from even-length DICOM values (github issue #9) + - Patched to avoid "Hexadecimal number > 0xffffffff non-portable" warning + (github issue #6) + - Fixed meta charset attribute in -htmlDump output + +Feb. 21, 2019 - Version 11.28 + + - Added support for reading INSV video and decode streaming GPS + - Added a new Pentax LensType (thanks Louis Granboulan) + - Added a new FujiFilm ImageStabilization value + - Allow exiftool to be run via a symbolic link on Mac/Linux + - Reverted INDD patch of version 11.27 (ie. raise error again on incorrectly + terminated INDD object list) + - Changed handling of temporary documentation file in Windows version + +Feb. 14, 2019 - Version 11.27 + + - Added support for more XMP-dji-drone tags + - Added new Olympus CameraType and LensType values (thanks LibRaw) + - Added a new Canon LensType (thanks LibRaw) + - Added a new CanonModelID + - Decode yet another type of GPS from DashCam videos + - Allow FileName to be written when only case is changed on case-insensitive + filesystems + - Improved identification of some iWork file types + - Recognize the LRV file extension + - Changed Windows version to use the parent folder of PAR_GLOBAL_TEMP for the + temporary documentation file + - Don't raise an error if an INDD object list is terminated by spaces instead + of nulls + - Fixed some problems with new -htmldump IFD highlighting feature + - Fixed bug introduced in 11.24 with "-o -.EXT" feature + +Jan. 21, 2019 - Version 11.26 + + - Added a new Nikon LensID (thanks LibRaw) + - Decode more tags for the Sony ICLE-6400 (thanks Jos Roost and LibRaw) + - Enhanced -htmldump feature to highlight IFD when mousing over IFD offset + +Jan. 15, 2019 - Version 11.25 + + - Added a new Sony/Minolta LensType (thanks LibRaw) + - Added a new Nikon LensID + - Decode Leica D-Lux7 maker notes + - Decode more Nikon AF tags for newer models + - Decode Samsung Type2 maker notes with lower case Make + - Decode another Sony tag (thanks Jos Roost) + - Improved decoding of Nikon LensType + - Improved time shift feature to fix some incorrectly formatted date/time + values + - Renamed some Sony ImageCount tags to ShutterCount (thanks Jos Roost) + - Fixed problem reading back metadata written to some odd PDF files + +Jan. 8, 2019 - Version 11.24 + + - Compatibility Notice: Changed the meaning of '-' and '+' modifiers for %C + formatting code (does not affect lower-case %c code) + - Decode a number of new Nikon tags (thanks Michael Tapes for samples) + - Added new Olympus FlashType and FlashModel values (thanks Per) + - Added a new Canon LensType + - Added a new Nikon LensID + - Made more GeoTIFF tags writable + - Handle XMP rdf:value when reading + - Improved warning when trying to read a file with a zero-length name + - Fixed decoding of PictureControl tags for Nikon Z-7 + - Fixed problem writing date/time values with " DST" designator at end of + date/time string + - Fixed problem in Windows which could cause ExifTool to abort due to a + Win32::FindFile error if a file name contained surrogate Unicode characters + +Dec. 21, 2018 - Version 11.23 + + - Recognize DWG and DWF files + - Minor improvement to some -validate warnings + - Tolerate leading UTF-8 byte order mark (BOM) at start of JSON files + - Fixed problem recognizing some streaming camm metadata in QuickTime videos + +Dec. 13, 2018 - Version 11.22 + + - Added read support for PC Paintbrush (PCX) files + - Added two new Sony/Minolta LensTypes (thanks Jos Roost and LibRaw) + - Decode LensData tags for some newer Nikon models + - Decode ColorData for the Canon EOS R (thanks LibRaw) + - Recognize DCX files + +Dec. 7, 2018 - Version 11.21 + + - Added a new Sony/Minolta LensType (thanks Jos Roost) + - Added a new Olympus FlashModel (thanks Michael Meissner) + - Improved decoding of FujiFilm InternalSerialNumber (thanks LibRaw) + - Minor improvements to decoding of GPS from some dashcam videos + - Made XMP-getty:Personality a List-type tag + - Made it an error to use the -o option or write FileName or Directory tags + when using the TestName dry-run feature + - Fixed problem using -E with other character sets when writing + +Nov. 20, 2018 - Version 11.20 + + - Added a new Panasonic WhiteBalance value + - Added a new Nikon LensID (thanks LibRaw) + - Decode streaming GPS from MOV videos for another dashcam model + - Improved -E option to support character sets other than UTF-8 + +Nov. 14, 2018 - Version 11.19 + + - Added -fast4 option + - Enhanced -if option to allow arbitrary Perl expressions instead of just + logic expressions + - API Changes: + - Enhanced FastScan option to add a setting of 4 + +Nov. 12, 2018 - Version 11.18 + + - Decode a new Nikon tag (thanks Richard Butler) + - Decode a new FujiFilm tag + - Updated decoding of Sony maker notes for newer models (thanks Jos Roost) + - Enhanced -if option to allow fast processing pass to evaluate the condition + - Improved warning for unknown JPEG APP segment + +Nov. 4, 2018 - Version 11.17 + + - Added a new Canon LensType (thanks Norbert Wasser) + - Added a new Sony/Minolta LensType and a new SonyModelID (thanks LibRaw) + - Decode GPS from Garmin Dashcam videos + - Changed type of J2C files from a JPEG 2000 image to a JPEG 2000 codestream + Oct. 26, 2018 - Version 11.16 - Decode FLIR GPS information @@ -392,7 +1099,7 @@ Feb. 22, 2018 - Version 10.80 (production release) Feb. 11, 2018 - Version 10.79 - Added a new Olympus CameraType (thanks LibRaw) - - Added a new XMP-microsoft tag (thanks José Oliver-Didier) + - Added a new XMP-microsoft tag (thanks Jose Oliver-Didier) - Decode a new GoPro QuickTime tag - Convert nulls IPTC:DocumentHistory to newlines - Removed all null terminators from JSON and PHP output @@ -983,16 +1690,16 @@ Oct. 5, 2016 - Version 10.29 (ie. the date/time is not converted) unless the API StrictDate option is set in which case a warning is issued and the tag is not written -Sept. 27, 2016 - Version 10.28 - "EXIF 2.31" +Sept. 27, 2016 - Version 10.28 - "Exif 2.31" - - Added support for new EXIF 2.31 tags + - Added support for new Exif 2.31 tags - Added some new Canon LensType values (thanks Norbert Wasser for one) - Added a new Olympus LensType (thanks LibRaw and Niels Kristian Bech Jensen) - Added a new Sony LensType and SonyModelID (thanks Jos Roost) - Added a new Pentax LensType - Added fotoware.config and bibble.config files to the distribution - Made Composite SubSecDateTimeOriginal, SubSecCreateDate and SubSecModifyDate - tags writable, and expanded to include new EXIF 2.31 time zone tags + tags writable, and expanded to include new Exif 2.31 time zone tags - Fixed problem writing user-defined structured tag elements with a dot (.) in their tag ID @@ -3873,7 +4580,7 @@ June 2, 2010 - Version 8.21 - 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 +May 26, 2010 - Version 8.20 - "Exif 2.3" - Added read support for Open Document files (ODP, ODS, ODT) - Added Composite:AudioBitrate tag for VBR MPEG audio @@ -5925,7 +6632,7 @@ Feb. 20, 2007 - Version 6.77 - "XML/HTML special characters" - Translate all non-ASCII characters to HTML character entities with -h or -E - Added full UTF-8 translation support when run with Perl pre-5.6.1 - Decode a few new Sigma SD14 tags - - Decode a couple more Nikon tags + - Decode a couple more Nikon tags (thanks Greg Troxel) Feb. 16, 2007 - Version 6.76 (production release) @@ -6479,7 +7186,8 @@ May 24, 2006 - Version 6.20 - 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 parsing DateTimeOriginal in Casio EX-Z30 AVI files (thanks + Joachim Loehr) - 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 @@ -7451,7 +8159,7 @@ Apr. 2, 2005 - Version 4.93 (production release) Mar. 31, 2005 - Version 4.92 - Added support for Kodak and Ricoh cameras - - Decode still more Olympus E-1/E-300 tags + - Decode still more Olympus E-1/E-300 tags (thanks Markku Hanninen) - Added 'Directory' tag - Decode a few more Pentax tags (thanks to John Francis) - Allow newlines in tag values on command line when writing @@ -7459,13 +8167,13 @@ Mar. 31, 2005 - Version 4.92 Mar. 28, 2005 - Version 4.91 - - Decode yet more Olympus E-1/E-300 tags + - Decode yet more Olympus E-1/E-300 tags (thanks Markku Hanninen) - 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) + - Improved decoding for some Nikon tags (thanks Tom Christiansen) - Added Nikon shortcut - Added composite SubSecDateTimeOriginal tag - Fixed problem where CRW file without file extension wasn't being identified @@ -7873,7 +8581,7 @@ Jan. 7, 2005 - Version 4.10 Dec. 15, 2004 - Version 4.05 - - Added a couple of Nikon tags + - Added a couple of Nikon tags (thanks Brian Ristuccia) - 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 @@ -7891,7 +8599,7 @@ 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) + - Added a new Nikon tag (thanks Thomas Walter) - Count images which were unchanged when writing tags - Changed FileType 'JPG' to 'JPEG' @@ -8292,7 +9000,7 @@ Feb. 17, 2004 - Version 3.03 - Fixed RandomAccessFile package name (should have been File::RandomAccessFile) - - Added IxusAFPoint tag to Canon maker notes + - Added IxusAFPoint tag to Canon maker notes (thanks Michael Rommel) - Avoid scanning past end of Canon binary data blocks - API Changes: - GetFoundTags() and GetRequestedTags() now return list instead of list @@ -8349,7 +9057,7 @@ Feb. 11, 2004 - Version 2.70 Feb. 10, 2004 - Version 2.62 - Added -u option to allow display of unknown tags - - Major changes to Pentax maker notes (still needs work) + - Major changes to Pentax maker notes (still needs work) (thanks Wayne Smith) Feb. 09, 2004 - Version 2.61 @@ -8379,7 +9087,7 @@ Jan. 30, 2004 - Version 2.51 Jan. 29, 2004 - Version 2.50 - Changed API to return binary data as SCALAR reference and - list of values as ARRAY reference + list of values as ARRAY reference (thanks Dan Heller for the suggestions) - Attempt to make case of tag descriptions more consistent Jan. 28, 2004 - Version 2.41 @@ -8428,7 +9136,8 @@ 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 + - Set output files to binmode (including STDOUT) if -b option used (thanks + David Anson) Jan. 1, 2004 - Version 2.24 @@ -8506,7 +9215,7 @@ Nov. 26, 2003 - Version 1.40 Nov. 25, 2003 - Version 1.30 - - Added experimental Canon RAW (CRW) file support + - Added experimental Canon RAW (CRW) file support Nov. 22, 2003 - Version 1.20 diff --git a/src/Image-ExifTool/README b/src/Image-ExifTool/README index 61524fe9..620618cb 100644 --- a/src/Image-ExifTool/README +++ b/src/Image-ExifTool/README @@ -1,4 +1,4 @@ -ExifTool by Phil Harvey (phil at owl.phy.queensu.ca) +ExifTool by Phil Harvey (philharvey66 at gmail.com) ---------------------------------------------------------------------------- ExifTool is a customizable set of Perl modules plus a full-featured @@ -14,44 +14,45 @@ supported by ExifTool (r = read, w = write, c = create): File Types ------------+-------------+-------------+-------------+------------ - 3FR r | DR4 r/w/c | J2C r | ODP r | RAW r/w - 3G2 r/w | DSS r | JNG r/w | ODS r | RIFF r - 3GP r/w | DV r | JP2 r/w | ODT r | RSRC r - A r | DVB r/w | JPEG r/w | OFR r | RTF r - AA r | DVR-MS r | JSON r | OGG r | RW2 r/w - AAE r | DYLIB r | K25 r | OGV r | RWL r/w - AAX r/w | EIP r | KDC r | OPUS r | RWZ r - ACR r | EPS r/w | KEY r | ORF r/w | RM r - AFM r | EPUB r | LA r | OTF r | SEQ r - AI r/w | ERF r/w | LFP r | PAC r | SKETCH r - AIFF r | EXE r | LNK r | PAGES r | SO r - APE r | EXIF r/w/c | M2TS r | PBM r/w | SR2 r/w - ARQ r/w | EXR r | M4A/V r/w | PCD r | SRF r - ARW r/w | EXV r/w/c | MAX r | PDB r | SRW r/w - ASF r | F4A/V r/w | MEF r/w | PDF r/w | SVG r - AVI r | FFF r/w | MIE r/w/c | PEF r/w | SWF r - AZW r | FLA r | MIFF r | PFA r | THM r/w - BMP r | FLAC r | MKA r | PFB r | TIFF r/w - BPG r | FLIF r/w | MKS r | PFM r | TORRENT r - BTF r | FLV r | MKV r | PGF r | TTC r - CHM r | FPF r | MNG r/w | PGM r/w | TTF r - COS r | FPX r | MOBI r | PLIST r | VCF r - CR2 r/w | GIF r/w | MODD r | PICT r | VRD r/w/c - CR3 r/w | GPR r/w | MOI r | PMP r | VSD r - CRM r/w | GZ r | MOS r/w | PNG r/w | WAV r - CRW r/w | HDP r/w | MOV r/w | PPM r/w | WDP r/w - CS1 r/w | HDR r | MP3 r | PPT r | WEBP r - DCM r | HEIC r | MP4 r/w | PPTX r | WEBM r - DCP r/w | HEIF r | MPC r | PS r/w | WMA r - DCR r | HTML r | MPG r | PSB r/w | WMV r - DFONT r | ICC r/w/c | MPO r/w | PSD r/w | WTV r - DIVX r | ICS r | MQV r/w | PSP r | WV r - DJVU r | IDML r | MRW r/w | QTIF r/w | X3F r/w - DLL r | IIQ r/w | MXF r | R3D r | XCF r - DNG r/w | IND r/w | NEF r/w | RA r | XLS r - DOC r | INX r | NRW r/w | RAF r/w | XLSX r - DOCX r | ISO r | NUMBERS r | RAM r | XMP r/w/c - DPX r | ITC r | O r | RAR r | ZIP r + 3FR r | DSS r | J2C r | ODP r | RAW r/w + 3G2 r/w | DV r | JNG r/w | ODS r | RIFF r + 3GP r/w | DVB r/w | JP2 r/w | ODT r | RSRC r + A r | DVR-MS r | JPEG r/w | OFR r | RTF r + AA r | DYLIB r | JSON r | OGG r | RW2 r/w + AAE r | EIP r | K25 r | OGV r | RWL r/w + AAX r/w | EPS r/w | KDC r | OPUS r | RWZ r + ACR r | EPUB r | KEY r | ORF r/w | RM r + AFM r | ERF r/w | LA r | OTF r | SEQ r + AI r/w | EXE r | LFP r | PAC r | SKETCH r + AIFF r | EXIF r/w/c | LNK r | PAGES r | SO r + APE r | EXR r | LRV r/w | PBM r/w | SR2 r/w + ARQ r/w | EXV r/w/c | M2TS r | PCD r | SRF r + ARW r/w | F4A/V r/w | M4A/V r/w | PCX r | SRW r/w + ASF r | FFF r/w | MAX r | PDB r | SVG r + AVI r | FITS r | MEF r/w | PDF r/w | SWF r + AZW r | FLA r | MIE r/w/c | PEF r/w | THM r/w + BMP r | FLAC r | MIFF r | PFA r | TIFF r/w + BPG r | FLIF r/w | MKA r | PFB r | TORRENT r + BTF r | FLV r | MKS r | PFM r | TTC r + CHM r | FPF r | MKV r | PGF r | TTF r + COS r | FPX r | MNG r/w | PGM r/w | TXT r + CR2 r/w | GIF r/w | MOBI r | PLIST r | VCF r + CR3 r/w | GPR r/w | MODD r | PICT r | VRD r/w/c + CRM r/w | GZ r | MOI r | PMP r | VSD r + CRW r/w | HDP r/w | MOS r/w | PNG r/w | WAV r + CS1 r/w | HDR r | MOV r/w | PPM r/w | WDP r/w + DCM r | HEIC r/w | MP3 r | PPT r | WEBP r + DCP r/w | HEIF r/w | MP4 r/w | PPTX r | WEBM r + DCR r | HTML r | MPC r | PS r/w | WMA r + DFONT r | ICC r/w/c | MPG r | PSB r/w | WMV r + DIVX r | ICS r | MPO r/w | PSD r/w | WTV r + DJVU r | IDML r | MQV r/w | PSP r | WV r + DLL r | IIQ r/w | MRW r/w | QTIF r/w | X3F r/w + DNG r/w | IND r/w | MXF r | R3D r | XCF r + DOC r | INSV r | NEF r/w | RA r | XLS r + DOCX r | INX r | NRW r/w | RAF r/w | XLSX r + DPX r | ISO r | NUMBERS r | RAM r | XMP r/w/c + DR4 r/w/c | ITC r | O r | RAR r | ZIP r Meta Information ----------------------+----------------------+--------------------- @@ -75,7 +76,7 @@ See html/index.html for more details about ExifTool features. ExifTool can be downloaded from - http://owl.phy.queensu.ca/~phil/exiftool/ + https://exiftool.org/ RUNNING @@ -103,8 +104,8 @@ 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-11.16.tar.gz | tar -xf - - cd Image-ExifTool-11.16 + gzip -dc Image-ExifTool-11.78.tar.gz | tar -xf - + cd Image-ExifTool-11.78 ./exiftool t/images/ExifTool.jpg Note: These commands extract meta information from one of the test images. @@ -158,7 +159,7 @@ for calculating digest values and providing other features listed below: COPYRIGHT AND LICENSE -Copyright 2003-2018, Phil Harvey +Copyright 2003-2019, Phil Harvey This is free software; you can redistribute it and/or modify it under the same terms as Perl itself. @@ -189,19 +190,22 @@ distribution package: config_files/ - Sample ExifTool configuration files: age.config - Calculate Age of person in photo bibble.config - Definitions for writing Bibble XMP tags - convert_regions.config - Convert between MWG and MP face regions - dji.config - Composite tags for metadata in DJI videos + convert_regions.config - Convert between MWG, MP and IPTC regions example.config - General example showing config features fotoware.config - Definitions for writing Fotoware XMP tags gps2utm.config - Generate UTM coordinate tags from GPS info + nksc.config - Decode tags in Nikon ViewNX NKSC files photoshop_paths.config - For extracting or copying Photoshop paths picasa_faces.config - Convert from Picasa to MWG/MP face regions + rotate_regions.config - Rotate MWG and MP region tags + tiff_version.config - Determine the version of a TIFF file time_zone.config - Calcuate time zone from EXIF tags 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 + kml.fmt - Format file for creating KML placemarks + kml_track.fmt - Format file for creating KML track html/ - HTML documentation html/TagNames/ - HTML tag name documentation lib/ - ExifTool Perl library modules diff --git a/src/Image-ExifTool/arg_files/exif2iptc.args b/src/Image-ExifTool/arg_files/exif2iptc.args new file mode 100644 index 00000000..408d8e48 --- /dev/null +++ b/src/Image-ExifTool/arg_files/exif2iptc.args @@ -0,0 +1,31 @@ +#------------------------------------------------------------------------------ +# 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 +# 2017/07/06 - PH Set time zone from new EXIF OffsetTime tags +# +# 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 existing 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:TimeCreated < Composite:SubSecDateTimeOriginal +-IPTC:DigitalCreationDate < EXIF:CreateDate +-IPTC:DigitalCreationTime < EXIF:CreateDate +-IPTC:DigitalCreationTime < Composite:SubSecCreateDate +# end diff --git a/src/Image-ExifTool/arg_files/exif2xmp.args b/src/Image-ExifTool/arg_files/exif2xmp.args new file mode 100644 index 00000000..f1085ed7 --- /dev/null +++ b/src/Image-ExifTool/arg_files/exif2xmp.args @@ -0,0 +1,48 @@ +#------------------------------------------------------------------------------ +# File: exif2xmp.args +# +# Description: Tag name translations for converting EXIF to XMP +# +# Usage: exiftool -tagsFromFile SRCFILE -@ exif2xmp.args DSTFILE +# +# Requires: ExifTool version 10.96 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 +# 2018/05/07 - PH Added support for GPSDestXxxRef tags +# +# 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 existing 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:GPSDestLatitude < Composite:GPSDestLatitude +-XMP:GPSDestLongitude < Composite:GPSDestLongitude +-XMP:GPSDateTime < Composite:GPSDateTime +# end diff --git a/src/Image-ExifTool/arg_files/gps2xmp.args b/src/Image-ExifTool/arg_files/gps2xmp.args new file mode 100644 index 00000000..96482ba8 --- /dev/null +++ b/src/Image-ExifTool/arg_files/gps2xmp.args @@ -0,0 +1,27 @@ +#------------------------------------------------------------------------------ +# File: gps2xmp.args +# +# Description: Argument file for copying GPS information from EXIF to XMP +# +# Usage: exiftool -tagsFromFile SRCFILE -@ gps2xmp.args DSTFILE +# +# Requires: ExifTool version 10.96 or later +# +# Revisions: 2009/01/09 - P. Harvey Created +# 2018/05/07 - PH Handle GPSDestLatitude/LongitudeRef tags +# +# 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 existing XMP tags which are +# missing from the GPS. The XMP GPS tags should be deleted +# first with "-xmp:gps*=" if required. +#------------------------------------------------------------------------------ +-XMP:all < GPS:all +-XMP:GPSLatitude < Composite:GPSLatitude +-XMP:GPSLongitude < Composite:GPSLongitude +-XMP:GPSDestLatitude < Composite:GPSDestLatitude +-XMP:GPSDestLongitude < Composite:GPSDestLongitude +-XMP:GPSDateTime < Composite:GPSDateTime +# end diff --git a/src/Image-ExifTool/arg_files/iptc2exif.args b/src/Image-ExifTool/arg_files/iptc2exif.args new file mode 100644 index 00000000..4cafcc8a --- /dev/null +++ b/src/Image-ExifTool/arg_files/iptc2exif.args @@ -0,0 +1,24 @@ +#------------------------------------------------------------------------------ +# 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 +# 2017/07/06 - PH Set new EXIF OffsetTime tags +# +# Notes: These arguments will not delete existing 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 +-EXIF:OffsetTimeOriginal < IPTC:TimeCreated +-EXIF:OffsetTimeDigitized < IPTC:DigitalCreationTime +# end diff --git a/src/Image-ExifTool/arg_files/iptc2xmp.args b/src/Image-ExifTool/arg_files/iptc2xmp.args new file mode 100644 index 00000000..1e387f6c --- /dev/null +++ b/src/Image-ExifTool/arg_files/iptc2xmp.args @@ -0,0 +1,57 @@ +#------------------------------------------------------------------------------ +# 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 existing 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 diff --git a/src/Image-ExifTool/arg_files/iptcCore.args b/src/Image-ExifTool/arg_files/iptcCore.args new file mode 100644 index 00000000..1f3de09f --- /dev/null +++ b/src/Image-ExifTool/arg_files/iptcCore.args @@ -0,0 +1,241 @@ +#------------------------------------------------------------------------------ +# 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 +# 2017/06/02 - PH Updated to IPTC Extension version 1.3 +# 2018/08/20 - PH Updated to IPTC Extension version 1.4 +# +# 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 + +# +# xmp schema +# + +-XMP-xmp:Rating + +# +# xmpRights schema +# + +-XMP-xmpRights:UsageTerms +-XMP-xmpRights:WebStatement + +# +# 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:ArtworkContentDescription +-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 +-XMP-iptcExt:RegistryEntryRole + +# Genre struct +-XMP-iptcExt:Genre +-XMP-iptcExt:GenreCvId +-XMP-iptcExt:GenreCvTermId +-XMP-iptcExt:GenreCvTermName +-XMP-iptcExt:GenreCvTermRefinedAbout + +# +# 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 diff --git a/src/Image-ExifTool/arg_files/pdf2xmp.args b/src/Image-ExifTool/arg_files/pdf2xmp.args new file mode 100644 index 00000000..58eb2887 --- /dev/null +++ b/src/Image-ExifTool/arg_files/pdf2xmp.args @@ -0,0 +1,27 @@ +#------------------------------------------------------------------------------ +# 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 existing 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 diff --git a/src/Image-ExifTool/arg_files/xmp2exif.args b/src/Image-ExifTool/arg_files/xmp2exif.args new file mode 100644 index 00000000..cadb1aaf --- /dev/null +++ b/src/Image-ExifTool/arg_files/xmp2exif.args @@ -0,0 +1,49 @@ +#------------------------------------------------------------------------------ +# File: xmp2exif.args +# +# Description: Tag name translations for converting XMP to EXIF +# +# Usage: exiftool -tagsFromFile SRCFILE -@ xmp2exif.args DSTFILE +# +# Requires: ExifTool version 10.96 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 +# 2016/09/26 - PH Write Composite SubSec tags +# 2018/05/07 - PH Added support for GPSDestXxxRef tags +# +# 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 existing 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 +# the following 3 SubSec tags also write/delete the corresponding EXIF +# SubSecTime and OffsetTime tags as appropriate +-Composite:SubSecDateTimeOriginal < XMP-photoshop:DateCreated +-Composite:SubSecCreateDate < XMP-xmp:CreateDate +-Composite:SubSecModifyDate < 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:GPSDestLatitudeRef < Composite:GPSDestLatitudeRef +-GPS:GPSDestLongitudeRef < Composite:GPSDestLongitudeRef +-GPS:GPSDatestamp < XMP-exif:GPSDateTime +-GPS:GPSTimestamp < XMP-exif:GPSDateTime +# end diff --git a/src/Image-ExifTool/arg_files/xmp2gps.args b/src/Image-ExifTool/arg_files/xmp2gps.args new file mode 100644 index 00000000..0e978f3a --- /dev/null +++ b/src/Image-ExifTool/arg_files/xmp2gps.args @@ -0,0 +1,31 @@ +#------------------------------------------------------------------------------ +# File: xmp2gps.args +# +# Description: Argument file for copying GPS information from XMP to EXIF +# +# Usage: exiftool -tagsFromFile SRCFILE -@ xmp2gps.args DSTFILE +# +# Requires: ExifTool version 10.96 or later +# +# Revisions: 2009/01/09 - P. Harvey Created +# 2018/05/07 - PH Handle GPSDestLatitude/LongitudeRef tags +# +# 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 existing GPS tags which are +# missing from the XMP. The GPS tags should be deleted with +# "-gps:all=" first if required. +#------------------------------------------------------------------------------ +-GPS:all < XMP-exif:all +-GPS:GPSLatitudeRef < Composite:GPSLatitudeRef +-GPS:GPSLongitudeRef < Composite:GPSLongitudeRef +-GPS:GPSDestLatitudeRef < Composite:GPSDestLatitudeRef +-GPS:GPSDestLongitudeRef < Composite:GPSDestLongitudeRef +-GPS:GPSDateStamp < XMP-exif:GPSDateTime +-GPS:GPSTimeStamp < XMP-exif:GPSDateTime +# end diff --git a/src/Image-ExifTool/arg_files/xmp2iptc.args b/src/Image-ExifTool/arg_files/xmp2iptc.args new file mode 100644 index 00000000..3d873175 --- /dev/null +++ b/src/Image-ExifTool/arg_files/xmp2iptc.args @@ -0,0 +1,66 @@ +#------------------------------------------------------------------------------ +# 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: +# https://exiftool.org/faq.html#Q10 +# +# 3) These arguments will not delete existing 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 diff --git a/src/Image-ExifTool/arg_files/xmp2pdf.args b/src/Image-ExifTool/arg_files/xmp2pdf.args new file mode 100644 index 00000000..b7f8ab82 --- /dev/null +++ b/src/Image-ExifTool/arg_files/xmp2pdf.args @@ -0,0 +1,27 @@ +#------------------------------------------------------------------------------ +# 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 existing 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 diff --git a/src/Image-ExifTool/exiftool b/src/Image-ExifTool/exiftool index 3039cc61..69187df6 100755 --- a/src/Image-ExifTool/exiftool +++ b/src/Image-ExifTool/exiftool @@ -6,19 +6,24 @@ # # 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 = '11.16'; +my $version = '11.78'; # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool' my $exeDir; BEGIN { # get exe directory $exeDir = ($0 =~ /(.*)[\\\/]/) ? $1 : '.'; + if (-l $0) { + my $lnk = eval { readlink $0 }; + if (defined $lnk) { + my $lnkDir = ($lnk =~ /(.*)[\\\/]/) ? $1 : '.'; + $exeDir = (($lnk =~ m(^/)) ? '' : $exeDir . '/') . $lnkDir; + } + } # add lib directory at start of include path unshift @INC, "$exeDir/lib"; # load or disable config file if specified @@ -35,7 +40,7 @@ sub SigCont(); sub Cleanup(); sub GetImageInfo($$); sub SetImageInfo($$$); -sub DoHardLink($$$$); +sub DoHardLink($$$$$); sub CleanXML($); sub EncodeXML($); sub FormatXML($$$); @@ -78,6 +83,7 @@ END { # declare all static file-scope variables my @commonArgs; # arguments common to all commands +my @condition; # conditional processing of files my @csvFiles; # list of files when reading with CSV option (in ExifTool Charset) my @csvTags; # order of tags for first file with CSV option (lower case) my @delFiles; # list of files to delete @@ -91,6 +97,7 @@ 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 %countLink; # count hard and symbolic links made 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 (in ExifTool Charset) @@ -105,24 +112,22 @@ 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 $altEnc; # alternate character encoding if not UTF-8 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 $binSep; # separator used for list items in binary output my $binTerm; # terminator used for binary output my $comma; # flag set if we need a comma in JSON output -my $condition; # conditional processing of files my $count; # count of files scanned when reading or deleting originals 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) @@ -133,10 +138,12 @@ my $deleteOrig; # 0=restore original files, 1=delete originals, 2=delete w/o 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 $escapeC; # C-style escape my $escapeHTML; # flag to escape printed values for html my $evalWarning; # warning from eval my $executeID; # -execute ID number my $failCondition; # flag to fail -if condition +my $fastCondition; # flag for fast -if condition 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 @@ -172,7 +179,9 @@ my $saveCount; # count the number of times we will/did call SaveNewValues() my $scanWritable; # flag to process only writable file types my $sectHeader; # current section header for -p option my $sectTrailer; # section trailer for -p option +my $seqFileBase; # sequential file number at start of directory my $seqFileNum; # sequential file number used for %C +my $setCharset; # character set setting ('default' if not set and -csv -b used) 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 @@ -184,7 +193,6 @@ 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) @@ -211,6 +219,11 @@ 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' ); +# lookup for C-style escape sequences +my %escC = ( "\n" => '\n', "\r" => '\r', "\t" => '\t', '\\' => '\\\\'); +my %unescC = ( a => "\a", b => "\b", f => "\f", n => "\n", r => "\r", + t => "\t", 0 => "\0", '\\' => '\\' ); + # options requiring additional arguments # (used only to skip over these arguments when reading -stay_open ARGFILE) # (arg is converted to lower case then tested again unless an entry was found with the same case) @@ -230,7 +243,7 @@ my %optArgs = ( '-geotag' => 1, '-globaltimeshift' => 1, '-i' => 1, '-ignore' => 1, - '-if' => 1, + '-if' => 1, '-if0' => 1, '-if1' => 1, '-if2' => 1, '-if3' => 1, '-if4' => 1, '-lang' => 0, # (optional arg; cannot begin with "-") '-listitem' => 1, '-o' => 1, '-out' => 1, @@ -379,6 +392,7 @@ if ($stayOpen >= 2) { # initialize necessary static file-scope variables # (not done: @commonArgs, @moreArgs, $critical, $binaryStdout, $helped, # $interrupted, $mt, $pause, $rtnValApp, $rtnValPrev, $stayOpen, $stayOpenBuff, $stayOpenFile) +undef @condition; undef @csvFiles; undef @csvTags; undef @delFiles; @@ -391,6 +405,7 @@ undef @newValues; undef @srcFmt; undef @tags; undef %appended; +undef %countLink; undef %created; undef %csvTags; undef %database; @@ -405,12 +420,12 @@ undef %utf8FileName; undef %warnedOnce; undef %wext; undef $allGroup; +undef $altEnc; undef $argFormat; undef $binaryOutput; undef $binSep; undef $binTerm; undef $comma; -undef $condition; undef $csv; undef $csvAdd; undef $deleteOrig; @@ -418,9 +433,11 @@ undef $disableOutput; undef $doSetFileName; undef $doUnzip; undef $escapeHTML; +undef $escapeC; undef $evalWarning; undef $executeID; undef $failCondition; +undef $fastCondition; undef $fileHeader; undef $filtered; undef $fixLen; @@ -437,6 +454,7 @@ undef $progressMax; undef $recurse; undef $scanWritable; undef $sectHeader; +undef $setCharset; undef $showGroup; undef $showTagID; undef $structOpt; @@ -452,14 +470,12 @@ undef $windowTitle; $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; @@ -476,17 +492,16 @@ $quiet = 0; $rtnVal = 0; $saveCount = 0; $sectTrailer = ''; +$seqFileBase = 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 $fileOrderFast; # -fast level for -fileOrder option 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 @@ -756,8 +771,16 @@ for (;;) { 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'); + { + local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] }; + undef $evalWarning; + $mt->Options(Charset => $charset); + } + if ($evalWarning) { + warn $evalWarning; + } else { + $setCharset = $mt->Options('Charset'); + } } else { # set internal encoding of specified metadata type my $type = { id3 => 'ID3', iptc => 'IPTC', exif => 'EXIF', filename => 'FileName', @@ -810,6 +833,7 @@ for (;;) { (/^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 'ec' or $a eq 'escapec') and $escapeC = 1, next; # (undocumented) added in 11.54 ($a eq 'ex' or $a eq 'escapexml') and $escapeXML = 1, next; if (/^echo(\d)?$/i) { my $n = $1 || 1; @@ -851,8 +875,10 @@ for (;;) { $mt->Options(FastScan => (length $1 ? $1 : 1)); next; } - if ($a eq 'fileorder') { + if (/^fileorder(\d*)$/i) { push @fileOrder, shift if @ARGV; + my $num = $1 || 0; + $fileOrderFast = $num if not defined $fileOrderFast or $fileOrderFast > $num; next; } $a eq 'globaltimeshift' and $mt->Options(GlobalTimeShift => shift), next; @@ -860,6 +886,7 @@ for (;;) { $showGroup = $3 || 0; $allGroup = ($2 ? lc($2) eq 'roupnames' : $1 eq 'G'); $mt->Options(SavePath => 1) if $showGroup =~ /\b5\b/; + $mt->Options(SaveFormat => 1) if $showGroup =~ /\b6\b/; next; } if ($a eq 'geotag') { @@ -908,18 +935,15 @@ for (;;) { $ignore{$dir} = 1; next; } - if ($a eq 'if') { + if (/^if(\d*)$/i) { my $cond = shift; + $fastCondition = $1 if length $1; defined $cond or Error("Expecting expression for -if option\n"), $badCmd=1, next; # prevent processing file unnecessarily for simple case of failed '$ok' or 'not $ok' $cond =~ /^\s*(not\s*)\$ok\s*$/i and ($1 xor $rtnValPrev) and $failCondition=1; # add to list of requested tags push @requestTags, $cond =~ /\$\{?((?:[-\w]+:)*[-\w?*]+)/g; - if (defined $condition) { - $condition .= " and ($cond)"; - } else { - $condition = "($cond)"; - } + push @condition, $cond; next; } if (/^j(son)?(\+?=.*)?$/i) { @@ -959,7 +983,7 @@ for (;;) { } /^(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; + (/^L$/ or $a eq 'latin') and $mt->Options(Charset => 'Latin'), next; if ($a eq 'lang') { $langOpt = (@ARGV and $ARGV[0] !~ /^(-|\xe2\x88\x92)/) ? shift : undef; if ($langOpt) { @@ -973,8 +997,8 @@ for (;;) { 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; + $langs = $mt->Decode($langs, 'UTF8'); $langOpt and Error("Invalid or unsupported language '${langOpt}'.\n$langs"), $badCmd=1, next; print $langs; $helped = 1; @@ -990,6 +1014,7 @@ for (;;) { /^(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; + $a eq 'nop' and $helped=1, next; # (undocumented) no operation, added in 11.25 if (/^o(ut)?$/i) { $outOpt = shift; defined $outOpt or Error("Expected output file or directory name for -o option\n"), $badCmd=1, next; @@ -1032,7 +1057,7 @@ for (;;) { } /^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 + 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"); @@ -1203,7 +1228,7 @@ for (;;) { push @newValues, $_; if (/^mwg:/i) { $useMWG = 1; - } elsif (/^([-\w]+:)*(filename|directory)\b/i) { + } elsif (/^([-\w]+:)*(filename|directory|testname)\b/i) { $doSetFileName = 1; } elsif (/^([-\w]+:)*(geotag|geotime|geosync)\b/i) { if (lc $2 eq 'geotime') { @@ -1224,14 +1249,14 @@ for (;;) { push @{$setTags{$setTagsFile}}, $_; if (/>/) { $useMWG = 1 if /^(.*>\s*)?mwg:/si; - if (/\b(filename|directory)#?$/i) { + if (/\b(filename|directory|testname)#?$/i) { $doSetFileName = 1; } elsif (/\bgeotime#?$/i) { $addGeotime = ''; } } else { $useMWG = 1 if /^([^<]+<\s*(.*\$\{?)?)?mwg:/si; - if (/^([-\w]+:)*(filename|directory)\b/i) { + if (/^([-\w]+:)*(filename|directory|testname)\b/i) { $doSetFileName = 1; } elsif (/^([-\w]+:)*geotime\b/i) { $addGeotime = ''; @@ -1240,7 +1265,7 @@ for (;;) { } else { my $lst = s/^-// ? \@exclude : \@tags; unless (/^([-\w*]+:)*([-\w*?]+)#?$/) { - Warn(qq(Invalid TAG name: $_\n)); + Warn(qq(Invalid TAG name: "$_"\n)); } push @$lst, $_; # (push everything for backward compatibility) } @@ -1337,15 +1362,22 @@ if ($tagOut and ($csv or %printFmt or $tabFormat or $xml or ($verbose and $html) next; } -if ($csv and $csv eq 'CSV' and not $isWriting and ($textOut or $binaryOutput)) { - Warn 'Sorry, ' . ($textOut ? '-w' : '-b') . " may not be combined with -csv\n"; - $rtnVal = 1; - next; +if ($csv and $csv eq 'CSV' and not $isWriting) { + if ($textOut) { + Warn "Sorry, -w may not be combined with -csv\n"; + $rtnVal = 1; + next; + } + if ($binaryOutput) { + $binaryOutput = 0; + $setCharset = 'default' unless defined $setCharset; + } + require Image::ExifTool::XMP if $setCharset; } if ($escapeHTML or $json) { # must be UTF8 for HTML conversion and JSON output - $mt->Options(Charset => 'UTF8'); + $mt->Options(Charset => 'UTF8') if $json; # 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) { @@ -1551,6 +1583,9 @@ if (@newValues) { # set $newVal to '' if deleting nothing $newVal = '' if $1 eq '-' and not defined $newVal; } + if ($escapeC and defined $newVal) { + $newVal =~ s/\\(x([0-9a-fA-F]{2})|.)/$2 ? chr(hex($2)) : $unescC{$1} || $1/seg; + } my ($rtn, $wrn) = $mt->SetNewValue($tag, $newVal, %opts); $needSave = 1; ++$isWriting if $rtn; @@ -1625,8 +1660,12 @@ if ($outOpt) { $scanWritable = 1; } +# initialize alternate encoding flag +$altEnc = $mt->Options('Charset'); +undef $altEnc if $altEnc eq 'UTF8'; + # set flag to fix description lengths if necessary -if ($utf8 and $mt->Options('Lang') ne 'en' and eval { require Encode }) { +if (not $altEnc and $mt->Options('Lang') ne 'en' and eval { require Encode }) { # (note that Unicode::GCString is part of the Unicode::LineBreak package) $fixLen = eval { require Unicode::GCString } ? 2 : 1; } @@ -1636,6 +1675,7 @@ if (@fileOrder) { my @allFiles; ProcessFiles($mt, \@allFiles); my $sortTool = new Image::ExifTool; + $sortTool->Options(FastScan => $fileOrderFast) if $fileOrderFast; $sortTool->Options(PrintConv => $mt->Options('PrintConv')); $sortTool->Options(Duplicates => 0); my (%sortBy, %isFloat, @rev, $file); @@ -1755,7 +1795,7 @@ if (defined $deleteOrig) { # print summary my $tot = $count + $countBad; - if ($countDir or $totWr or $countFailed or $tot > 1 or $textOut or $countLink or $countBadLink) { + if ($countDir or $totWr or $countFailed or $tot > 1 or $textOut or %countLink) { 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; @@ -1770,8 +1810,10 @@ if (defined $deleteOrig) { 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; + printf($o "%5d hard links created\n", $countLink{Hard} || 0) if $countLink{Hard} or $countLink{BadHard}; + printf($o "%5d hard links could not be created\n", $countLink{BadHard}) if $countLink{BadHard}; + printf($o "%5d symbolic links created\n", $countLink{Sym} || 0) if $countLink{Sym} or $countLink{BadSym}; + printf($o "%5d symbolic links could not be created\n", $countLink{BadSym}) if $countLink{BadSym}; } } @@ -1818,6 +1860,11 @@ sub GetImageInfo($$) $title =~ s/%([%bfpr])/$lkup{$1}/eg; SetWindowTitle($title); } + unless (length $orig or $outOpt) { + Warn qq(Error: Zero-length file name - ""\n); + ++$countBad; + return; + } # determine the name of the source file based on the original input file name if (@srcFmt) { my ($fmt, $first); @@ -1843,7 +1890,7 @@ sub GetImageInfo($$) } } # evaluate -if expression for conditional processing - if (defined $condition) { + if (@condition) { unless ($file eq '-' or $et->Exists($file)) { Warn "Error: File not found - $file\n"; FileNotFound($file); @@ -1857,27 +1904,35 @@ sub GetImageInfo($$) undef $evalWarning; local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] }; - my %info; + my (%info, $condition); # extract information and build expression for evaluation my $opts = { Duplicates => 1, RequestTags => \@requestTags, Verbose => 0, HtmlDump => 0 }; + $$opts{FastScan} = $fastCondition if defined $fastCondition; # 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); + foreach $condition (@condition) { + my $cond = $et->InsertTagValues(\@foundTags, $condition, \%info); + { + # set package so eval'd functions are in Image::ExifTool namespace + package Image::ExifTool; - #### eval "-if" condition (%info) - $result = eval $cond; + #### eval "-if" condition (%info) + $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"; + $@ 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"; + } } + last unless $result; } } unless ($result) { @@ -1887,7 +1942,7 @@ sub GetImageInfo($$) } # can't make use of $info if verbose because we must reprocess # the file anyway to generate the verbose output - undef $info if $verbose; + undef $info if $verbose or defined $fastCondition; } if (defined $deleteOrig) { print $vout "======== $file$progStr\n" if defined $verbose; @@ -2280,8 +2335,8 @@ TAG: foreach $tag (@foundTags) { } if ($escapeHTML) { $val =~ tr/\0-\x08\x0b\x0c\x0e-\x1f/./; - Image::ExifTool::XMP::FixUTF8(\$val) if $utf8; - $val = Image::ExifTool::HTML::EscapeHTML($val); + Image::ExifTool::XMP::FixUTF8(\$val) unless $altEnc; + $val = Image::ExifTool::HTML::EscapeHTML($val, $altEnc); } else { CleanXML(\$val); } @@ -2397,10 +2452,14 @@ TAG: foreach $tag (@foundTags) { } } - # translate unprintable chars in value and remove trailing spaces - $val =~ tr/\x01-\x1f\x7f/./; - $val =~ s/\x00//g; - $val =~ s/\s+$//; + if ($escapeC) { + $val =~ s/([\0-\x1f\\\x7f])/$escC{$1} || sprintf('\x%.2x', ord $1)/eg; + } else { + # 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 "
$1<\/code>/sg;
$doc =~ s/I<(.*?)>/$1<\/i>/sg;
- # L --> some text
+ # L --> some text
$doc =~ s{L<([^&]+?)\|\Q$homePage\E/(.*?)>}{$1<\/a>}sg;
- # L --> http://owl.phy.queensu.ca/~phil/exiftool/struct.html
+ # L --> https://exiftool.org/struct.html
$doc =~ s{L<\Q$homePage\E/(.*?)>}{$1<\/a>}sg;
# L --> XMP DICOM Tags
# (specify "Image::ExifTool::TagNames" to link to another html file)
@@ -1851,7 +1931,9 @@ sub OpenHtmlFile($;$$)
open(HTMLFILE, ">>${htmlFile}_tmp") or return 0;
} else {
open(HTMLFILE, ">${htmlFile}_tmp") or return 0;
- print HTMLFILE "$docType\n\n$title \n";
+ print HTMLFILE "$docType\n";
+ print HTMLFILE "\n";
+ print HTMLFILE "\n$title \n";
print HTMLFILE "\n";
print HTMLFILE "\n\n";
if ($category ne $class and $docs{$class}) {
@@ -1896,6 +1978,7 @@ sub CloseHtmlFiles($)
# write the trailers
print HTMLFILE "
\n";
print HTMLFILE "(This document generated automatically by Image::ExifTool::BuildTagLookup)\n";
+ print HTMLFILE "
Created $createDate\n" if $htmlFile eq 'html/TagNames/index.html';
print HTMLFILE "
Last revised $fileDate\n";
print HTMLFILE "