exiftool_vendored 13.40.0 → 13.41.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9dfd10c8fad46a346537837a7eb4d95f6abf124bb6b3a9ca65479e447b6f4bac
4
- data.tar.gz: 9ac3a94f1fa80f10cab26c6c595499b32431e39e1fa31d33255a45454b2c1465
3
+ metadata.gz: 2b44cbb111004a5ad11908f51cc4df6fdb3408e89fe85601272c4a842be84530
4
+ data.tar.gz: 9fb67bb8d2dc211216e00bfc588ea0da0eead4ca9580feeb4b8dd8a92b7fbec6
5
5
  SHA512:
6
- metadata.gz: 064efdbb744ee1a1e25c1df084286c86ecf791c85479e95d73c10b5aad589b2355068a19e1757ebc88bd26349af0550750b1c48cc0e945e833ac392583642559
7
- data.tar.gz: 6e5d5cec5577836228ab18975639d2b7e2d27cd1a161bae004ebdb472ec7f1e669155589e2e0fb83873bf7a1bc3c592df6196e98afb7cc872b676b70564c3fea
6
+ metadata.gz: f572f1cc80a9d132fce1708b51c4f644518df142874e852cf26ff828d8f3840ad9bd130a7d788690d9a682ecd38d703ce732940ee3147bc712094c92928c6714
7
+ data.tar.gz: 87ba2fe582b1808334ad6e0a8581eef8153a91c50cad28f9374cd2aee6507aa6c07d0ea0a74769f2e8a87f5f2feca5f5767967d2ca200e2f5b7469fb4e1ab94a
data/bin/Changes CHANGED
@@ -7,13 +7,32 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 13.36. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Nov. 5, 2025 - Version 13.41
11
+
12
+ - Added a new Canon LensType
13
+ - Added Extra MakerNoteByteOrder tag
14
+ - Added byte-order indication to the -v3 output for EXIF and BinaryData
15
+ directories
16
+ - Added a new Panasonic/Olympus LensType (github #363)
17
+ - Added a new ProfileCMMType value (thanks Herb)
18
+ - Extract EnvironmentTarget from LNK files (github #362)
19
+ - Extract HighlightMarkers from DJI videos
20
+ - Decode another Red tag
21
+ - Recognize LRF file extension
22
+ - Updated CanonColorData decoding for the R50V
23
+ - Enhanced -csv= and -json= database import options to support full
24
+ redirection and advanced formatting expressions
25
+ - Require tags to be specified after the corresponding -csv= or -json= option
26
+ when importing specific tags from a database
27
+ - Fixed problem reading R3D images from the Red Komodo
28
+
10
29
  Oct. 24, 2025 - Version 13.40
11
30
 
12
31
  - Added read support for WOFF and WOFF2 font files (github #358)
13
32
  - Added read support for Windows .URL files
14
33
  - Added new XMP-iptcExt generative AI tags (thanks IPTC)
15
34
  - Added config_files/local_time.config to the full distribution
16
- - Enhanced CSV import allow SourceFile entries with a different case
35
+ - Enhanced CSV import to allow SourceFile entries with a different case
17
36
 
18
37
  Oct. 15, 2025 - Version 13.39
19
38
 
data/bin/META.json CHANGED
@@ -50,6 +50,6 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "13.40",
53
+ "version" : "13.41",
54
54
  "x_serialization_backend" : "JSON::PP version 4.06"
55
55
  }
data/bin/META.yml CHANGED
@@ -31,5 +31,5 @@ recommends:
31
31
  Time::HiRes: '0'
32
32
  requires:
33
33
  perl: '5.004'
34
- version: '13.40'
34
+ version: '13.41'
35
35
  x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
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.40.tar.gz | tar -xf -
115
- cd Image-ExifTool-13.40
114
+ gzip -dc Image-ExifTool-13.41.tar.gz | tar -xf -
115
+ cd Image-ExifTool-13.41
116
116
  ./exiftool t/images/ExifTool.jpg
117
117
 
118
118
  Note: These commands extract meta information from one of the test images.
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.40';
14
+ my $version = '13.41';
15
15
 
16
16
  $^W = 1; # enable global warnings
17
17
 
@@ -97,6 +97,7 @@ END {
97
97
  # declare all static file-scope variables
98
98
  my @commonArgs; # arguments common to all commands
99
99
  my @condition; # conditional processing of files
100
+ my @csvExclude; # list of tags excluded from CSV import
100
101
  my @csvFiles; # list of files when reading with CSV option (in ExifTool Charset)
101
102
  my @csvTags; # order of tags for first file with CSV option (lower case)
102
103
  my @delFiles; # list of files to delete
@@ -441,6 +442,7 @@ if ($stayOpen >= 2) {
441
442
  # (not done: @commonArgs, @moreArgs, $critical, $binaryStdout, $helped,
442
443
  # $interrupted, $mt, $pause, $rtnValApp, $rtnValPrev, $stayOpen, $stayOpenBuff, $stayOpenFile)
443
444
  undef @condition;
445
+ undef @csvExclude;
444
446
  undef @csvFiles;
445
447
  undef @csvTags;
446
448
  undef @delFiles;
@@ -578,6 +580,7 @@ my $escapeXML; # flag to escape printed values for xml
578
580
  my $setTagsFile; # filename for last TagsFromFile option
579
581
  my $sortOpt; # sort option is used
580
582
  my $srcStdin; # one of the source files is STDIN
583
+ my $tagsFrom = ''; # tags on command line come from 'csv' or 'file'
581
584
  my $useMWG; # flag set if we are using any MWG tag
582
585
 
583
586
  my ($argsLeft, @nextPass, $badCmd);
@@ -812,6 +815,7 @@ for (;;) {
812
815
  }
813
816
  # create necessary lists, etc for this new -tagsFromFile file
814
817
  AddSetTagsFile($setTagsFile, { Replace => ($1 and lc($1) eq 'add') ? 0 : 1 } );
818
+ $tagsFrom = 'file';
815
819
  next;
816
820
  }
817
821
  if ($a eq '@') {
@@ -927,6 +931,7 @@ for (;;) {
927
931
  if ($csvFile) {
928
932
  push @newValues, { SaveCount => ++$saveCount }; # marker to save new values now
929
933
  $csvSaveCount = $saveCount;
934
+ $tagsFrom = 'csv';
930
935
  }
931
936
  next;
932
937
  }
@@ -1117,6 +1122,7 @@ for (;;) {
1117
1122
  push @nextPass, "-$_";
1118
1123
  push @newValues, { SaveCount => ++$saveCount }; # marker to save new values now
1119
1124
  $csvSaveCount = $saveCount;
1125
+ $tagsFrom = 'csv';
1120
1126
  next;
1121
1127
  }
1122
1128
  my $jsonFile = $2;
@@ -1365,10 +1371,12 @@ for (;;) {
1365
1371
  my $tag = shift;
1366
1372
  defined $tag or Error("Expecting tag name for -x option\n"), $badCmd=1, next;
1367
1373
  $tag =~ s/\ball\b/\*/ig; # replace 'all' with '*' in tag names
1368
- if ($setTagsFile) {
1369
- push @{$setTags{$setTagsFile}}, "-$tag";
1370
- } else {
1374
+ if (not $tagsFrom) {
1371
1375
  push @exclude, $tag;
1376
+ } elsif ($tagsFrom eq 'csv') {
1377
+ push @csvExclude, $tag;
1378
+ } else {
1379
+ push @{$setTags{$setTagsFile}}, "-$tag";
1372
1380
  }
1373
1381
  next;
1374
1382
  }
@@ -1411,9 +1419,15 @@ for (;;) {
1411
1419
  }
1412
1420
  } else {
1413
1421
  # assume '-tagsFromFile @' if tags are being redirected
1414
- # and -tagsFromFile hasn't already been specified
1415
- AddSetTagsFile($setTagsFile = '@') if not $setTagsFile and /(<|>)/;
1416
- if ($setTagsFile) {
1422
+ # and not from CSV and -tagsFromFile hasn't already been specified
1423
+ if (not $setTagsFile and $tagsFrom ne 'csv' and /(<|>)/) {
1424
+ AddSetTagsFile($setTagsFile = '@');
1425
+ $tagsFrom = 'file';
1426
+ }
1427
+ if ($tagsFrom eq 'csv') {
1428
+ my $lst = s/^-// ? \@csvExclude : \@tags;
1429
+ push @$lst, $_;
1430
+ } elsif ($setTagsFile) {
1417
1431
  push @{$setTags{$setTagsFile}}, $_;
1418
1432
  if ($1 eq '>') {
1419
1433
  $useMWG = 1 if /^(.*>\s*)?([-_0-9A-Z]+:)*1?mwg:/si;
@@ -1794,11 +1808,9 @@ if (@newValues) {
1794
1808
  $wrn and Warning($mt, $wrn);
1795
1809
  }
1796
1810
  # exclude specified tags
1797
- unless ($csv) {
1798
- foreach (@exclude) {
1799
- $mt->SetNewValue($_, undef, Replace => 2);
1800
- $needSave = 1;
1801
- }
1811
+ foreach (@exclude) {
1812
+ $mt->SetNewValue($_, undef, Replace => 2);
1813
+ $needSave = 1;
1802
1814
  }
1803
1815
  unless ($isWriting or $outOpt or @tags) {
1804
1816
  Error "Nothing to do.\n";
@@ -3250,7 +3262,7 @@ sub SetImageInfo($$$)
3250
3262
  next;
3251
3263
  } elsif (ref $dyFile eq 'SCALAR') {
3252
3264
  # set new values from CSV or JSON database
3253
- my ($f, $found, $csvTag, $tryTag, $tg);
3265
+ my ($f, $found, $csvTag, $tg, $csvExifTool);
3254
3266
  undef $evalWarning;
3255
3267
  local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] };
3256
3268
  # force UTF-8 if the database was JSON
@@ -3278,39 +3290,51 @@ sub SetImageInfo($$$)
3278
3290
  if ($verbose) {
3279
3291
  print $vout "Setting new values from $csv database\n";
3280
3292
  print $vout 'Including tags: ',join(' ',@tags),"\n" if @tags;
3281
- print $vout 'Excluding tags: ',join(' ',@exclude),"\n" if @exclude;
3293
+ print $vout 'Excluding tags: ',join(' ',@csvExclude),"\n" if @csvExclude;
3282
3294
  }
3283
- my @tryTags = (@exclude, @tags); # (exclude first because it takes priority)
3284
- foreach (@tryTags) {
3295
+ if (@tags) {
3296
+ # prepare a dummy ExifTool object to hold appropriate tags from the database
3297
+ $csvExifTool = Image::ExifTool->new unless $csvExifTool;
3298
+ foreach $csvTag (OrderedKeys($csvInfo)) {
3299
+ next if $csvTag =~ /^([-_0-9A-Z]+:)*(SourceFile|Directory|FileName)$/i;
3300
+ my @grps = split /:/, $csvTag;
3301
+ my $name = pop @grps;
3302
+ unshift @grps, 'Unknown' while @grps < 2;
3303
+ $csvExifTool->FoundTag($name, $$csvInfo{$csvTag}, @grps);
3304
+ }
3305
+ next;
3306
+ }
3307
+ my @exclTags = @csvExclude;
3308
+ foreach (@exclTags) {
3285
3309
  tr/-0-9a-zA-Z_:#?*//dc; # remove illegal characters
3286
3310
  s/(^|:)(all:)+/$1/ig; # remove 'all' group names
3287
3311
  s/(^|:)all(#?)$/$1*$2/i; # convert 'all' tag name to '*'
3288
3312
  tr/?/./; s/\*/.*/g; # convert wildcards for regex
3289
3313
  }
3314
+ # run through tags in database order
3290
3315
  foreach $csvTag (OrderedKeys($csvInfo)) {
3291
3316
  # don't write SourceFile, Directory or FileName
3292
3317
  next if $csvTag =~ /^([-_0-9A-Z]+:)*(SourceFile|Directory|FileName)$/i;
3293
- if (@tryTags) {
3294
- my ($i, $tryGrp, $matched);
3295
- TryMatch: for ($i=0; $i<@tryTags; ++$i) {
3296
- $tryTag = $tryTags[$i];
3297
- if ($tryTag =~ /:/) {
3318
+ if (@exclTags) {
3319
+ my ($exclTag, $exclGrp, $excluded);
3320
+ ExclMatch: foreach $exclTag (@exclTags) {
3321
+ if ($exclTag =~ /:/) {
3298
3322
  next unless $csvTag =~ /:/; # db entry must also specify group
3299
3323
  my @csvGrps = split /:/, $csvTag;
3300
- my @tryGrps = split /:/, $tryTag;
3301
- my $tryName = pop @tryGrps;
3302
- next unless pop(@csvGrps) =~ /^$tryName$/i; # tag name must match
3303
- foreach $tryGrp (@tryGrps) {
3324
+ my @exclGrps = split /:/, $exclTag;
3325
+ my $exclName = pop @exclGrps;
3326
+ next unless pop(@csvGrps) =~ /^$exclName$/i; # tag name must match
3327
+ foreach $exclGrp (@exclGrps) {
3304
3328
  # each specified group name must match db entry
3305
- next TryMatch unless grep /^$tryGrp$/i, @csvGrps;
3329
+ next ExclMatch unless grep /^$exclGrp$/i, @csvGrps;
3306
3330
  }
3307
- $matched = 1;
3331
+ $excluded = 1;
3308
3332
  last;
3309
3333
  }
3310
3334
  # no group specified, so match by tag name only
3311
- $csvTag =~ /^([-_0-9A-Z]+:)*$tryTag$/i and $matched = 1, last;
3335
+ $csvTag =~ /^([-_0-9A-Z]+:)*$exclTag$/i and $excluded = 1, last;
3312
3336
  }
3313
- next if $matched ? $i < @exclude : @tags;
3337
+ next if $excluded;
3314
3338
  }
3315
3339
  my ($rtn, $wrn) = $et->SetNewValue($csvTag, $$csvInfo{$csvTag},
3316
3340
  Protected => 1, AddValue => $csvAdd,
@@ -3318,6 +3342,11 @@ TryMatch: for ($i=0; $i<@tryTags; ++$i) {
3318
3342
  $wrn and Warn "$wrn\n" if $verbose;
3319
3343
  }
3320
3344
  }
3345
+ # set specified tags now
3346
+ if ($csvExifTool) {
3347
+ my @excl = map "-$_", @csvExclude; # add back leading dashes
3348
+ $et->SetNewValuesFromFile($csvExifTool, @tags, @excl);
3349
+ }
3321
3350
  $et->Options(Charset => $old) if $csv eq 'JSON';
3322
3351
  unless ($found) {
3323
3352
  Warn("No SourceFile '${file}' in imported $csv database\n");
@@ -5758,10 +5787,13 @@ if this API option was used). Multiple databases may be imported in a
5758
5787
  single command.
5759
5788
 
5760
5789
  Specific tags may be imported from the CSV database by adding B<->I<TAG>
5761
- options to the command, or excluded with B<-->I<TAG>, with exclusions taking
5762
- priority. Group names and wildcards are allowed. If no tags are specified,
5763
- then all except FileName and Directory are used. Tags are imported in the
5764
- same order as the database entries.
5790
+ options to the command after B<-csv=>I<CSVFILE>, or excluded with
5791
+ B<-->I<TAG>, with exclusions taking priority. Group names and wildcards are
5792
+ allowed, and tags from the CSV may be redirected and written to different
5793
+ tags in the target file with support for advanced-formatting expressions
5794
+ using the same syntax as the B<-tagsFromFile> feature. If no tags are
5795
+ specified, then all tags except FileName, Directory and excluded tags are
5796
+ imported (in the same order as the database entries).
5765
5797
 
5766
5798
  When exporting a CSV file, the B<-g> or B<-G> option adds group names to the
5767
5799
  tag headings. If the B<-a> option is used to allow duplicate tag names, the
@@ -5951,10 +5983,13 @@ compatible, and use B<-G> instead of B<-g>). Additionally, tag names in the
5951
5983
  input JSON file may be suffixed with a C<#> to disable print conversion.
5952
5984
 
5953
5985
  Specific tags may be imported from the JSON database by adding B<->I<TAG>
5954
- options to the command, or excluded with B<-->I<TAG>, with exclusions taking
5955
- priority. Group names and wildcards are allowed. If no tags are specified,
5956
- then all except FileName and Directory are used. Tags are imported in the
5957
- same order as the database entries.
5986
+ options to the command after B<-j=>I<JSONFILE>, or excluded with
5987
+ B<-->I<TAG>, with exclusions taking priority. Group names and wildcards are
5988
+ allowed, and tags from JSON may be redirected and written to different tags
5989
+ in the target file with support for advanced-formatting expressions using
5990
+ the same syntax as the B<-tagsFromFile> feature. If no tags are specified,
5991
+ then all tags except FileName, Directory and excluded tags are imported (in
5992
+ the same order as the database entries).
5958
5993
 
5959
5994
  Unlike CSV import, empty values are not ignored, and will cause an empty
5960
5995
  value to be written if supported by the specific metadata type. Tags are
@@ -6095,7 +6130,7 @@ with this command:
6095
6130
 
6096
6131
  produces output like this:
6097
6132
 
6098
- -- Generated by ExifTool 13.40 --
6133
+ -- Generated by ExifTool 13.41 --
6099
6134
  File: a.jpg - 2003:10:31 15:44:19
6100
6135
  (f/5.6, 1/60s, ISO 100)
6101
6136
  File: b.jpg - 2006:05:23 11:57:38
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.97';
91
+ $VERSION = '4.98';
92
92
 
93
93
  # Note: Removed 'USM' from 'L' lenses since it is redundant - PH
94
94
  # (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -562,6 +562,7 @@ $VERSION = '4.97';
562
562
  4160 => 'Canon EF-S 35mm f/2.8 Macro IS STM', #42
563
563
  4208 => 'Sigma 56mm f/1.4 DC DN | C or other Sigma Lens', #forum10603
564
564
  4208.1 => 'Sigma 30mm F1.4 DC DN | C', #github#83 (016)
565
+ 4976 => 'Sigma 16-300mm F3.5-6.7 DC OS | C (025)', #50
565
566
  6512 => 'Sigma 12mm F1.4 DC | C', #github#352 (025)
566
567
  # (Nano USM lenses - 0x90xx)
567
568
  36910 => 'Canon EF 70-300mm f/4-5.6 IS II USM', #42
@@ -1995,12 +1996,12 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
1995
1996
  SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData10' },
1996
1997
  },
1997
1998
  { # (int16u[3973]) - R3 ref IB
1998
- Condition => '$count == 3973 or $count == 3778',
1999
+ Condition => '($count == 3973 or $count == 3778) and $$valPt !~ /^\x41\0/',
1999
2000
  Name => 'ColorData11',
2000
2001
  SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData11' },
2001
2002
  },
2002
- { # (int16u[4528]) - R1/R5mkII ref forum16406
2003
- Condition => '$count == 4528',
2003
+ { # (int16u[4528]) - R1/R5mkII (4528) ref forum16406, R50V (3778) ref PH
2004
+ Condition => '$count == 4528 or $count == 3778',
2004
2005
  Name => 'ColorData12',
2005
2006
  SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData12' },
2006
2007
  },
@@ -8321,8 +8322,8 @@ my %ciMaxFocal = (
8321
8322
  RawConv => '$$self{ColorDataVersion} = $val',
8322
8323
  PrintConv => {
8323
8324
  16 => '16 (M50)',
8324
- 17 => '17 (EOS R)', # (and PowerShot SX740HS)
8325
- 18 => '18 (EOS RP/250D)', # (and PowerShot SX70HS)
8325
+ 17 => '17 (R)', # (and PowerShot SX740HS)
8326
+ 18 => '18 (RP/250D)', # (and PowerShot SX70HS)
8326
8327
  19 => '19 (90D/850D/M6mkII/M200)',# (and PowerShot G7XmkIII)
8327
8328
  },
8328
8329
  },
@@ -8553,10 +8554,10 @@ my %ciMaxFocal = (
8553
8554
  },
8554
8555
  );
8555
8556
 
8556
- # Color data (MakerNotes tag 0x4001, count=3973, ref IB)
8557
+ # Color data (MakerNotes tag 0x4001, count=3973/3778, ref IB)
8557
8558
  %Image::ExifTool::Canon::ColorData11 = (
8558
8559
  %binaryDataAttrs,
8559
- NOTES => 'These tags are used by the EOS R3, R7 and R6mkII',
8560
+ NOTES => 'These tags are used by the EOS R3, R7, R50 and R6mkII',
8560
8561
  FORMAT => 'int16s',
8561
8562
  FIRST_ENTRY => 0,
8562
8563
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
@@ -8568,7 +8569,7 @@ my %ciMaxFocal = (
8568
8569
  RawConv => '$$self{ColorDataVersion} = $val',
8569
8570
  PrintConv => {
8570
8571
  34 => '34 (R3)', #IB
8571
- 48 => '48 (R7, R10, R6 Mark II)', #IB
8572
+ 48 => '48 (R7/R10/R50/R6mkII)', #IB
8572
8573
  },
8573
8574
  },
8574
8575
  0x69 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
@@ -8673,10 +8674,10 @@ my %ciMaxFocal = (
8673
8674
  },
8674
8675
  );
8675
8676
 
8676
- # Color data (MakerNotes tag 0x4001, count=4528, ref PH)
8677
+ # Color data (MakerNotes tag 0x4001, count=4528/3778, ref PH)
8677
8678
  %Image::ExifTool::Canon::ColorData12 = (
8678
8679
  %binaryDataAttrs,
8679
- NOTES => 'These tags are used by the EOS R1 and R5mkII',
8680
+ NOTES => 'These tags are used by the EOS R1, R5mkII and R50V',
8680
8681
  FORMAT => 'int16s',
8681
8682
  FIRST_ENTRY => 0,
8682
8683
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
@@ -8687,7 +8688,8 @@ my %ciMaxFocal = (
8687
8688
  DataMember => 'ColorDataVersion',
8688
8689
  RawConv => '$$self{ColorDataVersion} = $val',
8689
8690
  PrintConv => {
8690
- 64 => '64 (R1, R5 Mark II)',
8691
+ 64 => '64 (R1/R5mkII)',
8692
+ 65 => '65 (R50V)',
8691
8693
  },
8692
8694
  },
8693
8695
  0x69 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' }, # (NC)
@@ -8778,6 +8780,7 @@ my %ciMaxFocal = (
8778
8780
  Name => 'PerChannelBlackLevel',
8779
8781
  Format => 'int16u[4]',
8780
8782
  },
8783
+ # 0x290 - PerChannelBlackLevel again
8781
8784
  0x294 => {
8782
8785
  Name => 'NormalWhiteLevel',
8783
8786
  Format => 'int16u',
@@ -57,7 +57,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
57
57
  use Image::ExifTool qw(:DataAccess :Utils);
58
58
  use Image::ExifTool::MakerNotes;
59
59
 
60
- $VERSION = '4.60';
60
+ $VERSION = '4.61';
61
61
 
62
62
  sub ProcessExif($$$);
63
63
  sub WriteExif($$$);
@@ -6191,10 +6191,15 @@ sub ProcessExif($$$)
6191
6191
  my $isExif = ($tagTablePtr eq \%Image::ExifTool::Exif::Main);
6192
6192
 
6193
6193
  # warn for incorrect maker notes in CR3 files
6194
- if ($$dirInfo{DirName} eq 'MakerNotes' and $$et{FileType} eq 'CR3' and
6195
- $$dirInfo{Parent} and $$dirInfo{Parent} eq 'ExifIFD')
6196
- {
6197
- $et->Warn("MakerNotes shouldn't exist ExifIFD of CR3 image", 1);
6194
+ if ($dirName eq 'MakerNotes') {
6195
+ if ($$et{FileType} eq 'CR3' and $$dirInfo{Parent} and $$dirInfo{Parent} eq 'ExifIFD') {
6196
+ $et->Warn("MakerNotes shouldn't exist ExifIFD of CR3 image", 1);
6197
+ }
6198
+ if ($$dirInfo{TagInfo} and $$dirInfo{TagInfo}{MakerNotes} and
6199
+ $$et{ExifByteOrder} and $$et{ExifByteOrder} ne GetByteOrder())
6200
+ {
6201
+ $et->FoundTag(MakerNoteByteOrder => GetByteOrder());
6202
+ }
6198
6203
  }
6199
6204
  # set flag to calculate image data hash if requested
6200
6205
  $doHash = 1 if $$et{ImageDataHash} and (($$et{FILE_TYPE} eq 'TIFF' and not $base and not $inMakerNotes) or
@@ -6281,7 +6286,7 @@ sub ProcessExif($$$)
6281
6286
  $dirSize = 2 + 12 * $numEntries;
6282
6287
  $dirEnd = $dirStart + $dirSize;
6283
6288
  }
6284
- $verbose > 0 and $et->VerboseDir($dirName, $numEntries);
6289
+ $verbose > 0 and $et->VerboseDir($dirName, $numEntries, undef, GetByteOrder());
6285
6290
  my $bytesFromEnd = $dataLen - $dirEnd;
6286
6291
  if ($bytesFromEnd < 4) {
6287
6292
  unless ($bytesFromEnd==2 or $bytesFromEnd==0) {
@@ -184,7 +184,7 @@ my %ttCharset = (
184
184
  Custom => { },
185
185
  );
186
186
 
187
- # codes for the 63 known WOFF2 tags
187
+ # the 63 known WOFF2 tags
188
188
  my @knownTags = (
189
189
  'cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt',
190
190
  'fpgm', 'glyf', 'loca', 'prep', 'CFF', 'VORG', 'EBDT', 'EBLC', 'gasp',
@@ -891,9 +891,8 @@ This module is used by Image::ExifTool
891
891
 
892
892
  This module contains the routines required by Image::ExifTool to read meta
893
893
  information from various format font files. Currently recognized font file
894
- types are OTF, TTF, TTC, DFONT, PFA, PFB, PFM, AFM, ACFM and AMFM. As well,
895
- WOFF and WOFF2 font files are identified, but metadata is not currently
896
- extracted from these formats.
894
+ types are OTF, TTF, TTC, DFONT, PFA, PFB, PFM, AFM, ACFM, AMFM, WOFF and
895
+ WOFF2.
897
896
 
898
897
  =head1 AUTHOR
899
898
 
@@ -26,7 +26,7 @@ use strict;
26
26
  use vars qw($VERSION);
27
27
  use Image::ExifTool qw(:DataAccess :Utils);
28
28
 
29
- $VERSION = '1.41';
29
+ $VERSION = '1.42';
30
30
 
31
31
  sub ProcessICC($$);
32
32
  sub ProcessICC_Profile($$$);
@@ -330,6 +330,7 @@ my %manuSig = ( #6
330
330
  'WTG2' => 'Ware To Go',
331
331
  'WYSE' => 'WYSE Technology',
332
332
  'XERX' => 'Xerox Corporation',
333
+ 'XM ' => 'Xiaomi',
333
334
  'XRIT' => 'X-Rite',
334
335
  'yxym' => 'YxyMaster GmbH',
335
336
  'Z123' => "Lavanya's test Company",
@@ -18,7 +18,7 @@ use vars qw($VERSION);
18
18
  use Image::ExifTool qw(:DataAccess :Utils);
19
19
  use Image::ExifTool::Microsoft;
20
20
 
21
- $VERSION = '1.12';
21
+ $VERSION = '1.13';
22
22
 
23
23
  sub ProcessItemID($$$);
24
24
  sub ProcessLinkInfo($$$);
@@ -191,7 +191,7 @@ sub ProcessLinkInfo($$$);
191
191
  },
192
192
  0xa0000001 => {
193
193
  Name => 'EnvVarData',
194
- SubDirectory => { TagTable => 'Image::ExifTool::LNK::UnknownData' },
194
+ SubDirectory => { TagTable => 'Image::ExifTool::LNK::EnvVarData' },
195
195
  },
196
196
  0xa0000002 => {
197
197
  Name => 'ConsoleData',
@@ -448,6 +448,19 @@ sub ProcessLinkInfo($$$);
448
448
  },
449
449
  );
450
450
 
451
+ %Image::ExifTool::LNK::EnvVarData = (
452
+ PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
453
+ GROUPS => { 2 => 'Other' },
454
+ 8 => {
455
+ Name => 'EnvironmentTarget',
456
+ Format => 'string[260]',
457
+ },
458
+ 268 => {
459
+ Name => 'EnvironmentTargetUnicode',
460
+ Format => 'unicode[260]',
461
+ },
462
+ );
463
+
451
464
  %Image::ExifTool::LNK::INI = (
452
465
  GROUPS => { 2 => 'Document' },
453
466
  VARS => { ID_FMT => 'none' },
@@ -42,7 +42,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
42
42
  use Image::ExifTool::Exif;
43
43
  use Image::ExifTool::APP12;
44
44
 
45
- $VERSION = '2.92';
45
+ $VERSION = '2.93';
46
46
 
47
47
  sub PrintLensInfo($$$);
48
48
 
@@ -201,8 +201,9 @@ my %olympusLensTypes = (
201
201
  # '65535 07 40' - Seen for LUMIX S 16-35/F4 on Panasonic DC-S1H (ref PH)
202
202
  # Other makes
203
203
  '24 01 10' => 'Venus Optics Laowa 50mm F2.8 2x Macro', #DonKomarechka
204
- 'f7 03 10' => 'LAOWA C&D-Dreamer MFT 7.5mm F2.0', #forum3833
205
- 'f7 10 10' => 'LAOWA C&D-Dreamer MFT 6.0mm F2.0', #KG
204
+ '247 03 10' => 'LAOWA C&D-Dreamer MFT 7.5mm F2.0', #forum3833
205
+ '247 10 10' => 'LAOWA C&D-Dreamer MFT 6.0mm F2.0', #KG
206
+ '65522 02 10' => 'Xiaoyi 42.5mm F1.8', #github363
206
207
  );
207
208
 
208
209
  # lookup for Olympus camera types (ref PH)
@@ -49,7 +49,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
49
49
  use Image::ExifTool::Exif;
50
50
  use Image::ExifTool::GPS;
51
51
 
52
- $VERSION = '3.22';
52
+ $VERSION = '3.23';
53
53
 
54
54
  sub ProcessMOV($$;$);
55
55
  sub ProcessKeys($$$);
@@ -578,11 +578,29 @@ my %userDefined = (
578
578
  return substr($val, 8, $len-8);
579
579
  },
580
580
  Binary => 1,
581
+ },{
582
+ Name => 'HighlightMarkers',
583
+ # (DJI Action 4, forum17700)
584
+ Notes => 'written by some DJI models',
585
+ Condition => '$$valPt =~ /^data.{4}hglg.{5}/s',
586
+ RawConv => q{
587
+ my $len = unpack 'x4N', $val;
588
+ return undef if $len < 13 or $len + 4 > length($val);
589
+ my $n = int(($len - 13) / 5);
590
+ my @a = map $_/1000, unpack "x17(xV)$n", $val;
591
+ return \@a;
592
+ },
581
593
  },{
582
594
  Unknown => 1,
583
595
  Binary => 1,
584
596
  },
585
- # (also Samsung WB750 uncompressed thumbnail data starting with "SDIC\0")
597
+ # DJI videos also have block of offset/size of various atoms, eg)
598
+ # Atom name ???? Offset Size
599
+ # 0000: 63 6f 76 72 00 00 00 00 00 ed 6f da 00 0a 46 e0 [covr......o...F.]
600
+ # 0010: 73 6e 61 6c 00 00 00 00 00 f7 b6 d2 00 0a 46 e0 [snal..........F.]
601
+ # 0020: 68 67 6c 67 00 00 00 00 01 02 0a a2 00 00 00 21 [hglg...........!]
602
+ # 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
603
+ # (also Samsung WB750 uncompressed thumbnail data starting with "SDIC\0")
586
604
  ],
587
605
  # fre1 - 4 bytes: "june" (Kodak PixPro SP360)
588
606
  frea => {
@@ -14,7 +14,7 @@ use strict;
14
14
  use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
 
17
- $VERSION = '1.01';
17
+ $VERSION = '1.02';
18
18
 
19
19
  sub ProcessR3D($$);
20
20
 
@@ -45,7 +45,8 @@ my $errTrunc = 'Truncated R3D file';
45
45
  RED2 => { Name => 'Red2Header', SubDirectory => { TagTable => 'Image::ExifTool::Red::RED2' } },
46
46
 
47
47
  # (upper 4 bits of tag ID are the format code)
48
- # ---- format 1 ----
48
+ # ---- format 0 (int8u) ----
49
+ # ---- format 1 (string) ----
49
50
  0x1000 => 'StartEdgeCode', #1
50
51
  0x1001 => { Name => 'StartTimecode', Groups => { 2 => 'Time' } }, #1
51
52
  0x1002 => { #1
@@ -104,6 +105,7 @@ my $errTrunc = 'Truncated R3D file';
104
105
  # 0x1041 - seen 'NA'
105
106
  0x1042 => 'Revision', # ? (seen "TODO, rev EPIC-1.0" and "MYSTERIUM X, rev EPIC-1.0")
106
107
  # 0x1051 - seen 'C', 'L'
108
+ # 0x1052 - seen 'E9'
107
109
  0x1056 => 'OriginalFileName',
108
110
  0x106e => 'LensMake',
109
111
  0x106f => 'LensNumber', # (last 2 hex digits are LensType)
@@ -120,7 +122,8 @@ my $errTrunc = 'Truncated R3D file';
120
122
  0x1096 => 'Filter', # optical low-pass filter
121
123
  0x10a0 => 'Brain',
122
124
  0x10a1 => 'Sensor',
123
- # ---- format 2 ----
125
+ 0x10be => 'Quality',
126
+ # ---- format 2 (float) ----
124
127
  0x200d => 'ColorTemperature',
125
128
  # 0x200e - (sometimes this is frame rate)
126
129
  # 0x2015 - seen '1 1 1' (RGBGain or RGBGamma?)
@@ -130,7 +133,8 @@ my $errTrunc = 'Truncated R3D file';
130
133
  Groups => { 2 => 'Video' },
131
134
  PrintConv => 'int($val * 1000 + 0.5) / 1000',
132
135
  },
133
- # ---- format 4 ----
136
+ # ---- format 3 (int8u?) ----
137
+ # ---- format 4 (int16u) ----
134
138
  0x4037 => { Name => 'CropArea' }, # (NC)
135
139
  0x403b => 'ISO',
136
140
  # 0x404e - related to CropArea (or "0 0 0 0")
@@ -138,8 +142,12 @@ my $errTrunc = 'Truncated R3D file';
138
142
  0x406b => 'FocalLength',
139
143
  # 0x4084 - related to ISO?
140
144
  # 0x4087 - related to ISO?
141
- # ---- format 6 ----
145
+ # ---- format 5 (int8s?) ----
146
+ # ---- format 6 (int32s) ----
142
147
  0x606c => { Name => 'FocusDistance', ValueConv => '$val/1000', PrintConv => '"$val m"' },
148
+ # ---- format 7 (undef? structure?) ----
149
+ # ---- format 8 (int32u?) ----
150
+ # ---- format 9 (undef?) ----
143
151
  );
144
152
 
145
153
  # RED1 file header (ref PH)
@@ -240,9 +248,11 @@ sub ProcessR3D($$)
240
248
  $pos = 0x22; # directory starts at offset 0x22
241
249
  } else {
242
250
  # calculate position of Red directory start
243
- length($buff) < 0x41 and return $et->Warn($errTrunc);
244
- my $n = Get8u(\$buff, 0x40); # number of "rdi" records
245
- $pos = 0x44 + $n * 0x18;
251
+ $pos = 0x44;
252
+ length($buff) < $pos and return $et->Warn($errTrunc);
253
+ $pos += Get8u(\$buff, 0x40) * 0x18; # skip "rdi" records
254
+ $pos += Get8u(\$buff, 0x41) * 0x14; # skip "rda" records
255
+ $pos += Get8u(\$buff, 0x42) * 0x10; # skip "rdx" records
246
256
  }
247
257
  if ($pos + 8 > length $buff) {
248
258
  $dirLen = 0; # find directory the hard way
@@ -253,7 +263,7 @@ sub ProcessR3D($$)
253
263
  # do sanity check on the directory size (in case our assumptions were wrong)
254
264
  if ($dirLen < 300 or $dirLen >= 2048 or $pos + $dirLen > length $buff) {
255
265
  # tag 0x1000 with length 0x000f should be near the directory start
256
- $buff =~ /\0\x0f\x10\0/g or return $et->Warn("Can't find Red directory");
266
+ $buff =~ /\0\x0f\x10[\0\x06]/g or return $et->Warn("Can't find Red directory. Please submit sample for testing");
257
267
  $pos = pos($buff) - 4;
258
268
  $dirEnd = length $buff;
259
269
  undef $dirLen;
@@ -9475,6 +9475,8 @@ my %tagExists = (
9475
9475
  'entrypoint' => 1,
9476
9476
  'entrytype' => 1,
9477
9477
  'environmentmap' => 1,
9478
+ 'environmenttarget' => 1,
9479
+ 'environmenttargetunicode' => 1,
9478
9480
  'envvardata' => 1,
9479
9481
  'eppim' => 1,
9480
9482
  'eprint' => 1,
@@ -10143,6 +10145,7 @@ my %tagExists = (
10143
10145
  'highisomode' => 1,
10144
10146
  'highlightdata' => 1,
10145
10147
  'highlightendpoints' => 1,
10148
+ 'highlightmarkers' => 1,
10146
10149
  'highnote' => 1,
10147
10150
  'highvelocity' => 1,
10148
10151
  'hindsightsettings' => 1,
@@ -10827,6 +10830,7 @@ my %tagExists = (
10827
10830
  'maininfoifd' => 1,
10828
10831
  'makeandmodel' => 1,
10829
10832
  'makemodel' => 1,
10833
+ 'makernotebyteorder' => 1,
10830
10834
  'makernotepentax5a' => 1,
10831
10835
  'makernotepentax5b' => 1,
10832
10836
  'makernotepentax5c' => 1,
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
12
12
  =head1 TAG TABLES
13
13
 
14
14
  The tables listed below give the names of all tags recognized by ExifTool.
15
- They contain a total of 28853 tags, with 17925 unique tag names.
15
+ They contain a total of 28858 tags, with 17929 unique tag names.
16
16
 
17
17
  B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
18
18
  table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
@@ -9541,7 +9541,7 @@ These tags are used by the R5, R5 and EOS 1DXmkIII.
9541
9541
 
9542
9542
  =head3 Canon ColorData11 Tags
9543
9543
 
9544
- These tags are used by the EOS R3, R7 and R6mkII
9544
+ These tags are used by the EOS R3, R7, R50 and R6mkII
9545
9545
 
9546
9546
  Index2 Tag Name Writable
9547
9547
  ------ -------- --------
@@ -9630,7 +9630,7 @@ These tags are used by the EOS R3, R7 and R6mkII
9630
9630
 
9631
9631
  =head3 Canon ColorData12 Tags
9632
9632
 
9633
- These tags are used by the EOS R1 and R5mkII
9633
+ These tags are used by the EOS R1, R5mkII and R50V
9634
9634
 
9635
9635
  Index2 Tag Name Writable
9636
9636
  ------ -------- --------
@@ -30720,6 +30720,7 @@ for the official QuickTime specification.
30720
30720
  'free' KodakFree Kodak Free
30721
30721
  Pittasoft QuickTime Pittasoft
30722
30722
  ThumbnailImage no
30723
+ HighlightMarkers no
30723
30724
  Free? no
30724
30725
  'ftyp' FileType QuickTime FileType
30725
30726
  'gdat' GPSData QuickTime Stream
@@ -36442,6 +36443,7 @@ Tags extracted from Redcode R3D video files.
36442
36443
  0x1096 Filter no
36443
36444
  0x10a0 Brain no
36444
36445
  0x10a1 Sensor no
36446
+ 0x10be Quality no
36445
36447
  0x200d ColorTemperature no
36446
36448
  0x204b RGBCurves no
36447
36449
  0x2066 OriginalFrameRate no
@@ -40696,7 +40698,7 @@ Information extracted from MS Shell Link (Windows shortcut) files.
40696
40698
  0x30020 CommandLineArguments no
40697
40699
  0x30040 IconFileName no
40698
40700
  0xa0000000 UnknownData LNK UnknownData
40699
- 0xa0000001 EnvVarData LNK UnknownData
40701
+ 0xa0000001 EnvVarData LNK EnvVarData
40700
40702
  0xa0000002 ConsoleData LNK ConsoleData
40701
40703
  0xa0000003 TrackerData LNK TrackerData
40702
40704
  0xa0000004 ConsoleFEData LNK ConsoleFEData
@@ -40741,6 +40743,13 @@ Information extracted from MS Shell Link (Windows shortcut) files.
40741
40743
  ------ -------- --------
40742
40744
  [no tags known]
40743
40745
 
40746
+ =head3 LNK EnvVarData Tags
40747
+
40748
+ Index1 Tag Name Writable
40749
+ ------ -------- --------
40750
+ 8 EnvironmentTarget no
40751
+ 268 EnvironmentTargetUnicode no
40752
+
40744
40753
  =head3 LNK ConsoleData Tags
40745
40754
 
40746
40755
  Index1 Tag Name Writable
@@ -41690,6 +41699,7 @@ FileName.
41690
41699
  JPEGQualityEstimate File no
41691
41700
  JUMBF JUMBF no
41692
41701
  MIMEType File no
41702
+ MakerNoteByteOrder File no
41693
41703
  MaxVal File no
41694
41704
  NewGUID ExifTool no
41695
41705
  Now ExifTool no
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
29
29
  %jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
30
30
  %static_vars $advFmtSelf $configFile @configFiles $noConfig);
31
31
 
32
- $VERSION = '13.40';
32
+ $VERSION = '13.41';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -392,6 +392,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
392
392
  LFR => 'LFP', # (Light Field RAW)
393
393
  LIF => ['LIF', 'Leica Image File'],
394
394
  LNK => ['LNK', 'Windows shortcut'],
395
+ LRF => ['MOV', 'Low-Resolution video File'],
395
396
  LRI => ['LRI', 'Light RAW'],
396
397
  LRV => ['MOV', 'Low-Resolution Video'],
397
398
  M2T => 'M2TS',
@@ -1818,6 +1819,13 @@ my %systemTagsNotes = (
1818
1819
  MM => 'Big-endian (Motorola, MM)',
1819
1820
  },
1820
1821
  },
1822
+ MakerNoteByteOrder => {
1823
+ Notes => 'byte order of maker notes. Generated only if different from ExifByteOrder',
1824
+ PrintConv => {
1825
+ II => 'Little-endian (Intel, II)',
1826
+ MM => 'Big-endian (Motorola, MM)',
1827
+ },
1828
+ },
1821
1829
  ExifUnicodeByteOrder => {
1822
1830
  Writable => 1,
1823
1831
  WriteOnly => 1,
@@ -8626,6 +8634,7 @@ sub DoProcessTIFF($$;$)
8626
8634
  my $ifdName = ($$dirInfo{DirName} and $$dirInfo{DirName} =~ /^(ExifIFD|GPS)$/) ? $1 : 'IFD0';
8627
8635
  if (not $tagTablePtr or $$tagTablePtr{GROUPS}{0} eq 'EXIF') {
8628
8636
  $self->FoundTag('ExifByteOrder', $byteOrder) unless $outfile;
8637
+ $$self{ExifByteOrder} = $byteOrder;
8629
8638
  } elsif ($$tagTablePtr{GROUPS}{0} eq 'MakerNotes') { # (for writing CR3 maker notes)
8630
8639
  $ifdName = $$tagTablePtr{GROUPS}{0};
8631
8640
  } else {
@@ -9685,10 +9694,10 @@ sub VPrint($$@)
9685
9694
  # Print verbose directory information
9686
9695
  # Inputs: 0) ExifTool object reference, 1) directory name or dirInfo ref
9687
9696
  # 2) number of entries in directory (or 0 if unknown)
9688
- # 3) optional size of directory in bytes
9689
- sub VerboseDir($$;$$)
9697
+ # 3) optional size of directory in bytes, 4) optional byte order for -v3 output
9698
+ sub VerboseDir($$;$$$)
9690
9699
  {
9691
- my ($self, $name, $entries, $size) = @_;
9700
+ my ($self, $name, $entries, $size, $byteOrder) = @_;
9692
9701
  return unless $$self{OPTIONS}{Verbose};
9693
9702
  if (ref $name eq 'HASH') {
9694
9703
  $size = $$name{DirLen} unless $size;
@@ -9698,6 +9707,9 @@ sub VerboseDir($$;$$)
9698
9707
  my $out = $$self{OPTIONS}{TextOut};
9699
9708
  my $str = ($entries or defined $entries and not $size) ? " with $entries entries" : '';
9700
9709
  $str .= ", $size bytes" if $size;
9710
+ if ($byteOrder and $$self{OPTIONS}{Verbose} > 2) {
9711
+ $str .= ', ' . (GetByteOrder() eq 'II' ? 'Little-endian' : 'Big-endian');
9712
+ }
9701
9713
  print $out "$indent+ [$name directory$str]\n";
9702
9714
  }
9703
9715
 
@@ -9820,7 +9832,7 @@ sub ProcessBinaryData($$$)
9820
9832
  # extract known tags in numerical order
9821
9833
  @tags = sort { ($a < 0 ? $a + 1e9 : $a) <=> ($b < 0 ? $b + 1e9 : $b) } TagTableKeys($tagTablePtr);
9822
9834
  }
9823
- $self->VerboseDir('BinaryData', undef, $size) if $verbose;
9835
+ $self->VerboseDir('BinaryData', undef, $size, GetByteOrder()) if $verbose;
9824
9836
  # avoid creating unknown tags for tags that fail condition if Unknown is 1
9825
9837
  $$self{NO_UNKNOWN} = 1 if $unknown < 2;
9826
9838
  my ($index, %val);
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 13.40
3
+ Version: 13.41
4
4
  Release: 1
5
5
  License: Artistic/GPL
6
6
  Group: Development/Libraries/Perl
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ExiftoolVendored
4
- VERSION = Gem::Version.new('13.40.0')
4
+ VERSION = Gem::Version.new('13.41.0')
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exiftool_vendored
3
3
  version: !ruby/object:Gem::Version
4
- version: 13.40.0
4
+ version: 13.41.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew McEachen