exiftool_vendored 13.52.0 → 13.53.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 +16 -1
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +3 -2
- data/bin/exiftool +25 -14
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +4 -1
- data/bin/lib/Image/ExifTool/CBOR.pm +2 -1
- data/bin/lib/Image/ExifTool/Canon.pm +7 -0
- data/bin/lib/Image/ExifTool/Exif.pm +1 -3
- data/bin/lib/Image/ExifTool/LNK.pm +865 -127
- data/bin/lib/Image/ExifTool/Nikon.pm +2 -2
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +15 -3
- data/bin/lib/Image/ExifTool/README +10 -9
- data/bin/lib/Image/ExifTool/Sony.pm +13 -6
- data/bin/lib/Image/ExifTool/TagLookup.pm +67 -11
- data/bin/lib/Image/ExifTool/TagNames.pod +147 -29
- data/bin/lib/Image/ExifTool/Torrent.pm +2 -1
- data/bin/lib/Image/ExifTool/WPG.pm +23 -11
- data/bin/lib/Image/ExifTool.pm +45 -10
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c653bfd291b7881243e271beba3bdcf6af6343647b7736ea5750a8b6427c6ba2
|
|
4
|
+
data.tar.gz: 550046af23b550283317d05a7d3387d2e977efd2d3c74af0285808f8035c7756
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a2dabd27da939c74ff1300eaea01b3597c994d9fe456bb2d386f6d5eba0f6fb682c8c154ac3ad833e8fd7e63f421b01f3c5c0b307989cb8e030284f2a5c0bf13
|
|
7
|
+
data.tar.gz: eb1cff971653f098e366a793786e43caa79a378134287935afd997f5dad37212f9bb6bf7b64523c85c4774e53fcd84379dc34b1016fa428f6d158011f0b69f5b
|
data/bin/Changes
CHANGED
|
@@ -7,6 +7,21 @@ RSS feed: https://exiftool.org/rss.xml
|
|
|
7
7
|
Note: The most recent production release is Version 13.50. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
Mar. 19, 2026 - Version 13.53
|
|
11
|
+
|
|
12
|
+
- Added ability to read FileCreateDate (btime) on Linux systems
|
|
13
|
+
- Added a bunch more Sony lenses (thanks Jos Roost)
|
|
14
|
+
- Added warnings for possibly malicious or corrupted LNK files (github #401)
|
|
15
|
+
- Decode timed GPS from Kenwood DRV-A510W MP4 videos
|
|
16
|
+
- Decode more information from LNK files
|
|
17
|
+
- Reduced memory requirements when running on a large number of files,
|
|
18
|
+
particularly when the -U option is used
|
|
19
|
+
- Patched a potential security issue in Windows version
|
|
20
|
+
- Fixed possible "undefined value" runtime warnings when reading torrent and
|
|
21
|
+
WPG files (thanks Raf)
|
|
22
|
+
- Fixed issue which could result in an "uninitialized value" runtime error
|
|
23
|
+
when parsing corrupted CBOR information
|
|
24
|
+
|
|
10
25
|
Feb. 27, 2026 - Version 13.52
|
|
11
26
|
|
|
12
27
|
- Added a number of new XMP tags written by Adobe software
|
|
@@ -27,7 +42,7 @@ Feb. 19, 2026 - Version 13.51
|
|
|
27
42
|
- Added a new Nikon LensID (thanks Johan)
|
|
28
43
|
- Decode more tags from Windows LNK files
|
|
29
44
|
- Decode another LIGOGPSINFO variant (github #394)
|
|
30
|
-
- Decode some new Canon tags (thanks Peter Wem, github #389, #390,
|
|
45
|
+
- Decode some new Canon tags (thanks Peter Wem, github #389, #390, #393)
|
|
31
46
|
- Decode some new Nikon tags
|
|
32
47
|
- Split decoding on Nikon BurstGroupID into separate tags
|
|
33
48
|
- Fixed round-off error in GPSDateTime seconds for camm6 metadata in MP4
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
|
@@ -111,8 +111,8 @@ your home directory, then you would type the following commands in a
|
|
|
111
111
|
terminal window to extract and run ExifTool:
|
|
112
112
|
|
|
113
113
|
cd ~/Desktop
|
|
114
|
-
gzip -dc Image-ExifTool-13.
|
|
115
|
-
cd Image-ExifTool-13.
|
|
114
|
+
gzip -dc Image-ExifTool-13.53.tar.gz | tar -xf -
|
|
115
|
+
cd Image-ExifTool-13.53
|
|
116
116
|
./exiftool t/images/ExifTool.jpg
|
|
117
117
|
|
|
118
118
|
Note: These commands extract meta information from one of the test images.
|
|
@@ -162,6 +162,7 @@ for calculating digest values and providing other features listed below:
|
|
|
162
162
|
Win32::FindFile (for Windows Unicode directory support, app only)
|
|
163
163
|
Win32API::File (for Windows Unicode file names and file times)
|
|
164
164
|
Compress::Raw::Lzma (for reading encoded 7z files)
|
|
165
|
+
File::StatX (for reading FileCreateDate on Linux systems)
|
|
165
166
|
IO::Compress::RawDeflate (for writing FLIF images)
|
|
166
167
|
IO::Uncompress::RawInflate (for reading FLIF images)
|
|
167
168
|
IO::Compress::Brotli (for writing compressed JXL metadata)
|
data/bin/exiftool
CHANGED
|
@@ -11,7 +11,7 @@ use strict;
|
|
|
11
11
|
use warnings;
|
|
12
12
|
require 5.004;
|
|
13
13
|
|
|
14
|
-
my $version = '13.
|
|
14
|
+
my $version = '13.53';
|
|
15
15
|
|
|
16
16
|
$^W = 1; # enable global warnings
|
|
17
17
|
|
|
@@ -202,6 +202,7 @@ my $progressIncr; # increment for progress counter
|
|
|
202
202
|
my $progressMax; # total number of files to process
|
|
203
203
|
my $progressNext; # next progress count to output
|
|
204
204
|
my $progStr; # progress message string
|
|
205
|
+
my $purge; # flag to purge memory
|
|
205
206
|
my $quiet; # flag to disable printing of informational messages / warnings
|
|
206
207
|
my $rafStdin; # File::RandomAccess for stdin (if necessary to rewind)
|
|
207
208
|
my $recurse; # recurse into subdirectories (2=also hidden directories)
|
|
@@ -309,6 +310,7 @@ my @recommends = qw(
|
|
|
309
310
|
Time::Local
|
|
310
311
|
Unicode::LineBreak
|
|
311
312
|
Compress::Raw::Lzma
|
|
313
|
+
File::StatX
|
|
312
314
|
IO::Compress::RawDeflate
|
|
313
315
|
IO::Uncompress::RawInflate
|
|
314
316
|
IO::Compress::Brotli
|
|
@@ -521,6 +523,7 @@ undef $progressCount;
|
|
|
521
523
|
undef $progressIncr;
|
|
522
524
|
undef $progressMax;
|
|
523
525
|
undef $progressNext;
|
|
526
|
+
undef $purge;
|
|
524
527
|
undef $rafStdin;
|
|
525
528
|
undef $recurse;
|
|
526
529
|
undef $scanWritable;
|
|
@@ -791,6 +794,7 @@ for (;;) {
|
|
|
791
794
|
print "Optional libraries:\n";
|
|
792
795
|
foreach (@recommends) {
|
|
793
796
|
next if /^Win32/ and $^O ne 'MSWin32';
|
|
797
|
+
next if /StatX/ and $^O ne 'linux';
|
|
794
798
|
my $ver = eval "require $_ and \$${_}::VERSION";
|
|
795
799
|
my $alt = $altRecommends{$_};
|
|
796
800
|
# check for alternative if primary not available
|
|
@@ -1172,9 +1176,9 @@ for (;;) {
|
|
|
1172
1176
|
$vout = \*STDERR if $vout =~ /^-(\.\w+)?$/;
|
|
1173
1177
|
next;
|
|
1174
1178
|
}
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1179
|
+
$a eq 'overwrite_original' and $overwriteOrig = 1, next;
|
|
1180
|
+
$a eq 'overwrite_original_in_place' and $overwriteOrig = 2, next;
|
|
1181
|
+
$a eq 'plot' and require Image::ExifTool::Plot and $plot = Image::ExifTool::Plot->new, next;
|
|
1178
1182
|
if (/^p(-?)$/ or /^printformat(-?)$/i) {
|
|
1179
1183
|
my $fmt = shift;
|
|
1180
1184
|
if ($pass) {
|
|
@@ -1192,7 +1196,7 @@ for (;;) {
|
|
|
1192
1196
|
next;
|
|
1193
1197
|
}
|
|
1194
1198
|
(/^P$/ or $a eq 'preserve') and $preserveTime = 1, next;
|
|
1195
|
-
|
|
1199
|
+
$a eq 'password' and $mt->Options(Password => shift), next;
|
|
1196
1200
|
if (/^progress(\d*)(:.*)?$/i) {
|
|
1197
1201
|
$progressIncr = $1 || 1;
|
|
1198
1202
|
$progressNext = 0; # start showing progress at the first file
|
|
@@ -1207,6 +1211,7 @@ for (;;) {
|
|
|
1207
1211
|
$progressCount = 0;
|
|
1208
1212
|
next;
|
|
1209
1213
|
}
|
|
1214
|
+
/^purge(\d*)$/i and $purge = $1||1, Image::ExifTool::Purge($purge), next; # (undocumented) added in 13.53
|
|
1210
1215
|
/^q(uiet)?$/i and ++$quiet, next;
|
|
1211
1216
|
/^r(ecurse)?(\.?)$/i and $recurse = ($2 ? 2 : 1), next;
|
|
1212
1217
|
if ($a eq 'require') { # (undocumented) added in version 8.65
|
|
@@ -1222,10 +1227,10 @@ for (;;) {
|
|
|
1222
1227
|
}
|
|
1223
1228
|
next;
|
|
1224
1229
|
}
|
|
1225
|
-
|
|
1230
|
+
$a eq 'restore_original' and $deleteOrig = 0, next;
|
|
1226
1231
|
(/^S$/ or $a eq 'veryshort') and $outFormat+=2, next;
|
|
1227
1232
|
/^s(hort)?(\d*)$/i and $outFormat = $2 eq '' ? $outFormat + 1 : $2, next;
|
|
1228
|
-
|
|
1233
|
+
$a eq 'scanforxmp' and $mt->Options(ScanForXMP => 1), next;
|
|
1229
1234
|
if (/^sep(arator)?$/i) {
|
|
1230
1235
|
my $sep = $listSep = shift;
|
|
1231
1236
|
defined $listSep or Error("Expecting list item separator for -sep option\n"), $badCmd=1, next;
|
|
@@ -1360,7 +1365,7 @@ for (;;) {
|
|
|
1360
1365
|
next;
|
|
1361
1366
|
}
|
|
1362
1367
|
(/^X$/ or $a eq 'xmlformat') and $xml = 1, $html = $json = 0, $mt->Options(Duplicates => 1), next;
|
|
1363
|
-
if (
|
|
1368
|
+
if ($a eq 'php') {
|
|
1364
1369
|
$json = 2;
|
|
1365
1370
|
$html = $xml = 0;
|
|
1366
1371
|
$mt->Options(Duplicates => 1);
|
|
@@ -2074,6 +2079,8 @@ if ($countBadWr or $countBadCr or $countBad) {
|
|
|
2074
2079
|
$rtnVal = 2;
|
|
2075
2080
|
}
|
|
2076
2081
|
|
|
2082
|
+
Image::ExifTool::Purge(0) if $purge; # do final purging
|
|
2083
|
+
|
|
2077
2084
|
# clean up after each command
|
|
2078
2085
|
Cleanup();
|
|
2079
2086
|
|
|
@@ -4198,7 +4205,8 @@ sub SetWindowTitle($)
|
|
|
4198
4205
|
if ($curTitle ne $title) {
|
|
4199
4206
|
$curTitle = $title;
|
|
4200
4207
|
if ($^O eq 'MSWin32') {
|
|
4201
|
-
$title =~
|
|
4208
|
+
$title =~ tr(-_a-zA-Z0-9%.+/:=?*@~)()dc; # allow only safe characters
|
|
4209
|
+
$title =~ s/([\/?:%])/^$1/g; # escape remaing questionable chars
|
|
4202
4210
|
eval { system qq{title $title} };
|
|
4203
4211
|
} else {
|
|
4204
4212
|
# (this only works for XTerm terminals, and STDERR must go to the console)
|
|
@@ -4253,6 +4261,7 @@ sub ProcessFiles($;$)
|
|
|
4253
4261
|
next if $endDir{$d};
|
|
4254
4262
|
}
|
|
4255
4263
|
GetImageInfo($et, $file);
|
|
4264
|
+
Image::ExifTool::Purge($purge) if $purge;
|
|
4256
4265
|
$end and Warn("End called - $file\n");
|
|
4257
4266
|
if ($endDir) {
|
|
4258
4267
|
Warn("EndDir called - $file\n");
|
|
@@ -4382,6 +4391,7 @@ sub ScanDir($$;$)
|
|
|
4382
4391
|
push(@$list, $path);
|
|
4383
4392
|
} else {
|
|
4384
4393
|
GetImageInfo($et, $path);
|
|
4394
|
+
Image::ExifTool::Purge($purge) if $purge;
|
|
4385
4395
|
if ($end) {
|
|
4386
4396
|
Warn("End called - $file\n");
|
|
4387
4397
|
last;
|
|
@@ -5341,9 +5351,10 @@ information. Use the B<-s> option to see the tag names instead.
|
|
|
5341
5351
|
Exclude specified tag from extracted information. Same as the B<-x> option.
|
|
5342
5352
|
Group names and wildcards are permitted as described above for B<->I<TAG>.
|
|
5343
5353
|
Once excluded from the output, a tag may not be re-included by a subsequent
|
|
5344
|
-
option.
|
|
5345
|
-
|
|
5346
|
-
|
|
5354
|
+
option. Also note that this excludes the tag from being used in a C<-if>
|
|
5355
|
+
condition. May be used following a B<-tagsFromFile> option to exclude tags
|
|
5356
|
+
from being copied (when redirecting to another tag, it is the source tag
|
|
5357
|
+
that should be excluded), or to exclude groups from being deleted when
|
|
5347
5358
|
deleting all information (eg. C<-all= --exif:all> deletes all but EXIF
|
|
5348
5359
|
information). But note that this will not exclude individual tags from a
|
|
5349
5360
|
group delete (unless a family 2 group is specified, see note 4 below).
|
|
@@ -5601,7 +5612,7 @@ wildcards. When copying directly, the values of each matching source tag
|
|
|
5601
5612
|
are copied individually to the destination tag (as if they were separate
|
|
5602
5613
|
assignments). However, when interpolated inside a string, list items and
|
|
5603
5614
|
the values of shortcut tags are concatenated (with a separator set by the
|
|
5604
|
-
B<-sep> option), and wildcards are not allowed.Another difference is that a
|
|
5615
|
+
B<-sep> option), and wildcards are not allowed. Another difference is that a
|
|
5605
5616
|
minor warning is generated if a tag doesn't exist when interpolating its
|
|
5606
5617
|
value in a string (with C<$>), but isn't when copying the tag directly.
|
|
5607
5618
|
|
|
@@ -6136,7 +6147,7 @@ with this command:
|
|
|
6136
6147
|
|
|
6137
6148
|
produces output like this:
|
|
6138
6149
|
|
|
6139
|
-
-- Generated by ExifTool 13.
|
|
6150
|
+
-- Generated by ExifTool 13.53 --
|
|
6140
6151
|
File: a.jpg - 2003:10:31 15:44:19
|
|
6141
6152
|
(f/5.6, 1/60s, ISO 100)
|
|
6142
6153
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
|
|
|
35
35
|
use Image::ExifTool::Validate;
|
|
36
36
|
use Image::ExifTool::MacOS;
|
|
37
37
|
|
|
38
|
-
$VERSION = '3.
|
|
38
|
+
$VERSION = '3.67';
|
|
39
39
|
@ISA = qw(Exporter);
|
|
40
40
|
|
|
41
41
|
sub NumbersFirst($$);
|
|
@@ -963,6 +963,9 @@ TagID: foreach $tagID (@keys) {
|
|
|
963
963
|
if ($$tagInfo{List} and $$tagInfo{List} !~ /^(1|Alt|Bag|Seq|array|string)$/) {
|
|
964
964
|
warn "Warning: Unknown List type ($$tagInfo{List}) for $name in $tableName\n";
|
|
965
965
|
}
|
|
966
|
+
if ($$tagInfo{Hook} and $$tagInfo{Unknown}) {
|
|
967
|
+
warn "Warning: Unknown tag with Hook - $short $name\n"
|
|
968
|
+
}
|
|
966
969
|
# accumulate information for consistency check of BinaryData tables
|
|
967
970
|
if ($processBinaryData and $$table{WRITABLE}) {
|
|
968
971
|
# can't currently write tag if Condition accesses $valPt
|
|
@@ -16,7 +16,7 @@ use vars qw($VERSION);
|
|
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
17
17
|
use Image::ExifTool::JSON;
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.04';
|
|
20
20
|
|
|
21
21
|
sub ProcessCBOR($$$);
|
|
22
22
|
sub ReadCBORValue($$$$);
|
|
@@ -207,6 +207,7 @@ sub ReadCBORValue($$$$)
|
|
|
207
207
|
# read next value (note: in the case of multiple tags,
|
|
208
208
|
# this nesting will apply the tags in the correct order)
|
|
209
209
|
($val, $err, $pos) = ReadCBORValue($et, $dataPt, $pos, $end);
|
|
210
|
+
return(undef, $err, $pos) if $err;
|
|
210
211
|
$dumpStart = $pos;
|
|
211
212
|
# convert some values according to the optional tag number (untested)
|
|
212
213
|
if ($num == 0 and not ref $val) { # date/time string
|
|
@@ -6166,6 +6166,11 @@ my %ciMaxFocal = (
|
|
|
6166
6166
|
SeparateTable => 'UserDefStyle',
|
|
6167
6167
|
PrintConv => \%userDefStyles,
|
|
6168
6168
|
},
|
|
6169
|
+
# location of time stamp (github400)
|
|
6170
|
+
# 0x00ec - 1000D firmware 1.0.7, 40D firmware 1.0.8
|
|
6171
|
+
# 0x01b4 - 5D II firmware 1.0.6 and 1.1.0
|
|
6172
|
+
# 0x01b8 - 5D II firmware 2.1.2
|
|
6173
|
+
# 0x01bc - 7D firmware 2.0.3
|
|
6169
6174
|
);
|
|
6170
6175
|
|
|
6171
6176
|
# Picture Style information for the 60D, etc (ref 48)
|
|
@@ -6345,6 +6350,8 @@ my %ciMaxFocal = (
|
|
|
6345
6350
|
SeparateTable => 'UserDefStyle',
|
|
6346
6351
|
PrintConv => \%userDefStyles,
|
|
6347
6352
|
},
|
|
6353
|
+
# location of time stamp (github400)
|
|
6354
|
+
# 0x01d0 - 6D firmware 1.1.6, 1D X firmware 2.1.0
|
|
6348
6355
|
);
|
|
6349
6356
|
|
|
6350
6357
|
# Movie information (MakerNotes tag 0x11) (ref PH)
|
|
@@ -6178,9 +6178,7 @@ sub NextOffsetName($;$)
|
|
|
6178
6178
|
|
|
6179
6179
|
#------------------------------------------------------------------------------
|
|
6180
6180
|
# Process EXIF directory
|
|
6181
|
-
# Inputs: 0) ExifTool
|
|
6182
|
-
# 1) Reference to directory information hash
|
|
6183
|
-
# 2) Pointer to tag table for this directory
|
|
6181
|
+
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
|
6184
6182
|
# Returns: 1 on success, otherwise returns 0 and sets a Warning
|
|
6185
6183
|
sub ProcessExif($$$)
|
|
6186
6184
|
{
|