exiftool_vendored 12.62.0 → 12.64.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/Changes +50 -1
- data/bin/MANIFEST +4 -0
- data/bin/META.json +4 -1
- data/bin/META.yml +4 -1
- data/bin/Makefile.PL +7 -1
- data/bin/README +50 -46
- data/bin/config_files/guano.config +161 -0
- data/bin/exiftool +88 -62
- data/bin/lib/Image/ExifTool/7Z.pm +793 -0
- data/bin/lib/Image/ExifTool/Apple.pm +6 -3
- data/bin/lib/Image/ExifTool/Canon.pm +1 -0
- data/bin/lib/Image/ExifTool/CanonRaw.pm +4 -4
- data/bin/lib/Image/ExifTool/CanonVRD.pm +4 -1
- data/bin/lib/Image/ExifTool/Exif.pm +31 -14
- data/bin/lib/Image/ExifTool/FujiFilm.pm +3 -3
- data/bin/lib/Image/ExifTool/GPS.pm +5 -2
- data/bin/lib/Image/ExifTool/Geotag.pm +4 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +226 -28
- data/bin/lib/Image/ExifTool/Lang/fr.pm +1467 -202
- data/bin/lib/Image/ExifTool/MPF.pm +2 -1
- data/bin/lib/Image/ExifTool/Matroska.pm +16 -1
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +419 -5
- data/bin/lib/Image/ExifTool/NikonCustom.pm +13 -3
- data/bin/lib/Image/ExifTool/PDF.pm +9 -1
- data/bin/lib/Image/ExifTool/PLIST.pm +8 -1
- data/bin/lib/Image/ExifTool/PNG.pm +6 -6
- data/bin/lib/Image/ExifTool/PhaseOne.pm +5 -5
- data/bin/lib/Image/ExifTool/QuickTime.pm +74 -21
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +20 -19
- data/bin/lib/Image/ExifTool/README +2 -2
- data/bin/lib/Image/ExifTool/RIFF.pm +11 -9
- data/bin/lib/Image/ExifTool/Shortcuts.pm +2 -1
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +4 -4
- data/bin/lib/Image/ExifTool/Sony.pm +103 -8
- data/bin/lib/Image/ExifTool/TagLookup.pm +4738 -4630
- data/bin/lib/Image/ExifTool/TagNames.pod +249 -5
- data/bin/lib/Image/ExifTool/Validate.pm +17 -1
- data/bin/lib/Image/ExifTool/WriteExif.pl +9 -7
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +21 -9
- data/bin/lib/Image/ExifTool/WriteXMP.pl +2 -2
- data/bin/lib/Image/ExifTool/Writer.pl +28 -10
- data/bin/lib/Image/ExifTool/XMP.pm +14 -2
- data/bin/lib/Image/ExifTool/XMP2.pl +32 -0
- data/bin/lib/Image/ExifTool/XMPStruct.pl +96 -28
- data/bin/lib/Image/ExifTool/ZIP.pm +5 -5
- data/bin/lib/Image/ExifTool.pm +67 -39
- data/bin/lib/Image/ExifTool.pod +83 -52
- data/bin/perl-Image-ExifTool.spec +44 -44
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +4 -2
@@ -16,7 +16,7 @@ use vars qw($VERSION);
|
|
16
16
|
use Image::ExifTool::Exif;
|
17
17
|
use Image::ExifTool::PLIST;
|
18
18
|
|
19
|
-
$VERSION = '1.
|
19
|
+
$VERSION = '1.09';
|
20
20
|
|
21
21
|
sub ConvertPLIST($$);
|
22
22
|
|
@@ -182,7 +182,10 @@ sub ConvertPLIST($$);
|
|
182
182
|
# 0x0028 - int32s (UBMethod, ref 2)
|
183
183
|
# 0x0029 - string (SpatialOverCaptureGroupIdentifier, ref 2)
|
184
184
|
# 0x002A - (iCloudServerSoftwareVersionForDynamicallyGeneratedMedia, ref 2)
|
185
|
-
|
185
|
+
0x002b => {
|
186
|
+
Name => 'PhotoIdentifier', #2
|
187
|
+
Writable => 'string',
|
188
|
+
},
|
186
189
|
# 0x002C - (SpatialOverCaptureImageType, ref 2)
|
187
190
|
# 0x002D - (CCT, ref 2)
|
188
191
|
# 0x002E - (ApsMode, ref 2)
|
@@ -308,7 +311,7 @@ sub ConvertPLIST($$)
|
|
308
311
|
$val = $$dirInfo{Value};
|
309
312
|
if (ref $val eq 'HASH' and not $et->Options('Struct')) {
|
310
313
|
require 'Image/ExifTool/XMPStruct.pl';
|
311
|
-
$val = Image::ExifTool::XMP::SerializeStruct($val);
|
314
|
+
$val = Image::ExifTool::XMP::SerializeStruct($et, $val);
|
312
315
|
}
|
313
316
|
return $val;
|
314
317
|
}
|
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
21
21
|
use Image::ExifTool::Exif;
|
22
22
|
use Image::ExifTool::Canon;
|
23
23
|
|
24
|
-
$VERSION = '1.
|
24
|
+
$VERSION = '1.61';
|
25
25
|
|
26
26
|
sub WriteCRW($$);
|
27
27
|
sub ProcessCanonRaw($$$);
|
@@ -698,9 +698,9 @@ sub ProcessCanonRaw($$$)
|
|
698
698
|
$format ne 'string' and not $subdir;
|
699
699
|
} else {
|
700
700
|
$valueDataPos = $ptr;
|
701
|
-
# do
|
702
|
-
if ($$et{
|
703
|
-
$raf->Seek($ptr, 0) and $et->
|
701
|
+
# do hash of image data if requested
|
702
|
+
if ($$et{ImageDataHash} and $tagID == 0x2005) {
|
703
|
+
$raf->Seek($ptr, 0) and $et->ImageDataHash($raf, $size, 'raw');
|
704
704
|
}
|
705
705
|
if ($size <= 512 or ($verbose > 2 and $size <= 65536)
|
706
706
|
or ($tagInfo and ($$tagInfo{SubDirectory}
|
@@ -23,7 +23,7 @@ use vars qw($VERSION);
|
|
23
23
|
use Image::ExifTool qw(:DataAccess :Utils);
|
24
24
|
use Image::ExifTool::Canon;
|
25
25
|
|
26
|
-
$VERSION = '1.
|
26
|
+
$VERSION = '1.36';
|
27
27
|
|
28
28
|
sub ProcessCanonVRD($$;$);
|
29
29
|
sub WriteCanonVRD($$;$);
|
@@ -187,6 +187,7 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
187
187
|
WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
|
188
188
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
189
189
|
WRITABLE => 1,
|
190
|
+
PERMANENT => 1, # (can't add/delete these individually)
|
190
191
|
FIRST_ENTRY => 0,
|
191
192
|
GROUPS => { 2 => 'Image' },
|
192
193
|
DATAMEMBER => [ 0x002 ], # necessary for writing
|
@@ -485,6 +486,7 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
485
486
|
WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
|
486
487
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
487
488
|
WRITABLE => 1,
|
489
|
+
PERMANENT => 1, # (can't add/delete these individually)
|
488
490
|
FIRST_ENTRY => 0,
|
489
491
|
FORMAT => 'int16s',
|
490
492
|
DATAMEMBER => [ 0x58, 0xdc, 0xdf, 0xe0 ], # (required for DataMember and var-format tags)
|
@@ -999,6 +1001,7 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
999
1001
|
PROCESS_PROC => \&ProcessDR4,
|
1000
1002
|
WRITE_PROC => \&ProcessDR4,
|
1001
1003
|
WRITABLE => 1,
|
1004
|
+
PERMANENT => 1, # (can't add/delete these individually)
|
1002
1005
|
GROUPS => { 1 => 'CanonDR4', 2 => 'Image' },
|
1003
1006
|
VARS => { HEX_ID => 1, SORT_PROC => \&SortDR4 },
|
1004
1007
|
NOTES => q{
|
@@ -43,6 +43,7 @@
|
|
43
43
|
# 30) http://geotiff.maptools.org/spec/geotiffhome.html
|
44
44
|
# 31) https://android.googlesource.com/platform/external/dng_sdk/+/refs/heads/master/source/dng_tag_codes.h
|
45
45
|
# 32) Jeffry Friedl private communication
|
46
|
+
# 33) https://www.cipa.jp/std/documents/download_e.html?DC-008-Translation-2023-E (Exif 3.0)
|
46
47
|
# IB) Iliah Borg private communication (LibRaw)
|
47
48
|
# JD) Jens Duttke private communication
|
48
49
|
#------------------------------------------------------------------------------
|
@@ -65,7 +66,7 @@ sub RebuildMakerNotes($$$);
|
|
65
66
|
sub EncodeExifText($$);
|
66
67
|
sub ValidateIFD($;$);
|
67
68
|
sub ValidateImageData($$$;$);
|
68
|
-
sub
|
69
|
+
sub AddImageDataHash($$$);
|
69
70
|
sub ProcessTiffIFD($$$);
|
70
71
|
sub PrintParameter($$$);
|
71
72
|
sub GetOffList($$$$$);
|
@@ -79,6 +80,7 @@ sub BINARY_DATA_LIMIT { return 10 * 1024 * 1024; }
|
|
79
80
|
|
80
81
|
# byte sizes for the various EXIF format types below
|
81
82
|
@formatSize = (undef,1,1,2,4,8,1,1,2,4,8,4,8,4,2,8,8,8,8);
|
83
|
+
$formatSize[129] = 1; # (Exif 3.0)
|
82
84
|
|
83
85
|
@formatName = (
|
84
86
|
undef, 'int8u', 'string', 'int16u',
|
@@ -87,6 +89,7 @@ sub BINARY_DATA_LIMIT { return 10 * 1024 * 1024; }
|
|
87
89
|
'double', 'ifd', 'unicode', 'complex',
|
88
90
|
'int64u', 'int64s', 'ifd64', # (new BigTIFF formats)
|
89
91
|
);
|
92
|
+
$formatName[129] = 'utf8'; # (Exif 3.0)
|
90
93
|
|
91
94
|
# hash to look up EXIF format numbers by name
|
92
95
|
# (format types are all lower case)
|
@@ -110,6 +113,7 @@ sub BINARY_DATA_LIMIT { return 10 * 1024 * 1024; }
|
|
110
113
|
'int64u' => 16, # LONG8 [BigTIFF]
|
111
114
|
'int64s' => 17, # SLONG8 [BigTIFF]
|
112
115
|
'ifd64' => 18, # IFD8 (with int64u format) [BigTIFF]
|
116
|
+
'utf8' => 129,# UTF-8 (Exif 3.0)
|
113
117
|
# Note: unicode and complex types are not yet properly supported by ExifTool.
|
114
118
|
# These are types which have been observed in the Adobe DNG SDK code, but
|
115
119
|
# aren't fully supported there either. We know the sizes, but that's about it.
|
@@ -2823,6 +2827,13 @@ my %opcodeInfo = (
|
|
2823
2827
|
0xa433 => { Name => 'LensMake', Writable => 'string' }, #24
|
2824
2828
|
0xa434 => { Name => 'LensModel', Writable => 'string' }, #24
|
2825
2829
|
0xa435 => { Name => 'LensSerialNumber', Writable => 'string' }, #24
|
2830
|
+
0xa436 => { Name => 'Title', Writable => 'string', Avoid => 1 }, #33
|
2831
|
+
0xa437 => { Name => 'Photographer', Writable => 'string' }, #33
|
2832
|
+
0xa438 => { Name => 'ImageEditor', Writable => 'string' }, #33
|
2833
|
+
0xa439 => { Name => 'CameraFirmware', Writable => 'string' }, #33
|
2834
|
+
0xa43a => { Name => 'RAWDevelopingSoftware', Writable => 'string' }, #33
|
2835
|
+
0xa43b => { Name => 'ImageEditingSoftware', Writable => 'string' }, #33
|
2836
|
+
0xa43c => { Name => 'MetadataEditingSoftware', Writable => 'string' }, #33
|
2826
2837
|
0xa460 => { #Exif2.32
|
2827
2838
|
Name => 'CompositeImage',
|
2828
2839
|
Writable => 'int16u',
|
@@ -4910,10 +4921,10 @@ my %subSecConv = (
|
|
4910
4921
|
Writable => 1,
|
4911
4922
|
Protected => 1,
|
4912
4923
|
WriteAlso => {
|
4913
|
-
GPSLatitude => '(defined $val and $val =~ /(
|
4914
|
-
GPSLatitudeRef => '(defined $val and $val =~ /(-?)(.*?)
|
4915
|
-
GPSLongitude => '(defined $val and $val =~
|
4916
|
-
GPSLongitudeRef => '(defined $val and $val =~
|
4924
|
+
GPSLatitude => '(defined $val and $val =~ /(.*) /) ? $1 : undef',
|
4925
|
+
GPSLatitudeRef => '(defined $val and $val =~ /(-?)(.*?) /) ? ($1 ? "S" : "N") : undef',
|
4926
|
+
GPSLongitude => '(defined $val and $val =~ / (.*)$/) ? $1 : undef',
|
4927
|
+
GPSLongitudeRef => '(defined $val and $val =~ / (-?)/) ? ($1 ? "W" : "E") : undef',
|
4917
4928
|
},
|
4918
4929
|
PrintConvInv => q{
|
4919
4930
|
return undef unless $val =~ /(.*? ?[NS]?), ?(.*? ?[EW]?)$/;
|
@@ -4921,7 +4932,7 @@ my %subSecConv = (
|
|
4921
4932
|
require Image::ExifTool::GPS;
|
4922
4933
|
$lat = Image::ExifTool::GPS::ToDegrees($lat, 1, "lat");
|
4923
4934
|
$lon = Image::ExifTool::GPS::ToDegrees($lon, 1, "lon");
|
4924
|
-
return "$lat
|
4935
|
+
return "$lat $lon";
|
4925
4936
|
},
|
4926
4937
|
Require => {
|
4927
4938
|
0 => 'GPSLatitude',
|
@@ -5929,12 +5940,12 @@ sub ProcessExif($$$)
|
|
5929
5940
|
my ($verbose,$validate,$saveFormat) = @{$$et{OPTIONS}}{qw(Verbose Validate SaveFormat)};
|
5930
5941
|
my $htmlDump = $$et{HTML_DUMP};
|
5931
5942
|
my $success = 1;
|
5932
|
-
my ($tagKey, $dirSize, $makerAddr, $strEnc, %offsetInfo, $offName, $nextOffName, $
|
5943
|
+
my ($tagKey, $dirSize, $makerAddr, $strEnc, %offsetInfo, $offName, $nextOffName, $doHash);
|
5933
5944
|
my $inMakerNotes = $$tagTablePtr{GROUPS}{0} eq 'MakerNotes';
|
5934
5945
|
my $isExif = ($tagTablePtr eq \%Image::ExifTool::Exif::Main);
|
5935
5946
|
|
5936
|
-
# set flag to calculate image data
|
5937
|
-
$
|
5947
|
+
# set flag to calculate image data hash if requested
|
5948
|
+
$doHash = 1 if $$et{ImageDataHash} and (($$et{FILE_TYPE} eq 'TIFF' and not $base and not $inMakerNotes) or
|
5938
5949
|
($$et{FILE_TYPE} eq 'RAF' and $dirName eq 'FujiIFD'));
|
5939
5950
|
|
5940
5951
|
# set encoding to assume for strings
|
@@ -6088,7 +6099,7 @@ sub ProcessExif($$$)
|
|
6088
6099
|
my $format = Get16u($dataPt, $entry+2);
|
6089
6100
|
my $count = Get32u($dataPt, $entry+4);
|
6090
6101
|
# (Apple uses the BigTIFF format code 16 in the maker notes of their ProRaw DNG files)
|
6091
|
-
if (($format < 1 or $format > 13) and not ($format == 16 and $$et{Make} eq 'Apple' and $inMakerNotes)) {
|
6102
|
+
if (($format < 1 or $format > 13) and $format != 129 and not ($format == 16 and $$et{Make} eq 'Apple' and $inMakerNotes)) {
|
6092
6103
|
if ($mapFmt and $$mapFmt{$format}) {
|
6093
6104
|
$format = $$mapFmt{$format};
|
6094
6105
|
} else {
|
@@ -6404,7 +6415,13 @@ sub ProcessExif($$$)
|
|
6404
6415
|
# convert according to specified format
|
6405
6416
|
$val = ReadValue($valueDataPt,$valuePtr,$formatStr,$count,$readSize,\$rational);
|
6406
6417
|
# re-code if necessary
|
6407
|
-
|
6418
|
+
if (defined $val) {
|
6419
|
+
if ($formatStr eq 'utf8') {
|
6420
|
+
$val = $et->Decode($val, 'UTF8');
|
6421
|
+
} elsif ($strEnc and $formatStr eq 'string') {
|
6422
|
+
$val = $et->Decode($val, $strEnc);
|
6423
|
+
}
|
6424
|
+
}
|
6408
6425
|
}
|
6409
6426
|
}
|
6410
6427
|
|
@@ -6781,7 +6798,7 @@ sub ProcessExif($$$)
|
|
6781
6798
|
}
|
6782
6799
|
$val = join(' ', @vals);
|
6783
6800
|
}
|
6784
|
-
if ($validate or $
|
6801
|
+
if ($validate or $doHash) {
|
6785
6802
|
if ($$tagInfo{OffsetPair}) {
|
6786
6803
|
$offsetInfo{$tagID} = [ $tagInfo, $val ];
|
6787
6804
|
} elsif ($saveForValidate{$tagID} and $isExif) {
|
@@ -6800,8 +6817,8 @@ sub ProcessExif($$$)
|
|
6800
6817
|
}
|
6801
6818
|
|
6802
6819
|
if (%offsetInfo) {
|
6803
|
-
# calculate image data
|
6804
|
-
|
6820
|
+
# calculate image data hash if requested
|
6821
|
+
AddImageDataHash($et, $dirInfo, \%offsetInfo) if $doHash;
|
6805
6822
|
# validate image data offsets for this IFD (note: modifies %offsetInfo)
|
6806
6823
|
Image::ExifTool::Validate::ValidateOffsetInfo($et, \%offsetInfo, $dirName, $inMakerNotes) if $validate;
|
6807
6824
|
}
|
@@ -31,7 +31,7 @@ use vars qw($VERSION);
|
|
31
31
|
use Image::ExifTool qw(:DataAccess :Utils);
|
32
32
|
use Image::ExifTool::Exif;
|
33
33
|
|
34
|
-
$VERSION = '1.
|
34
|
+
$VERSION = '1.88';
|
35
35
|
|
36
36
|
sub ProcessFujiDir($$$);
|
37
37
|
sub ProcessFaceRec($$$);
|
@@ -1687,8 +1687,8 @@ sub ProcessRAF($$)
|
|
1687
1687
|
my $tagTablePtr = GetTagTable('Image::ExifTool::FujiFilm::IFD');
|
1688
1688
|
# this is TIFF-format data only for some models, so no warning if it fails
|
1689
1689
|
unless ($et->ProcessTIFF(\%dirInfo, $tagTablePtr, \&Image::ExifTool::ProcessTIFF)) {
|
1690
|
-
# do
|
1691
|
-
$et->
|
1690
|
+
# do hash of image data if necessary
|
1691
|
+
$et->ImageDataHash($raf, $len, 'raw') if $$et{ImageDataHash} and $raf->Seek($start,0);
|
1692
1692
|
}
|
1693
1693
|
delete $$et{SET_GROUP1};
|
1694
1694
|
$ifdNum = ($ifdNum || 1) + 1;
|
@@ -106,8 +106,10 @@ my %coordConv = (
|
|
106
106
|
return undef unless $inv and $val =~ /^([-+0-9])/;
|
107
107
|
return($1 eq '-' ? 1 : 0);
|
108
108
|
},
|
109
|
-
0 => 'Above Sea Level',
|
110
|
-
1 => 'Below Sea Level',
|
109
|
+
0 => 'Above Sea Level', # (ellipsoidal surface, Exif 3.0)
|
110
|
+
1 => 'Below Sea Level', # (ellipsoidal surface, Exif 3.0)
|
111
|
+
# 2 => 'Above Sea Level', # (Exif 3.0)
|
112
|
+
# 3 => 'Below Sea Level', # (Exif 3.0)
|
111
113
|
},
|
112
114
|
},
|
113
115
|
0x0006 => {
|
@@ -289,6 +291,7 @@ my %coordConv = (
|
|
289
291
|
Name => 'GPSProcessingMethod',
|
290
292
|
Writable => 'undef',
|
291
293
|
Notes => 'values of "GPS", "CELLID", "WLAN" or "MANUAL" by the EXIF spec.',
|
294
|
+
# (or QZZSS, GALILEO, GLONASS, BEIDOU or NAVIC in Exif 3.0)
|
292
295
|
RawConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val,1,$tag)',
|
293
296
|
RawConvInv => 'Image::ExifTool::Exif::EncodeExifText($self,$val)',
|
294
297
|
},
|
@@ -29,7 +29,7 @@ use vars qw($VERSION);
|
|
29
29
|
use Image::ExifTool qw(:Public);
|
30
30
|
use Image::ExifTool::GPS;
|
31
31
|
|
32
|
-
$VERSION = '1.
|
32
|
+
$VERSION = '1.72';
|
33
33
|
|
34
34
|
sub JITTER() { return 2 } # maximum time jitter
|
35
35
|
|
@@ -224,6 +224,9 @@ sub LoadTrackLog($$;$)
|
|
224
224
|
# determine file format
|
225
225
|
if (not $format) {
|
226
226
|
s/^\xef\xbb\xbf//; # remove leading BOM if it exists
|
227
|
+
if (/^\xff\xfe|\xfe\xff/) {
|
228
|
+
return "ExifTool doesn't yet read UTF16-format track logs";
|
229
|
+
}
|
227
230
|
if (/^<(\?xml|gpx)[\s>]/) { # look for XML or GPX header
|
228
231
|
$format = 'XML';
|
229
232
|
# check for NMEA sentence
|