Skip to content

Commit

Permalink
Upgrading to exiftool v13.10
Browse files Browse the repository at this point in the history
  • Loading branch information
morozgrafix committed Dec 21, 2024
1 parent 1ba0ebb commit 4b4eb90
Show file tree
Hide file tree
Showing 23 changed files with 346 additions and 97 deletions.
29 changes: 27 additions & 2 deletions bin/Changes
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,40 @@ ExifTool Version History

RSS feed: https://exiftool.org/rss.xml

Note: The most recent production release is Version 13.00. (Other versions are
Note: The most recent production release is Version 13.10. (Other versions are
considered development releases, and are not uploaded to MetaCPAN.)

Dec. 20, 2024 - Version 13.10 (production release)

- Added warnings for out-of-order entries in 'iinf' and 'ipma' boxes of HEIC
images
- Added support for date/time formatting codes %f and %z in the inverse
print conversion when writing tags
- Updated Geolocation databases from current geonames.org files
- Improved verbose output to show values stored with construction method 1 in
MP4-based files
- Enhanced the date/time timezone format specifier %z so that %:z returns the
time zone with a colon separator (eg. "-05:00")
- Fixed bug where the existing tag wasn't being removed when writing a new
value for an Unknown QuickTime UserData or ItemList tag

Dec. 17, 2024 - Version 13.09

- Added a new QuickTime tag (thanks Matti)
- Added a missing format check on a few tags when writing
- Decode a couple of new ICC_Profile tags
- Patched HEIC writer so newly added XMP or EXIF refers to the 'tmap' item as
well as the primary item of an HDRGainMap image (since iPhone 15 and 16 do
it this way)
- Fixed compatibility issue where Apple Preview would no longer show the gain
map image after adding new XMP to an HEIC with an HDR gain map

Dec. 14, 2024 - Version 13.08

- Decode ShutterCount for Canon EOS R6 Mark II (thanks Agoston Kapitany)
- Decode a few new Photoshop tags
- Suppress all duplicate Warning tags and add count to end of message
- Changed format of bitmask keys in -list x output
- Changed format of bitmask keys in -listx output
- Internal streamlining of LIGOGPSINFO decoding
- Fixed issue where some tags were incorrectly shown as writable in -listx
output
Expand Down
1 change: 1 addition & 0 deletions bin/MANIFEST
Original file line number Diff line number Diff line change
Expand Up @@ -937,6 +937,7 @@ t/Writer_58.out
t/Writer_59.out
t/Writer_6.out
t/Writer_60.out
t/Writer_61.out
t/Writer_7.out
t/Writer_9.out
t/XISF.t
Expand Down
2 changes: 1 addition & 1 deletion bin/META.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,5 @@
}
},
"release_status" : "stable",
"version" : "13.08"
"version" : "13.10"
}
2 changes: 1 addition & 1 deletion bin/META.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,4 @@ recommends:
Time::HiRes: '0'
requires:
perl: '5.004'
version: '13.08'
version: '13.10'
4 changes: 2 additions & 2 deletions bin/README
Original file line number Diff line number Diff line change
Expand Up @@ -109,8 +109,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-13.08.tar.gz | tar -xf -
cd Image-ExifTool-13.08
gzip -dc Image-ExifTool-13.10.tar.gz | tar -xf -
cd Image-ExifTool-13.10
./exiftool t/images/ExifTool.jpg

Note: These commands extract meta information from one of the test images.
Expand Down
37 changes: 25 additions & 12 deletions bin/exiftool
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use strict;
use warnings;
require 5.004;

my $version = '13.08';
my $version = '13.10';

# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
my $exePath;
Expand Down Expand Up @@ -5644,16 +5644,29 @@ in the delimiter. Default is ','.
Set the format for date/time tag values. The I<FMT> string may contain
formatting codes beginning with a percent character (C<%>) to represent the
various components of a date/time value. The specifics of the I<FMT> syntax
are system dependent -- consult the C<strftime> 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. ExifTool adds a C<%f> format code to represent
fractional seconds, and supports an optional width to specify the number of
digits after the decimal point (eg. C<%3f> would give something like
C<.437>), and a minus sign to drop the decimal point (eg. C<%-3f> would give
C<437>). Only one B<-d> option may be used per command. Requires
POSIX::strptime or Time::Piece for the inversion conversion when writing.
various components of a date/time value. ExifTool implements 3 format codes
internally (see below), but other format codes are system dependent --
consult the C<strftime> 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. Requires POSIX::strptime or Time::Piece for
the inversion conversion when writing. Only one B<-d> option may be used
per command.
Additional format codes implemented internally by ExifTool:
1) C<%z> represents the time zone in "+/-HHMM" format. Adding a colon (ie.
C<%:z>) adds a colon separator (eg. "-05:00"). If the date/time value
doesn't contain a time zone then C<%z> gives the system time zone for the
specified date/time value.
2) C<%f> represents fractional seconds, and supports an optional width to
specify the number of digits after the decimal point (eg. C<%3f> would give
something like ".437"). Adding a minus sign drops the decimal point (eg.
C<%-3f> would give "437").
3) C<%s> represents the number of seconds since 00:00 UTC Jan 1, 1970,
taking into account the specified time zone (or system time zone if not
specified).
=item B<-D> (B<-decimal>)
Expand Down Expand Up @@ -5913,7 +5926,7 @@ with this command:
produces output like this:
-- Generated by ExifTool 13.08 --
-- Generated by ExifTool 13.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
Expand Down
13 changes: 8 additions & 5 deletions bin/lib/Image/ExifTool.pm
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
%jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
%static_vars $advFmtSelf);

$VERSION = '13.08';
$VERSION = '13.10';
$RELEASE = '';
@ISA = qw(Exporter);
%EXPORT_TAGS = (
Expand Down Expand Up @@ -6551,11 +6551,13 @@ sub ConvertDateTime($$)
$fmt =~ s/(^|[^%])((%%)*)%-?\.?\d*f/$1$2$frac/g;
}
# parse %z and %s ourself (to handle time zones properly)
if ($fmt =~ /%[sz]/) {
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';
$tz = '+00:00' unless $tz and $tz=~/^[-+]\d{2}:\d{2}$/;
$fmt =~ s/(^|[^%])((%%)*)%:z/$1$2$tz/g; # convert '%:z' format codes
$tz =~ s/://;
$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
Expand Down Expand Up @@ -8961,8 +8963,9 @@ sub GetTagInfo($$$;$$$)
next;
}
}
# don't return Unknown tags unless that option is set (also see forum13716)
if ($$tagInfo{Unknown} and not $$options{Unknown} and not
# don't return Unknown tags unless that option is set or we are writing (also see forum13716)
if ($$tagInfo{Unknown} and not $$options{Unknown} and
(not $$self{IsWriting} or $$tagInfo{AddedUnknown}) and not
($$options{Verbose} or $$self{HTML_DUMP} or
($$options{Validate} and not $$tagInfo{AddedUnknown})))
{
Expand Down
76 changes: 41 additions & 35 deletions bin/lib/Image/ExifTool.pod
Original file line number Diff line number Diff line change
Expand Up @@ -613,8 +613,10 @@ different when copying tags with L</SetNewValuesFromFile>.
Format for printing date/time values. See C<strftime> in the L<POSIX>
package and L<https://exiftool.org/filename.html#codes> for details about
the format string. If the date can not be converted, the value is left
unchanged unless the StrictDate option is set. Timezones are ignored. The
inverse conversion (ie. when calling L</SetNewValue>) is performed only if
unchanged unless the StrictDate option is set. ExifTool adds a few
additional format specifiers (C<%f>, C<%s> and C<%z>), see
L<https://exiftool.org/filename.html#codes> for more details. The inverse
conversion (ie. when calling L</SetNewValue>) is performed only if
POSIX::strptime or Time::Piece is installed. The default setting of undef
causes date/time values to remain in standard EXIF format (similar to a
DateFormat of "%Y:%m:%d %H:%M:%S").
Expand Down Expand Up @@ -2559,39 +2561,39 @@ Ducky, EPPIM, EXE, EXIF, ExifIFD, ExifTool, FITS, FLAC, FLIR, File, Flash,
FlashPix, Font, FotoStation, FujiFilm, FujiIFD, GE, GIF, GIMP, GM, GPS,
GSpherical, Garmin, GeoTiff, GlobParamIFD, GoPro, 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#, ISO, ITC, InfiRay, Insta360, InteropIFD, ItemList, JFIF, JFXX,
JPEG, JPEG-HDR, JPS, JSON, JUMBF, JVC, Jpeg2000, KDC_IFD, Keys, Kodak,
KodakBordersIFD, KodakEffectsIFD, KodakIFD, KyoceraRaw, LIGO, LNK, Leaf,
LeafSubIFD, Leica, Lyrics3, Lytro, M-RAW, 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, MISB, MNG, MOBI, MOI,
MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS, MakerNotes, MakerUnknown,
Matroska, MediaJukebox, Meta, MetaIFD, Microsoft, Minolta, MinoltaRaw,
Motorola, NITF, Nextbase, Nikon, NikonCapture, NikonCustom, NikonScan,
NikonSettings, NineEdits, Nintendo, Ocad, Ogg, Olympus, OpenEXR, Opus, PDF,
PICT, PNG, PNG-cICP, PNG-pHYs, PSP, Palm, Panasonic, PanasonicRaw, Parrot,
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, Red, Ricoh,
SEAL, SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#, SVG, Samsung, Sanyo, Scalado,
Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD, System, Theora, Torrent,
Track#, UserData, VCalendar, VCard, VNote, Version0, Vorbis, WTV, XML, XMP,
XMP-DICOM, XMP-Device, XMP-GAudio, XMP-GCamera, XMP-GContainer,
XMP-GCreations, XMP-GDepth, XMP-GFocus, XMP-GImage, XMP-GPano,
XMP-GSpherical, XMP-LImage, XMP-MP, XMP-MP1, XMP-PixelLive, XMP-aas,
XMP-acdsee, XMP-acdsee-rs, XMP-album, XMP-apple-fi, XMP-ast, XMP-aux,
XMP-cc, XMP-cell, XMP-crd, XMP-creatorAtom, XMP-crs, XMP-dc, XMP-dex,
XMP-digiKam, XMP-drone-dji, XMP-dwc, XMP-et, XMP-exif, XMP-exifEX,
XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-hdr, XMP-hdrgm,
XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro, XMP-microsoft,
XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-nine, XMP-panorama, XMP-pdf,
XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-pmi, XMP-prism,
XMP-prl, XMP-prm, XMP-pur, XMP-rdf, XMP-sdc, XMP-swf, XMP-tiff, XMP-x,
XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpDSA, XMP-xmpMM, XMP-xmpNote,
ICC-chrm, ICC-cicp, 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#, ISO, ITC, InfiRay, Insta360, InteropIFD, ItemList,
JFIF, JFXX, JPEG, JPEG-HDR, JPS, JSON, JUMBF, JVC, Jpeg2000, KDC_IFD, Keys,
Kodak, KodakBordersIFD, KodakEffectsIFD, KodakIFD, KyoceraRaw, LIGO, LNK,
Leaf, LeafSubIFD, Leica, Lyrics3, Lytro, M-RAW, 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, MISB,
MNG, MOBI, MOI, MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS, MakerNotes,
MakerUnknown, Matroska, MediaJukebox, Meta, MetaIFD, Microsoft, Minolta,
MinoltaRaw, Motorola, NITF, Nextbase, Nikon, NikonCapture, NikonCustom,
NikonScan, NikonSettings, NineEdits, Nintendo, Ocad, Ogg, Olympus, OpenEXR,
Opus, PDF, PICT, PNG, PNG-cICP, PNG-pHYs, PSP, Palm, Panasonic,
PanasonicRaw, Parrot, 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, Red, Ricoh, SEAL, SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#, SVG,
Samsung, Sanyo, Scalado, Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD,
System, Theora, Torrent, Track#, UserData, VCalendar, VCard, VNote,
Version0, Vorbis, WTV, XML, XMP, XMP-DICOM, XMP-Device, XMP-GAudio,
XMP-GCamera, XMP-GContainer, XMP-GCreations, XMP-GDepth, XMP-GFocus,
XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage, XMP-MP, XMP-MP1,
XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-acdsee-rs, XMP-album, XMP-apple-fi,
XMP-ast, XMP-aux, XMP-cc, XMP-cell, XMP-crd, XMP-creatorAtom, XMP-crs,
XMP-dc, XMP-dex, XMP-digiKam, XMP-drone-dji, XMP-dwc, XMP-et, XMP-exif,
XMP-exifEX, XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-hdr,
XMP-hdrgm, XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro,
XMP-microsoft, XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-nine, XMP-panorama,
XMP-pdf, XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-pmi,
XMP-prism, XMP-prl, XMP-prm, XMP-pur, XMP-rdf, XMP-sdc, XMP-swf, XMP-tiff,
XMP-x, XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpDSA, XMP-xmpMM, XMP-xmpNote,
XMP-xmpPLUS, XMP-xmpRights, XMP-xmpTPg, ZIP, iTunes

=item Family 2 (Category):
Expand Down Expand Up @@ -2832,6 +2834,10 @@ 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.

Note that setting the L</WindowsWideFile> or L</WindowsLongPath> option
causes L</CharsetFileName> to default to 'UTF8' in Windows if not defined,
and L</WindowsLongPath> is set by default in ExifTool 13.07 and later.

=item Internal Character Sets:

The encodings used to store strings in the various metadata formats. These
Expand Down
16 changes: 9 additions & 7 deletions bin/lib/Image/ExifTool/Apple.pm
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use vars qw($VERSION);
use Image::ExifTool::Exif;
use Image::ExifTool::PLIST;

$VERSION = '1.13';
$VERSION = '1.14';

sub ConvertPLIST($$);

Expand Down Expand Up @@ -291,12 +291,12 @@ sub ConvertPLIST($$);
# 0x0047 - (LeaderFollowerAutoFocusLeaderDepth, ref 2)
# 0x0048 - (LeaderFollowerAutoFocusLeaderFocusMethod, ref 2)
# 0x0049 - (LeaderFollowerAutoFocusLeaderConfidence, ref 2)
# 0x004A - (LeaderFollowerAutoFocusLeaderROIType, ref 2)
# 0x004a - (LeaderFollowerAutoFocusLeaderROIType, ref 2)
# 0x004a - 2=back normal, 4=back wide angle, 5=front (ref PH)
# 0x004B - (ZeroShutterLagFailureReason, ref 2)
# 0x004C - (TimeOfFlightAssistedAutoFocusEstimatorMSPMeasuredDepth, ref 2)
# 0x004D - (TimeOfFlightAssistedAutoFocusEstimatorMSPSensorConfidence, ref 2)
# 0x004E - (Camera, ref 2)
# 0x004b - (ZeroShutterLagFailureReason, ref 2)
# 0x004c - (TimeOfFlightAssistedAutoFocusEstimatorMSPMeasuredDepth, ref 2)
# 0x004d - (TimeOfFlightAssistedAutoFocusEstimatorMSPSensorConfidence, ref 2)
# 0x004e - (Camera, ref 2)
0x004e => {
Name => 'Apple_0x004e',
Unknown => 1,
Expand Down Expand Up @@ -358,14 +358,16 @@ Image::ExifTool::AddCompositeTags('Image::ExifTool::Apple');
sub ConvertPLIST($$)
{
my ($val, $et) = @_;
my $dirInfo = { DataPt => \$val };
my $dirInfo = { DataPt => \$val, NoVerboseDir => 1 };
my $oldOrder = $et->GetByteOrder();
require Image::ExifTool::PLIST;
Image::ExifTool::PLIST::ProcessBinaryPLIST($et, $dirInfo);
$val = $$dirInfo{Value};
if (ref $val eq 'HASH' and not $et->Options('Struct')) {
require 'Image/ExifTool/XMPStruct.pl';
$val = Image::ExifTool::XMP::SerializeStruct($et, $val);
}
$et->SetByteOrder($oldOrder);
return $val;
}

Expand Down
8 changes: 8 additions & 0 deletions bin/lib/Image/ExifTool/BuildTagLookup.pm
Original file line number Diff line number Diff line change
Expand Up @@ -866,6 +866,11 @@ sub new
}
$noID = 1 if $isXMP or $short =~ /^(Shortcuts|ASF.*)$/ or $$vars{NO_ID};
$hexID = $$vars{HEX_ID};
if ($$table{WRITE_PROC} and $$table{WRITE_PROC} eq \&Image::ExifTool::WriteBinaryData
and not $$table{CHECK_PROC})
{
warn("Binary table $tableName doesn't have a CHECK_PROC\n");
}
my $processBinaryData = ($$table{PROCESS_PROC} and (
$$table{PROCESS_PROC} eq \&Image::ExifTool::ProcessBinaryData or
$$table{PROCESS_PROC} eq \&Image::ExifTool::Nikon::ProcessNikonEncrypted or
Expand Down Expand Up @@ -1004,6 +1009,9 @@ TagID: foreach $tagID (@keys) {
if ($writable and not ($$table{WRITE_PROC} or $tableName =~ /Shortcuts/ or $writable eq '2')) {
undef $writable;
}
#if ($writable and $$tagInfo{Unknown} and $$table{GROUPS}{0} ne 'MakerNotes') {
# warn "Warning: Writable Unknown tag - $short $name\n",
#}
# validate some characteristics of obvious date/time tags
my @g = $et->GetGroup($tagInfo);
if ($$tagInfo{List} and $g[2] eq 'Time' and $writable and not $$tagInfo{Protected} and
Expand Down
Binary file modified bin/lib/Image/ExifTool/Geolocation.dat
Binary file not shown.
Loading

0 comments on commit 4b4eb90

Please sign in to comment.