From 6012c5d2e82242a2e278ed913e7b785e6cb9ed74 Mon Sep 17 00:00:00 2001 From: morozgrafix Date: Tue, 26 Nov 2024 21:10:25 -0800 Subject: [PATCH] Upgrading to exiftool v13.04 --- bin/Changes | 17 +++ bin/META.json | 2 +- bin/META.yml | 2 +- bin/README | 4 +- bin/exiftool | 46 ++++---- bin/lib/Image/ExifTool.pm | 14 +-- bin/lib/Image/ExifTool/Canon.pm | 8 +- bin/lib/Image/ExifTool/Exif.pm | 12 ++- bin/lib/Image/ExifTool/GPS.pm | 62 ++++++----- bin/lib/Image/ExifTool/Geotag.pm | 52 +++++++-- bin/lib/Image/ExifTool/GoPro.pm | 124 ++++++++++++++++++++-- bin/lib/Image/ExifTool/OOXML.pm | 14 +-- bin/lib/Image/ExifTool/Photoshop.pm | 4 +- bin/lib/Image/ExifTool/QuickTimeStream.pl | 2 +- bin/lib/Image/ExifTool/TagLookup.pm | 4 + bin/lib/Image/ExifTool/TagNames.pod | 35 ++++-- bin/lib/Image/ExifTool/XMP2.pl | 20 ++-- bin/perl-Image-ExifTool.spec | 2 +- lib/exiftool_vendored/version.rb | 2 +- 19 files changed, 318 insertions(+), 108 deletions(-) diff --git a/bin/Changes b/bin/Changes index 8f0cbf8..ad5002c 100644 --- a/bin/Changes +++ b/bin/Changes @@ -7,6 +7,23 @@ RSS feed: https://exiftool.org/rss.xml Note: The most recent production release is Version 13.00. (Other versions are considered development releases, and are not uploaded to MetaCPAN.) +Nov. 26, 2024 - Version 13.04 + + - Added the ability to write GPSDOP and GPSMeasureMode from the -geotag option + if hdop or pdop information exists in the input track file + - Added a few new Canon RFLensTypes (thanks Norbert Wasser) + - Decode timed GPS from GoPro Hero 13 videos + - Improved writing of GPSDestLatitudeRef and GPSDestLongitudeRef tags to allow + signed numbers to be written in the same way as GPSLatitudeRef and + GPSLongitudeRef + - Warn if using an Image::ExifTool library that doesn't match the application + version + - Renamed an Unknown Photoshop tag + - Convert GoPro GPSSpeed and GPSSpeed3D from m/s to km/h + - Patched to tolerate XML header in DOCX xml files + - Fixed -htmldump output to show the same names for unknown EXIF tags as with + the -u option + Nov. 12, 2024 - Version 13.03 - Added ability to include or exclude tags from CSV and JSON imports diff --git a/bin/META.json b/bin/META.json index eb24f5c..fee6811 100644 --- a/bin/META.json +++ b/bin/META.json @@ -50,5 +50,5 @@ } }, "release_status" : "stable", - "version" : "13.03" + "version" : "13.04" } diff --git a/bin/META.yml b/bin/META.yml index 5d43577..728497b 100644 --- a/bin/META.yml +++ b/bin/META.yml @@ -31,4 +31,4 @@ recommends: Time::HiRes: '0' requires: perl: '5.004' -version: '13.03' +version: '13.04' diff --git a/bin/README b/bin/README index 2bd27c4..c61e7c0 100644 --- a/bin/README +++ b/bin/README @@ -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.03.tar.gz | tar -xf - - cd Image-ExifTool-13.03 + gzip -dc Image-ExifTool-13.04.tar.gz | tar -xf - + cd Image-ExifTool-13.04 ./exiftool t/images/ExifTool.jpg Note: These commands extract meta information from one of the test images. diff --git a/bin/exiftool b/bin/exiftool index 3396459..e29cdda 100755 --- a/bin/exiftool +++ b/bin/exiftool @@ -11,7 +11,7 @@ use strict; use warnings; require 5.004; -my $version = '13.03'; +my $version = '13.04'; # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool' my $exePath; @@ -597,6 +597,10 @@ if (@Image::ExifTool::UserDefined::Arguments) { unshift @ARGV, @Image::ExifTool::UserDefined::Arguments; } +if ($version ne $Image::ExifTool::VERSION) { + Warn "Application version $version does not match Image::ExifTool library version $Image::ExifTool::VERSION\n"; +} + # parse command-line options in 2 passes... # pass 1: set all of our ExifTool options # pass 2: print all of our help and informational output (-list, -ver, etc) @@ -5903,7 +5907,7 @@ with this command: produces output like this: - -- Generated by ExifTool 13.03 -- + -- Generated by ExifTool 13.04 -- 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 @@ -5919,8 +5923,9 @@ name, a value of 1 is returned if any tag exists in the specified group, or 0 otherwise (unless the C group is also specified, in which case the values of all matching tags are joined). -When B<-ee> (B<-extractEmbedded>) is combined with B<-p>, embedded documents -are effectively processed as separate input files. +The B<-p> output iterates through the family 3 group names, with each +sub-document producing additional output. This feature is most useful when +used in combination with the B<-ee> option to extract embedded documents. If a specified tag does not exist, a minor warning is issued and the line with the missing tag is not printed. However, the B<-f> option may be used @@ -6770,23 +6775,22 @@ the following two commands are equivalent: exiftool -geotag trk.log image.jpg exiftool -geotag trk.log "-Geotime value is converted to UTC, the local system timezone is -assumed unless the date/time value contains a timezone. Writing C -causes the following tags to be written (provided they can be calculated -from the track log, and they are supported by the destination metadata -format): GPSLatitude, GPSLatitudeRef, GPSLongitude, GPSLongitudeRef, -GPSAltitude, GPSAltitudeRef, GPSDateStamp, GPSTimeStamp, GPSDateTime, -GPSTrack, GPSTrackRef, GPSSpeed, GPSSpeedRef, GPSImgDirection, -GPSImgDirectionRef, GPSPitch, GPSRoll, GPSCoordinates, AmbientTemperature -and CameraElevationAngle. By default, in image files tags are created in -EXIF, and updated in XMP only if they already exist. In QuickTime-format -files GPSCoordinates is created in the preferred location (ItemList by -default) as well as in XMP. However, C, C or -C may be specified to write to write only to one group. -Also, C, C or C may be -used to write to a specific location in QuickTime-format files. Note that -GPSPitch and GPSRoll are non-standard, and require user-defined tags in -order to be written. +If the C value does not contain a time zone then the local system +timezone is assumed. Writing C causes the following tags to be +written (provided they can be calculated from the track log, and they are +supported by the destination metadata format): GPSLatitude, GPSLatitudeRef, +GPSLongitude, GPSLongitudeRef, GPSAltitude, GPSAltitudeRef, GPSDateStamp, +GPSTimeStamp, GPSDateTime, GPSTrack, GPSTrackRef, GPSSpeed, GPSSpeedRef, +GPSImgDirection, GPSImgDirectionRef, GPSPitch, GPSRoll, GPSCoordinates, +AmbientTemperature and CameraElevationAngle. By default, in image files +tags are created in EXIF, and updated in XMP only if they already exist. In +QuickTime-format files GPSCoordinates is created in the preferred location +(ItemList by default) as well as in XMP. However, C, +C or C may be specified to write to write +only to one group. Also, C, C or +C may be used to write to a specific location in +QuickTime-format files. Note that GPSPitch and GPSRoll are non-standard, +and require user-defined tags in order to be written. The C tag may be used to specify a time correction which is applied to each C value for synchronization with GPS time. For example, diff --git a/bin/lib/Image/ExifTool.pm b/bin/lib/Image/ExifTool.pm index 802ee3f..ad8da14 100644 --- a/bin/lib/Image/ExifTool.pm +++ b/bin/lib/Image/ExifTool.pm @@ -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.03'; +$VERSION = '13.04'; $RELEASE = ''; @ISA = qw(Exporter); %EXPORT_TAGS = ( @@ -2583,7 +2583,7 @@ sub Options($$;@) warn("Can't set $param to undef\n"); } } elsif (lc $param eq 'geodir') { - $Image::ExifTool::Geolocation::geoDir = $newVal; # (undocumented) + $Image::ExifTool::Geolocation::geoDir = $newVal; } else { if ($param eq 'Escape') { # set ESCAPE_PROC @@ -4404,6 +4404,7 @@ sub DoneExtract($) local $SIG{'__WARN__'} = \&SetWarning; undef $evalWarning; $$opts{GeolocMulti} = $$opts{Duplicates}; + $self->VPrint(0, "Geolocation arguments: '${arg}'\n"); my ($cities, $dist) = Image::ExifTool::Geolocation::Geolocate($arg, $opts); delete $$opts{GeolocMulti}; if ($cities and (@$cities < 2 or $dist or not $self->Warn('Multiple Geolocation cities are possible',2))) { @@ -8915,6 +8916,7 @@ sub GetTagInfo($$$;$$$) my ($valPt, $format, $count); my @infoArray = GetTagInfoList($tagTablePtr, $tagID); + my $options = $$self{OPTIONS}; # evaluate condition my $tagInfo; foreach $tagInfo (@infoArray) { @@ -8933,9 +8935,9 @@ sub GetTagInfo($$$;$$$) } } # don't return Unknown tags unless that option is set (also see forum13716) - if ($$tagInfo{Unknown} and not $$self{OPTIONS}{Unknown} and not - ($$self{OPTIONS}{Verbose} or $$self{HTML_DUMP} or - ($$self{OPTIONS}{Validate} and not $$tagInfo{AddedUnknown}))) + if ($$tagInfo{Unknown} and not $$options{Unknown} and not + ($$options{Verbose} or $$self{HTML_DUMP} or + ($$options{Validate} and not $$tagInfo{AddedUnknown}))) { return undef; } @@ -8943,7 +8945,7 @@ sub GetTagInfo($$$;$$$) return $tagInfo; } # generate information for unknown tags (numerical only) if required - if (not $tagInfo and ($$self{OPTIONS}{Unknown} or $$self{OPTIONS}{Verbose}) and + if (not $tagInfo and ($$options{Unknown} or $$options{Verbose} or $$self{HTML_DUMP}) and $tagID =~ /^\d+$/ and not $$self{NO_UNKNOWN}) { my $printConv; diff --git a/bin/lib/Image/ExifTool/Canon.pm b/bin/lib/Image/ExifTool/Canon.pm index 9a13458..c995d47 100644 --- a/bin/lib/Image/ExifTool/Canon.pm +++ b/bin/lib/Image/ExifTool/Canon.pm @@ -88,7 +88,7 @@ sub ProcessCTMD($$$); sub ProcessExifInfo($$$); sub SwapWords($); -$VERSION = '4.84'; +$VERSION = '4.85'; # Note: Removed 'USM' from 'L' lenses since it is redundant - PH # (or is it? Ref 32 shows 5 non-USM L-type lenses) @@ -631,6 +631,9 @@ $VERSION = '4.84'; '61182.54' => 'Canon RF 24-105mm F2.8 L IS USM Z', #42 '61182.55' => 'Canon RF-S 10-18mm F4.5-6.3 IS STM', #42 '61182.56' => 'Canon RF 35mm F1.4 L VCM', #42 + '61182.57' => 'Canon RF 70-200mm F2.8 L IS USM Z', #42 + '61182.58' => 'Canon RF 50mm F1.4 L VCM', #42 + '61182.59' => 'Canon RF 24mm F1.4 L VCM', #42 65535 => 'n/a', ); @@ -7001,6 +7004,9 @@ my %ciMaxFocal = ( 316 => 'Canon RF 35mm F1.4 L VCM', #42 317 => 'Canon RF-S 3.9mm F3.5 STM DUAL FISHEYE', #42 318 => 'Canon RF 28-70mm F2.8 IS STM', #42 + 319 => 'Canon RF 70-200mm F2.8 L IS USM Z', #42 + 325 => 'Canon RF 50mm F1.4 L VCM', #42 + 326 => 'Canon RF 24mm F1.4 L VCM', #42 # Note: add new RF lenses to %canonLensTypes with ID 61182 }, }, diff --git a/bin/lib/Image/ExifTool/Exif.pm b/bin/lib/Image/ExifTool/Exif.pm index 6bef19d..588d56d 100644 --- a/bin/lib/Image/ExifTool/Exif.pm +++ b/bin/lib/Image/ExifTool/Exif.pm @@ -57,7 +57,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::MakerNotes; -$VERSION = '4.54'; +$VERSION = '4.55'; sub ProcessExif($$$); sub WriteExif($$$); @@ -6697,8 +6697,9 @@ sub ProcessExif($$$) "Format: $fstr\nSize: $size bytes\n"; if ($size > 4) { my $offPt = Get32u($dataPt,$entry+8); - # (test this with ../pics/{CanonEOS-1D_XMarkIII.hif,PanasonicDC-G9.rw2}) - my $actPt = $valuePtr + $valueDataPos + $base - ($$et{EXIF_POS} || 0) + ($$et{BASE_FUDGE} || 0); + # (test this with ../pics/{CanonEOS-1D_XMarkIII.hif,PanasonicDC-G9.rw2,*.raf}) + my $actPt = $valuePtr + $valueDataPos + $base - ($$et{EXIF_POS} || 0) + + ($$et{BASE_FUDGE} || $$et{BASE} || 0); $tip .= sprintf("Value offset: 0x%.4x\n", $offPt); # highlight tag name (red for bad size) my $style = ($bad or not defined $tval) ? 'V' : 'H'; @@ -6729,12 +6730,15 @@ sub ProcessExif($$$) } elsif ($tagInfo and Image::ExifTool::IsInt($tval)) { if ($$tagInfo{IsOffset} or $$tagInfo{SubIFD}) { $tval = sprintf('0x%.4x', $tval); - my $actPt = $val + $base - ($$et{EXIF_POS} || 0) + ($$et{BASE_FUDGE} || 0); + my $actPt = $val + $base - ($$et{EXIF_POS} || 0) + ($$et{BASE_FUDGE} || $$et{BASE} || 0); if ($actPt != $val) { $tval .= sprintf("\nActual offset: 0x%.4x", $actPt); my $sign = $actPt < $val ? '-' : ''; $tval .= sprintf("\nOffset base: ${sign}0x%.4x", abs($actPt - $val)); } + if ($$et{EXIF_POS} and not $$et{BASE_FUDGE}) { + $tip .= sprintf("File offset: 0x%.4x\n", $actPt + $$et{EXIF_POS}) + } } elsif ($$tagInfo{PrintHex}) { $tval = sprintf('0x%x', $tval); } diff --git a/bin/lib/Image/ExifTool/GPS.pm b/bin/lib/Image/ExifTool/GPS.pm index a307a66..af546e7 100644 --- a/bin/lib/Image/ExifTool/GPS.pm +++ b/bin/lib/Image/ExifTool/GPS.pm @@ -12,7 +12,7 @@ use strict; use vars qw($VERSION); use Image::ExifTool::Exif; -$VERSION = '1.56'; +$VERSION = '1.57'; my %coordConv = ( ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)', @@ -20,6 +20,34 @@ my %coordConv = ( PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)', ); +my %printConvLatRef = ( + # extract N/S if written from Composite:GPSLatitude + # (also allow writing from a signed number) + OTHER => sub { + my ($val, $inv) = @_; + return undef unless $inv; + return uc $2 if $val =~ /(^|[^A-Z])([NS])(orth|outh)?\b/i; + return $1 eq '-' ? 'S' : 'N' if $val =~ /([-+]?)\d+/; + return undef; + }, + N => 'North', + S => 'South', +); + +my %printConvLonRef = ( + # extract E/W if written from Composite:GPSLongitude + # (also allow writing from a signed number) + OTHER => sub { + my ($val, $inv) = @_; + return undef unless $inv; + return uc $2 if $val =~ /(^|[^A-Z])([EW])(ast|est)?\b/i; + return $1 eq '-' ? 'W' : 'E' if $val =~ /([-+]?)\d+/; + return undef; + }, + E => 'East', + W => 'West', +); + %Image::ExifTool::GPS::Main = ( GROUPS => { 0 => 'EXIF', 1 => 'GPS', 2 => 'Location' }, WRITE_PROC => \&Image::ExifTool::Exif::WriteExif, @@ -43,19 +71,7 @@ my %coordConv = ( latitudes or negative for south, or a string containing N, North, S or South }, Count => 2, - PrintConv => { - # extract N/S if written from Composite:GPSLatitude - # (also allow writing from a signed number) - OTHER => sub { - my ($val, $inv) = @_; - return undef unless $inv; - return uc $2 if $val =~ /(^|[^A-Z])([NS])(orth|outh)?\b/i; - return $1 eq '-' ? 'S' : 'N' if $val =~ /([-+]?)\d+/; - return undef; - }, - N => 'North', - S => 'South', - }, + PrintConv => \%printConvLatRef, }, 0x0002 => { Name => 'GPSLatitude', @@ -72,19 +88,7 @@ my %coordConv = ( ExifTool will also accept a number when writing this tag, positive for east longitudes or negative for west, or a string containing E, East, W or West }, - PrintConv => { - # extract E/W if written from Composite:GPSLongitude - # (also allow writing from a signed number) - OTHER => sub { - my ($val, $inv) = @_; - return undef unless $inv; - return uc $2 if $val =~ /(^|[^A-Z])([EW])(ast|est)?\b/i; - return $1 eq '-' ? 'W' : 'E' if $val =~ /([-+]?)\d+/; - return undef; - }, - E => 'East', - W => 'West', - }, + PrintConv => \%printConvLonRef, }, 0x0004 => { Name => 'GPSLongitude', @@ -238,7 +242,7 @@ my %coordConv = ( Writable => 'string', Notes => 'tags 0x0013-0x001a used for subject location according to MWG 2.0', Count => 2, - PrintConv => { N => 'North', S => 'South' }, + PrintConv => \%printConvLatRef, }, 0x0014 => { Name => 'GPSDestLatitude', @@ -251,7 +255,7 @@ my %coordConv = ( Name => 'GPSDestLongitudeRef', Writable => 'string', Count => 2, - PrintConv => { E => 'East', W => 'West' }, + PrintConv => \%printConvLonRef, }, 0x0016 => { Name => 'GPSDestLongitude', diff --git a/bin/lib/Image/ExifTool/Geotag.pm b/bin/lib/Image/ExifTool/Geotag.pm index a349f78..077241a 100644 --- a/bin/lib/Image/ExifTool/Geotag.pm +++ b/bin/lib/Image/ExifTool/Geotag.pm @@ -17,6 +17,7 @@ # 2022/06/21 - PH Added ability to read Google Takeout JSON files # 2024/04/23 - PH Added ability to read more OpenTracks GPS tags # 2024/08/28 - PH Added support for new Google Takeout JSON format +# 2024/11/26 - PH Also write GPSMeasureMode and GPSDOP # # References: 1) http://www.topografix.com/GPX/1/1/ # 2) http://www.gpsinformation.org/dale/nmea.htm#GSA @@ -31,7 +32,7 @@ use vars qw($VERSION); use Image::ExifTool qw(:Public); use Image::ExifTool::GPS; -$VERSION = '1.80'; +$VERSION = '1.81'; sub JITTER() { return 2 } # maximum time jitter @@ -90,12 +91,25 @@ my %fixInfoKeys = ( orient => [ 'dir', 'pitch', 'roll' ], atemp => [ 'atemp' ], err => [ 'err' ], + dop => [ 'hdop', 'vdop', 'pdop' ], ); -my %isOrient = ( dir => 1, pitch => 1, roll => 1 ); # test for orientation key +# category for select keys +my %keyCategory = ( + dir => 'orient', + pitch => 'orient', + roll => 'orient', + hdop => 'dop', + pdop => 'dop', + vdop => 'dop', +); # tags which may exist separately in some formats (eg. CSV) -my %sepTags = ( dir => 1, pitch => 1, roll => 1, track => 1, speed => 1 ); +my %sepTags = ( + dir => 1, pitch => 1, roll => 1, track => 1, speed => 1, + # (plus other tags we don't want to scan outwards for) + hdop => 1, pdop => 1, vdop => 1, +); # conversion factors for GPSSpeed (standard EXIF units only) my %speedConv = ( @@ -348,8 +362,8 @@ sub LoadTrackLog($$;$) my $tag = $xmlTag{lc $2}; if ($tag) { $$fix{$tag} = $4; - if ($isOrient{$tag}) { - $$has{orient} = 1; + if ($keyCategory{$tag}) { + $$has{$keyCategory{$tag}} = 1; } elsif ($tag eq 'alt') { # validate altitude undef $$fix{alt} if defined $$fix{alt} and $$fix{alt} !~ /^[+-]?\d+\.?\d*/; @@ -394,8 +408,8 @@ sub LoadTrackLog($$;$) } else { $$fix{$tag} = $1; } - if ($isOrient{$tag}) { - $$has{orient} = 1; + if ($keyCategory{$tag}) { + $$has{$keyCategory{$tag}} = 1; } elsif ($tag eq 'alt') { # validate altitude undef $$fix{alt} if defined $$fix{alt} and $$fix{alt} !~ /^[+-]?\d+\.?\d*/; @@ -1145,7 +1159,7 @@ sub SetGeoValues($$;$) # loop through available fix information categories # (pos, track, alt, orient) my ($category, $key); -Category: foreach $category (qw{pos track alt orient atemp err}) { +Category: foreach $category (qw{pos track alt orient atemp err dop}) { next unless $$has{$category}; my ($f, $p0b, $p1b, $f0b); # loop through specific fix information keys @@ -1303,6 +1317,25 @@ Category: foreach $category (qw{pos track alt orient atemp err}) { if ($$has{err}) { @r = $et->SetNewValue(GPSHPositioningError => $$fix{err}, %opts); } + if ($$has{dop}) { + my ($dop, $mm); + if (defined $$fix{pdop}) { + $dop = $$fix{pdop}; + $mm = 3; + } elsif (defined $$fix{hdop}) { + if (defined $$fix{vdop}) { + $dop = sqrt($$fix{hdop} * $$fix{hdop} + $$fix{vdop} * $$fix{vdop}); + $mm = 3; + } else { + $dop = $$fix{hdop}; + $mm = 2; + } + } + if (defined $dop) { + $et->SetNewValue(GPSMeasureMode => $mm, %opts); + $et->SetNewValue(GPSDOP => $dop, %opts); + } + } unless ($xmp) { my ($latRef, $lonRef); $latRef = ($$fix{lat} > 0 ? 'N' : 'S') if defined $$fix{lat}; @@ -1328,7 +1361,8 @@ Category: foreach $category (qw{pos track alt orient atemp err}) { GPSAltitude GPSAltitudeRef GPSDateStamp GPSTimeStamp GPSDateTime GPSTrack GPSTrackRef GPSSpeed GPSSpeedRef GPSImgDirection GPSImgDirectionRef GPSPitch GPSRoll CameraElevationAngle - AmbientTemperature GPSHPositioningError GPSCoordinates)) + AmbientTemperature GPSHPositioningError GPSCoordinates + GPSMeasureMode GPSDOP)) { my @r = $et->SetNewValue($_, undef, %opts); } diff --git a/bin/lib/Image/ExifTool/GoPro.pm b/bin/lib/Image/ExifTool/GoPro.pm index 854920e..9e4cda5 100644 --- a/bin/lib/Image/ExifTool/GoPro.pm +++ b/bin/lib/Image/ExifTool/GoPro.pm @@ -16,7 +16,7 @@ use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::QuickTime; -$VERSION = '1.09'; +$VERSION = '1.10'; sub ProcessGoPro($$$); sub ProcessString($$$); @@ -72,6 +72,7 @@ my %addUnits = ( let me know if you discover the meaning of any of these unknown tags. See L for details about this format. }, + # ABSC (GPMF) - seen: 0 (fmt f) ACCL => { #2 (gpmd) Name => 'Accelerometer', Notes => 'accelerator readings in m/s2', @@ -81,7 +82,9 @@ my %addUnits = ( # ANGY (GPMF-GEOC) - seen 179.9 (fmt d, Max) # ANGZ (GPMF-GEOC) - seen 0.152 (fmt d, Max) ALLD => 'AutoLowLightDuration', #1 (gpmd) (untested) - # APTO (GPMF) - seen: 'RAW', 'DYNM' (fmt c) + # APTO (GPMF) - seen: 'OFF', 'RAW', 'DYNM' (fmt c) + # ARUW (GPMF) - seen: 1.14285719394684 (fmt f) + # ARWA (GPMF) - seen: 1.14285719394684 (fmt f) ATTD => { #PH (Karma) Name => 'Attitude', # UNIT=s,rad,rad,rad,rad/s,rad/s,rad/s, @@ -96,8 +99,10 @@ my %addUnits = ( # SCAL=1000 1 1 1 1 Binary => 1, }, + # AUBT (GPMF) - seen: ''N' (type c) AUDO => 'AudioSetting', #PH (GPMF - seen: 'WIND', fmt c) # AUPT (GPMF) - seen: 'N','Y' (fmt c) + # BITR (GPMF) - seen: 'STANDARD' (fmt c) BPOS => { #PH (Karma) Name => 'Controller', Unknown => 1, @@ -111,9 +116,16 @@ my %addUnits = ( # CALH (GPMF-GEOC) - seen 3040 (fmt L, Max) # CALW (GPMF-GEOC) - seen 4056 (fmt L, Max) CASN => 'CameraSerialNumber', #PH (GPMF - seen: 'C3221324545448', fmt c) + # CDAT (GPMF) - seen: 1732152823 (fmt J) + # CDTM (GPMF) - seen: 0 (fmt L) # CINF (GPMF) - seen: 0x67376be7709bc8876a8baf3940908618, 0xe230988539b30cf5f016627ae8fc5395, # 0x8bcbe424acc5b37d7d77001635198b3b (fmt B) (Camera INFormation?) + # CLDP (GPMF) - seen: 'Y' (fmt c) + # CLKC (GPMF) - seen: 0 (fmt L) + # CLKS (GPMF) - seen: 2 (fmt B) # CMOD (GPMF) - seen: 12,13,17 [12 360 video, 13 time-laps video, 17 JPEG] (fmt B) + # CPID (GPMF) - seen: '1194885996 3387225026 733916448 2433577768' (fmt L) + # CPIN (GPMF) - seen: 1 # CRTX (GPMF-BACK/FRNT) - double[1] # CRTY (GPMF-BACK/FRNT) - double[1] CSEN => { #PH (Karma) @@ -123,6 +135,7 @@ my %addUnits = ( # SCAL=1000 1 1 1 1 1 1 1 1 1 1 Binary => 1, }, + # CTRL (GPMF) - seen: 'Pro' (fmt c) CYTS => { #PH (Karma) Name => 'CoyoteStatus', # UNIT=s,,,,,rad,rad,rad,, @@ -141,6 +154,8 @@ my %addUnits = ( # (Max) DVID='FRNT',DVNM='Front Lens',KLNS,CTRX,CTRY,MFOV,SFTR # (Max) DVID='HLMT',DVNM='Highlights' }, + # DNSC (GPMF) - seen: 'HIGH' (fmt c) + # DUST (GPMF) - seen: 'NO_LIMIT' (fmt c) # DVID (GPMF) - DeviceID; seen: 1 (fmt L), HLMT (fmt F), GEOC (fmt F), 'BACK' (fmt F, Max) DVID => { Name => 'DeviceID', Unknown => 1 }, #2 (gpmd) # DVNM (GPMF) seen: 'Video Global Settings' (fmt c), 'Highlights' (fmt c), 'Geometry Calibrations' (Max) @@ -150,6 +165,7 @@ my %addUnits = ( Name => 'DigitalZoom', PrintConv => { N => 'No', Y => 'Yes' }, }, + # DZMX (GPMF) - seen: 1.39999997615814 (fmt f) # DZST (GPMF) - seen: 0 (fmt L) (something to do with digital zoom maybe?) EISA => { #PH (GPMF) - seen: 'Y','N','HS EIS','N/A' (fmt c) [N was for a time-lapse video] Name => 'ElectronicImageStabilization', @@ -188,10 +204,20 @@ my %addUnits = ( }, GPS5 => { #2 (gpmd) Name => 'GPSInfo', + # UNIT=deg,deg,m,m/s,m/s + # TYPE=l # SCAL=10000000,10000000,1000,1000,100 RawConv => '$val', # necessary to use scaled value instead of raw data as subdir data SubDirectory => { TagTable => 'Image::ExifTool::GoPro::GPS5' }, }, + GPS9 => { #PH (gpmd, Hero 13) + Name => 'GPSInfo9', + # UNIT=deg,deg,m,m/s,m/s,,s,, + # TYPE=lllllllSS + # SCAL=10000000 10000000 1000 1000 100 1 1000 100 1 + RawConv => '$val', # necessary to use scaled value instead of raw data as subdir data + SubDirectory => { TagTable => 'Image::ExifTool::GoPro::GPS9' }, + }, GPSF => { #2 (gpmd) Name => 'GPSMeasureMode', PrintConv => { @@ -216,7 +242,10 @@ my %addUnits = ( Notes => 'gyroscope readings in rad/s', Binary => 1, }, + # HCTL (GPMF) - seen: "Off" (fmt c) + # HDRV (GPMF) - seen: "N" (fmt c) # HFLG (APP6) - seen: 0 + # HSGT (GPMF) - seen: 'OFF' (fmt c) ISOE => 'ISOSpeeds', #PH (gpmd) ISOG => { #2 (gpmd) Name => 'ImageSensorGain', @@ -232,6 +261,7 @@ my %addUnits = ( }, # KLNS (GPMF-BACK/FRNT) - double[5] (fmt d, Max) # LINF (GPMF) - seen: LAJ7061916601668,C3341326002180,C33632245450981 (fmt c) (Lens INFormation?) + # LMOD (GPMF) - seen: 'NONE' (fmt F) LNED => { #PH (Karma) Name => 'LocalPositionNED', # UNIT=s,m,m,m,m/s,m/s,m/s @@ -240,14 +270,20 @@ my %addUnits = ( Binary => 1, }, MAGN => 'Magnetometer', #1 (gpmd) (units of uT) + # MAPX (GPMF) - seen: 1 (fmt f) + # MAPY (GPMF) - seen: 1 (fmt f) # MFOV (GPMF-BACK/FRNT) - seen: 100 (fmt d, Max) MINF => { #PH (GPMF - seen: HERO6 Black, fmt c) Name => 'Model', Groups => { 2 => 'Camera' }, Description => 'Camera Model Name', }, + # MMOD (GPMF) - seen: 'STEREO' (fmt c) # MTYP (GPMF) - seen: 0,1,5,11 [1 for time-lapse video, 5 for 360 video, 11 for JPEG] (fmt B) # MUID (GPMF) - seen: 3882563431 2278071152 967805802 411471936 0 0 0 0 (fmt L) + # MXCF (GPMF) - seen: 'x1' (fmt c) + # MYCF (GPMF) - seen: 'y1' (fmt c) + # ORDP (GPMF) - seen: 'Y' (fmt c) OREN => { #PH (GPMF - seen: 'U', fmt c) Name => 'AutoRotation', PrintConv => { @@ -258,11 +294,16 @@ my %addUnits = ( }, # (most of the "P" tags are ProTune settings - PH) PHDR => 'HDRSetting', #PH (APP6 - seen: 0) + # PIMD (GPMF) - seen: 'AUTO' (fmt c) PIMN => 'AutoISOMin', #PH (GPMF - seen: 100, fmt L) PIMX => 'AutoISOMax', #PH (GPMF - seen: 1600, fmt L) + # POLY (GPMF) - seen: '0 2.11120247840881 0.14325800538063 -1.030...' (fmt f) # PRAW (APP6) - seen: 0, 'N', 'Y' (fmt c) + # PRCN (GPMF) - seen: 65 zeros (fmt B) PRES => 'PhotoResolution', #PH (APP6 - seen: '12MP_W') # PRJT (APP6) - seen: 'GPRO','EACO' (fmt F, Hero8, Max) + # PRNA (GPMF) - seen 10 (fmt B) + # PRNU (GPMF) - seen 0 (fmt B) PRTN => { #PH (GPMF - seen: 'N', fmt c) Name => 'ProTune', PrintConv => { @@ -275,6 +316,9 @@ my %addUnits = ( PTSH => 'Sharpness', #PH (GPMF - seen: 'HIGH', fmt c) PTWB => 'WhiteBalance', #PH (GPMF - seen: 'AUTO', fmt c) # PVUL (APP6) - seen: 'F' (fmt c, Hero8, Max) + # PWPR (GPMF) - seen: 'PERFORMANCE' (fmt c) + # PYCF (GPMF) - seen: '[r0,r1,r2,r3,r4,r5,r6]' (fmt c) + # RAMP (GPMF) - seen: empty string (fmt c) RATE => 'Rate', #PH (GPMF - seen: '0_5SEC', fmt c; APP6 - seen: '4_1SEC') RMRK => { #2 (gpmd) Name => 'Comments', @@ -284,6 +328,7 @@ my %addUnits = ( Name => 'ScaleFactor', Unknown => 1, }, + # SCAP (GPMF) - seen: 'N' (fmt c) SCPR => { #PH (Karma) [stream was empty] Name => 'ScaledPressure', # UNIT=s,Pa,Pa,degC @@ -291,6 +336,7 @@ my %addUnits = ( # SCAL=1000 0.00999999977648258 0.00999999977648258 100 %addUnits, }, + # SCTM (GPMF) - seen 0 (fmt L) # SFTR (GPMF-BACK/FRNT) - seen 0.999,1.00004 (fmt d, Max) # SHFX (GPMF-GEOC) - seen 22.92 (fmt d, Max) # SHFY (GPMF-GEOC) - seen 0.123 (fmt d, Max) @@ -355,6 +401,10 @@ my %addUnits = ( # TOCK => { Name => 'OutTime', Unknown => 1, ValueConv => '$val/1000' }, #1 (gpmd) TSMP => { Name => 'TotalSamples', Unknown => 1 }, #2 (gpmd) TYPE => { Name => 'StructureType', Unknown => 1 }, #2 (gpmd,GPMF - eg 'LLLllfFff', fmt c) + TZON => { # (GPMF) - seen: 60 (fmt s) + Name => 'TimeZone', + PrintConv => 'Image::ExifTool::TimeZoneString($val)', + }, UNIT => { #2 (gpmd) alternative units Name => 'Units', Unknown => 1, @@ -373,6 +423,7 @@ my %addUnits = ( }, }, # VLTA (GPMF) - seen: 78 ('N') (fmt B -- wrong format?) + # VFPS (GPMF) - seen: '24000 1001' (fmt L) VFRH => { #PH (Karma) Name => 'VisualFlightRulesHUD', BinaryData => 1, @@ -380,13 +431,17 @@ my %addUnits = ( # TYPE=ffffsS }, # VLTE (GPMF) - seen: 'Y','N' (fmt c) + # VRES (GPMF) - seen: '3840 3660' (fmt L) WBAL => 'ColorTemperatures', #PH (gpmd) WRGB => { #PH (gpmd) Name => 'WhiteBalanceRGB', Binary => 1, }, # ZFOV (APP6,GPMF) - seen: 148.34, 0 (fmt f, Hero8, Max) - # the following ref forum12825 + # ZMPL (GPMF) - seen: 0.652929663658142 (fmt f) +# +# the following ref forum12825 +# MUID => { Name => 'MediaUniqueID', PrintConv => q{ @@ -418,7 +473,7 @@ my %addUnits = ( YAVG => 'LumaAverage', ); -# GoPro GPS5 tags (ref 2) (Hero5,Hero6) +# GoPro GPS5 tags (ref 2) (Hero5,Hero6,Hero9) %Image::ExifTool::GoPro::GPS5 = ( PROCESS_PROC => \&ProcessString, GROUPS => { 1 => 'GoPro', 2 => 'Location' }, @@ -435,8 +490,65 @@ my %addUnits = ( Name => 'GPSAltitude', PrintConv => '"$val m"', }, - 3 => 'GPSSpeed', # (unit='m/s') - 4 => 'GPSSpeed3D', # (unit='m/s') + 3 => { + Name => 'GPSSpeed', + Notes => 'stored as m/s but converted to km/h when extracted', + ValueConv => '$val * 3.6', + }, + 4 => { + Name => 'GPSSpeed3D', + Notes => 'stored as m/s but converted to km/h when extracted', + ValueConv => '$val * 3.6', + }, +); + +# GoPro GPS9 tags (Hero13) +%Image::ExifTool::GoPro::GPS9 = ( + PROCESS_PROC => \&ProcessString, + GROUPS => { 1 => 'GoPro', 2 => 'Location' }, + VARS => { HEX_ID => 0, ID_LABEL => 'Index' }, + 0 => { # (unit='deg') + Name => 'GPSLatitude', + PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', + }, + 1 => { # (unit='deg') + Name => 'GPSLongitude', + PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")', + }, + 2 => { # (unit='m') + Name => 'GPSAltitude', + PrintConv => '"$val m"', + }, + 3 => { + Name => 'GPSSpeed', + Notes => 'stored as m/s but converted to km/h when extracted', + ValueConv => '$val * 3.6', + }, + 4 => { + Name => 'GPSSpeed3D', + Notes => 'stored as m/s but converted to km/h when extracted', + ValueConv => '$val * 3.6', + }, + 5 => { # days since 2000 + Name => 'GPSDays', + RawConv => '$$self{GPSDays} = $val; undef', + Hidden => 1, + }, + 6 => { # seconds of date/time + Name => 'GPSDateTime', + Groups => { 2 => 'Time' }, + # (10957 days from Jan 1 1970 to Jan 1 2000) + RawConv => 'ConvertUnixTime(($$self{GPSDays} + 10957) * 24 * 3600 + $val, undef, 3)', + PrintConv => '$self->ConvertDateTime($val)', + }, + 7 => 'GPSDOP', + 8 => { + Name => 'GPSMeasureMode', #PH (NC) + PrintConv => { + 2 => '2-Dimensional Measurement', + 3 => '3-Dimensional Measurement', + }, + }, ); # GoPro GPRI tags (ref PH) (Karma) diff --git a/bin/lib/Image/ExifTool/OOXML.pm b/bin/lib/Image/ExifTool/OOXML.pm index da45094..0af0b68 100644 --- a/bin/lib/Image/ExifTool/OOXML.pm +++ b/bin/lib/Image/ExifTool/OOXML.pm @@ -14,7 +14,7 @@ use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::XMP; use Image::ExifTool::ZIP; -$VERSION = '1.08'; +$VERSION = '1.09'; # test for recognized OOXML document extensions my %isOOXML = ( @@ -360,12 +360,12 @@ sub ProcessDOCX($$) } # process XML files (docProps/app.xml, docProps/core.xml, docProps/custom.xml) my %dirInfo = ( - DataPt => \$buff, - DirLen => length $buff, - DataLen => length $buff, - XMPParseOpts => { - FoundProc => \&FoundTag, - }, + DataPt => \$buff, + DirLen => length $buff, + # (skip over XML header if it exists) + DirStart => ($buff =~ /<\?xml\s+.*?\?>/g ? pos($buff) : 0), + DataLen => length $buff, + XMPParseOpts => { FoundProc => \&FoundTag }, ); $et->ProcessDirectory(\%dirInfo, $tagTablePtr); undef $buff; # (free memory now) diff --git a/bin/lib/Image/ExifTool/Photoshop.pm b/bin/lib/Image/ExifTool/Photoshop.pm index c6d8c62..7700d71 100644 --- a/bin/lib/Image/ExifTool/Photoshop.pm +++ b/bin/lib/Image/ExifTool/Photoshop.pm @@ -28,7 +28,7 @@ use strict; use vars qw($VERSION $AUTOLOAD $iptcDigestInfo %printFlags); use Image::ExifTool qw(:DataAccess :Utils); -$VERSION = '1.70'; +$VERSION = '1.71'; sub ProcessPhotoshop($$$); sub WritePhotoshop($$$); @@ -322,7 +322,7 @@ my %unicodeString = ( 0x0432 => { Unknown => 1, Name => 'MeasurementScale' }, #7 0x0433 => { Unknown => 1, Name => 'TimelineInfo' }, #7 0x0434 => { Unknown => 1, Name => 'SheetDisclosure' }, #7 - 0x0435 => { Unknown => 1, Name => 'DisplayInfo' }, #7 + 0x0435 => { Unknown => 1, Name => 'ChannelOptions' }, #7/forum16762 0x0436 => { Unknown => 1, Name => 'OnionSkins' }, #7 0x0438 => { Unknown => 1, Name => 'CountInfo' }, #7 0x043a => { Unknown => 1, Name => 'PrintInfo2' }, #7 diff --git a/bin/lib/Image/ExifTool/QuickTimeStream.pl b/bin/lib/Image/ExifTool/QuickTimeStream.pl index a7a8829..5184b65 100644 --- a/bin/lib/Image/ExifTool/QuickTimeStream.pl +++ b/bin/lib/Image/ExifTool/QuickTimeStream.pl @@ -109,7 +109,7 @@ package Image::ExifTool::QuickTime; The tags below are extracted from timed metadata in QuickTime and other formats of video files when the ExtractEmbedded option is used. Although most of these tags are combined into the single table below, ExifTool - currently reads 78 different formats of timed GPS metadata from video files. + currently reads 82 different formats of timed GPS metadata from video files. }, VARS => { NO_ID => 1 }, GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' }, diff --git a/bin/lib/Image/ExifTool/TagLookup.pm b/bin/lib/Image/ExifTool/TagLookup.pm index 0682496..9cfba22 100644 --- a/bin/lib/Image/ExifTool/TagLookup.pm +++ b/bin/lib/Image/ExifTool/TagLookup.pm @@ -8434,6 +8434,7 @@ my %tagExists = ( 'channelcoarsegainadjust' => 1, 'channelmode' => 1, 'channelnumber' => 1, + 'channeloptions' => 1, 'channelusage' => 1, 'chapter' => 1, 'chaptercount' => 1, @@ -9752,6 +9753,7 @@ my %tagExists = ( 'gpshomelongitude' => 1, 'gpshorizontalaccuracy' => 1, 'gpsinfo' => 1, + 'gpsinfo9' => 1, 'gpslatitude2' => 1, 'gpslatituderaw' => 1, 'gpslog' => 1, @@ -12212,6 +12214,7 @@ my %tagExists = ( 'signature' => 1, 'signature_name' => 1, 'signatureformat' => 1, + 'signaturelength' => 1, 'signatureusagerights' => 1, 'signercontactinfo' => 1, 'significantbits' => 1, @@ -12784,6 +12787,7 @@ my %tagExists = ( 'uninitializeddatasize' => 1, 'uniquefileidentifier' => 1, 'uniqueid' => 1, + 'uniqueidentifier' => 1, 'unknown' => 1, 'unknown00' => 1, 'unknown01' => 1, diff --git a/bin/lib/Image/ExifTool/TagNames.pod b/bin/lib/Image/ExifTool/TagNames.pod index 07dfe15..076c214 100644 --- a/bin/lib/Image/ExifTool/TagNames.pod +++ b/bin/lib/Image/ExifTool/TagNames.pod @@ -12,7 +12,7 @@ meta information extracted from or written to a file. =head1 TAG TABLES The tables listed below give the names of all tags recognized by ExifTool. -They contain a total of 28175 tags, with 17499 unique tag names. +They contain a total of 28187 tags, with 17502 unique tag names. B, B or B is given in the first column of each table. A B is the computer-readable equivalent of a tag name, and @@ -6168,11 +6168,12 @@ These tags belong to the ExifTool XMP-seal family 1 group. =head3 XMP SEAL Tags -These tags are used in SEAL content authentification, which is actually XML -format, not XMP. ExifTool has read/delete support for SEAL information in -JPG, TIFF, XMP, PNG, WEBP, HEIC, PPM, MOV and MP4 files, and read-only -support in PDF, MKV and WAV. Use C<-seal:all=> on the command line to -delete SEAL information in supported formats. +These tags are used in SEAL (Secure Evidence Attribution Label) content +authentification, which is actually XML format, not XMP. ExifTool has +read/delete support for SEAL information in JPG, TIFF, XMP, PNG, WEBP, HEIC, +PPM, MOV and MP4 files, and read-only support in PDF, MKV and WAV. Use +C<-seal:all=> on the command line to delete SEAL information in supported +formats. See L for the specification. Tag ID Tag Name Writable ------ -------- -------- @@ -6180,12 +6181,15 @@ delete SEAL information in supported formats. 'copyright' Copyright no 'd' Domain no 'da' DigestAlgorithm no + 'id' Identifier no 'info' SEALComment no 'ka' KeyAlgorithm no 'kv' KeyVersion no 's' Signature no 'seal' SEALVersion no 'sf' SignatureFormat no + 'sl' SignatureLength no + 'uid' UniqueIdentifier no =head3 XMP swf Tags @@ -8873,7 +8877,7 @@ access to this information. 0x0432 MeasurementScale? no 0x0433 TimelineInfo? no 0x0434 SheetDisclosure? no - 0x0435 DisplayInfo? no + 0x0435 ChannelOptions? no 0x0436 OnionSkins? no 0x0438 CountInfo? no 0x043a PrintInfo2? no @@ -24715,6 +24719,7 @@ L for details about this format. 'GLPI' GPSPos GoPro GLPI 'GPRI' GPSRaw? GoPro GPRI 'GPS5' GPSInfo GoPro GPS5 + 'GPS9' GPSInfo9 GoPro GPS9 'GPSA' GPSAltitudeSystem no 'GPSF' GPSMeasureMode no 'GPSP' GPSHPositioningError no @@ -24760,6 +24765,7 @@ L for details about this format. 'TMPC' CameraTemperature no 'TSMP' TotalSamples? no 'TYPE' StructureType? no + 'TZON' TimeZone no 'UNIF' InputUniformity no 'UNIT' Units? no 'VERS' MetadataVersion no @@ -24804,6 +24810,19 @@ L for details about this format. 3 GPSSpeed no 4 GPSSpeed3D no +=head3 GoPro GPS9 Tags + + Index Tag Name Writable + ----- -------- -------- + 0 GPSLatitude no + 1 GPSLongitude no + 2 GPSAltitude no + 3 GPSSpeed no + 4 GPSSpeed3D no + 6 GPSDateTime no + 7 GPSDOP no + 8 GPSMeasureMode no + =head3 GoPro KBAT Tags Battery status information found in GoPro Karma videos. @@ -29943,7 +29962,7 @@ for the official QuickTime specification. The tags below are extracted from timed metadata in QuickTime and other formats of video files when the ExtractEmbedded option is used. Although most of these tags are combined into the single table below, ExifTool -currently reads 78 different formats of timed GPS metadata from video files. +currently reads 82 different formats of timed GPS metadata from video files. Tag Name Writable -------- -------- diff --git a/bin/lib/Image/ExifTool/XMP2.pl b/bin/lib/Image/ExifTool/XMP2.pl index 06a0245..1cde65f 100644 --- a/bin/lib/Image/ExifTool/XMP2.pl +++ b/bin/lib/Image/ExifTool/XMP2.pl @@ -2307,19 +2307,23 @@ package Image::ExifTool::XMP; GROUPS => { 0 => 'XML', 1 => 'SEAL', 2 => 'Document' }, PROCESS_PROC => \&ProcessSEAL, NOTES => q{ - These tags are used in SEAL content authentification, which is actually XML - format, not XMP. ExifTool has read/delete support for SEAL information in - JPG, TIFF, XMP, PNG, WEBP, HEIC, PPM, MOV and MP4 files, and read-only - support in PDF, MKV and WAV. Use C<-seal:all=> on the command line to - delete SEAL information in supported formats. + These tags are used in SEAL (Secure Evidence Attribution Label) content + authentification, which is actually XML format, not XMP. ExifTool has + read/delete support for SEAL information in JPG, TIFF, XMP, PNG, WEBP, HEIC, + PPM, MOV and MP4 files, and read-only support in PDF, MKV and WAV. Use + C<-seal:all=> on the command line to delete SEAL information in supported + formats. See L for the specification. }, seal=> 'SEALVersion', - kv => 'KeyVersion', ka => 'KeyAlgorithm', + kv => 'KeyVersion', da => 'DigestAlgorithm', - sf => 'SignatureFormat', - d => 'Domain', b => 'ByteRange', + d => 'Domain', + uid => 'UniqueIdentifier', + id => 'Identifier', + sf => 'SignatureFormat', + sl => 'SignatureLength', 's' => 'Signature', info=> 'SEALComment', copyright => { Name => 'Copyright', Groups => { 2 => 'Author' } }, diff --git a/bin/perl-Image-ExifTool.spec b/bin/perl-Image-ExifTool.spec index dcf27a0..cefd8b8 100644 --- a/bin/perl-Image-ExifTool.spec +++ b/bin/perl-Image-ExifTool.spec @@ -1,6 +1,6 @@ Summary: perl module for image data extraction Name: perl-Image-ExifTool -Version: 13.03 +Version: 13.04 Release: 1 License: Artistic/GPL Group: Development/Libraries/Perl diff --git a/lib/exiftool_vendored/version.rb b/lib/exiftool_vendored/version.rb index 911847a..00a573f 100644 --- a/lib/exiftool_vendored/version.rb +++ b/lib/exiftool_vendored/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module ExiftoolVendored - VERSION = Gem::Version.new('13.03.0') + VERSION = Gem::Version.new('13.04.0') end