exiftool-vendored.pl 12.96.0 → 12.97.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.
package/bin/Changes CHANGED
@@ -7,6 +7,19 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 12.76. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Sept. 25, 2024 - Version 12.97
11
+
12
+ - Added ability to ignore up to 4095 bytes of garbage at the end of an INDD
13
+ file with the -m option
14
+ - Added a new Canon RFLensType value (thanks Norbert Wasser)
15
+ - Added a new Nikon Z LensID
16
+ - Decode a number of new Nikon Z6_3 tags (thanks Warren Hatch)
17
+ - Decode a few more FujiFilm tags (thanks Greybeard)
18
+ - Enhanced %C format code to allow file-name collisions to be avoided by using
19
+ a colon instead of a decimal in the format modifier
20
+ - Fixed bug which could result in hang when using %C code in an output file
21
+ name
22
+
10
23
  Sept. 1, 2024 - Version 12.96
11
24
 
12
25
  - More improvements to handling of trailers on video files (and add ability to
package/bin/META.json CHANGED
@@ -50,5 +50,5 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "12.96"
53
+ "version" : "12.97"
54
54
  }
package/bin/META.yml CHANGED
@@ -31,4 +31,4 @@ recommends:
31
31
  Time::HiRes: '0'
32
32
  requires:
33
33
  perl: '5.004'
34
- version: '12.96'
34
+ version: '12.97'
package/bin/README CHANGED
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
109
109
  terminal window to extract and run ExifTool:
110
110
 
111
111
  cd ~/Desktop
112
- gzip -dc Image-ExifTool-12.96.tar.gz | tar -xf -
113
- cd Image-ExifTool-12.96
112
+ gzip -dc Image-ExifTool-12.97.tar.gz | tar -xf -
113
+ cd Image-ExifTool-12.97
114
114
  ./exiftool t/images/ExifTool.jpg
115
115
 
116
116
  Note: These commands extract meta information from one of the test images.
package/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '12.96';
14
+ my $version = '12.97';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  my $exePath;
@@ -4301,17 +4301,20 @@ sub Num2Alpha($)
4301
4301
  sub NextUnusedFilename($;$)
4302
4302
  {
4303
4303
  my ($fmt, $okfile) = @_;
4304
- return $fmt unless $fmt =~ /%[-+]?\d*\.?\d*[lun]?[cC]/;
4304
+ return $fmt unless $fmt =~ /%[-+]?\d*[.:]?\d*[lun]?[cC]/;
4305
4305
  my %sep = ( '-' => '-', '+' => '_' );
4306
4306
  my ($copy, $alpha) = (0, 'a');
4307
+ my $lastFile;
4307
4308
  for (;;) {
4308
4309
  my ($filename, $pos) = ('', 0);
4309
- while ($fmt =~ /(%([-+]?)(\d*)(\.?)(\d*)([lun]?)([cC]))/g) {
4310
+ while ($fmt =~ /(%([-+]?)(\d*)([.:]?)(\d*)([lun]?)([cC]))/g) {
4310
4311
  $filename .= substr($fmt, $pos, pos($fmt) - $pos - length($1));
4311
4312
  $pos = pos($fmt);
4312
4313
  my ($sign, $wid, $dec, $wid2, $mod, $tok) = ($2, $3 || 0, $4, $5 || 0, $6, $7);
4313
4314
  my $seq;
4314
4315
  if ($tok eq 'C') {
4316
+ # increment sequence number for %C on collision if ':' is used
4317
+ $sign eq '-' ? ++$seqFileDir : ++$seqFileNum if $copy and $dec eq ':';
4315
4318
  $seq = $wid + ($sign eq '-' ? $seqFileDir : $seqFileNum) - 1;
4316
4319
  $wid = $wid2;
4317
4320
  } else {
@@ -4340,6 +4343,8 @@ sub NextUnusedFilename($;$)
4340
4343
  my ($fn, $ok) = (AbsPath($filename), AbsPath($okfile));
4341
4344
  return $okfile if defined $fn and defined $ok and $fn eq $ok;
4342
4345
  }
4346
+ return $filename if defined $lastFile and $lastFile eq $filename;
4347
+ $lastFile = $filename;
4343
4348
  ++$copy;
4344
4349
  ++$alpha;
4345
4350
  }
@@ -4639,6 +4644,10 @@ sub PrintErrors($$$)
4639
4644
  return $$info{Error};
4640
4645
  }
4641
4646
 
4647
+ #=====================================================================================
4648
+ # NOTE: Be sure to update windows_exiftool.txt with any changes to this documentation!
4649
+ #vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
4650
+
4642
4651
  __END__
4643
4652
 
4644
4653
  =head1 NAME
@@ -5170,16 +5179,14 @@ B<-struct> option for details.
5170
5179
  E<quot>'-I<DSTTAG>E<lt>I<SRCTAG>'E<quot>) is not the same as interpolating
5171
5180
  its value inside a string (ie. E<quot>'-I<DSTTAG>E<lt>$I<SRCTAG>'E<quot>)
5172
5181
  for source tags which are list-type tags,
5173
- L<shortcut tags|Image::ExifTool::Shortcuts>, tag names containing wildcards,
5174
- or UserParam variables. When copying directly, the values of each matching
5175
- source tag are copied individually to the destination tag (as if they were
5176
- separate assignments). However, when interpolated inside a string, list
5177
- items and the values of shortcut tags are concatenated (with a separator set
5178
- by the B<-sep> option), and wildcards are not allowed. Also, UserParam
5179
- variables are available only when interpolated in a string. Another
5180
- difference is that a minor warning is generated if a tag doesn't exist when
5181
- interpolating its value in a string (with C<$>), but isn't when copying the
5182
- tag directly.
5182
+ L<shortcut tags|Image::ExifTool::Shortcuts>, or tag names containing
5183
+ wildcards. When copying directly, the values of each matching source tag
5184
+ are copied individually to the destination tag (as if they were separate
5185
+ assignments). However, when interpolated inside a string, list items and
5186
+ the values of shortcut tags are concatenated (with a separator set by the
5187
+ B<-sep> option), and wildcards are not allowed.Another difference is that a
5188
+ minor warning is generated if a tag doesn't exist when interpolating its
5189
+ value in a string (with C<$>), but isn't when copying the tag directly.
5183
5190
 
5184
5191
  Finally, the behaviour is different when a destination tag or group of
5185
5192
  C<All> is used. When copying directly, a destination group and/or tag name
@@ -5655,7 +5662,7 @@ with this command:
5655
5662
 
5656
5663
  produces output like this:
5657
5664
 
5658
- -- Generated by ExifTool 12.96 --
5665
+ -- Generated by ExifTool 12.97 --
5659
5666
  File: a.jpg - 2003:10:31 15:44:19
5660
5667
  (f/5.6, 1/60s, ISO 100)
5661
5668
  File: b.jpg - 2006:05:23 11:57:38
@@ -5897,7 +5904,13 @@ A leading '-' causes the number to be reset at the start of each new
5897
5904
  directory (in the original directory structure if the files are being
5898
5905
  moved), and '+' has no effect. The number before the decimal place gives
5899
5906
  the starting index, the number after the decimal place gives the field
5900
- width. The following examples show the output filenames when used with the
5907
+ width. To preserve synchronization with the processed file number, by
5908
+ default the copy number is not incremented to avoid file name collisions, so
5909
+ any existing same-named file will cause an error. However using a colon
5910
+ instead of a decimal point causes the number to be incremented to avoid
5911
+ collisions with existing files.
5912
+
5913
+ The following examples show the output filenames when used with the
5901
5914
  command C<exiftool rose.jpg star.jpg jet.jpg ...>:
5902
5915
 
5903
5916
  -w %C%f.txt # 0rose.txt, 1star.txt, 2jet.txt
@@ -6999,6 +6999,7 @@ my %ciMaxFocal = (
6999
6999
  314 => 'Canon RF 24-105mm F2.8 L IS USM Z', #42
7000
7000
  315 => 'Canon RF-S 10-18mm F4.5-6.3 IS STM', #42
7001
7001
  316 => 'Canon RF 35mm F1.4 L VCM', #42
7002
+ 318 => 'Canon RF 28-70mm F2.8 IS STM', #42
7002
7003
  # Note: add new RF lenses to %canonLensTypes with ID 61182
7003
7004
  },
7004
7005
  },
@@ -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.95';
34
+ $VERSION = '1.96';
35
35
 
36
36
  sub ProcessFujiDir($$$);
37
37
  sub ProcessFaceRec($$$);
@@ -1252,6 +1252,28 @@ my %faceCategories = (
1252
1252
  ValueConv => 'my @v=reverse split(" ",$val);"@v"', # reverse to show width first
1253
1253
  PrintConv => '$val=~tr/ /:/; $val',
1254
1254
  },
1255
+ 0x117 => {
1256
+ Name => 'RawZoomActive',
1257
+ Format => 'int32u',
1258
+ Count => 1,
1259
+ PrintConv => { 0 => 'No', 1 => 'Yes' },
1260
+ },
1261
+ 0x118 => {
1262
+ Name => 'RawZoomTopLeft',
1263
+ Format => 'int16u',
1264
+ Count => 2,
1265
+ Notes => 'relative to RawCroppedImageSize',
1266
+ ValueConv => 'my @v=reverse split(" ",$val);"@v"', # reverse to show width first
1267
+ PrintConv => '$val=~tr/ /x/; $val',
1268
+ },
1269
+ 0x119 => {
1270
+ Name => 'RawZoomSize',
1271
+ Format => 'int16u',
1272
+ Count => 2,
1273
+ Notes => 'relative to RawCroppedImageSize',
1274
+ ValueConv => 'my @v=reverse split(" ",$val);"@v"', # reverse to show width first
1275
+ PrintConv => '$val=~tr/ /x/; $val',
1276
+ },
1255
1277
  0x121 => [
1256
1278
  {
1257
1279
  Name => 'RawImageSize',
@@ -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.07';
17
+ $VERSION = '1.08';
18
18
 
19
19
  # map for writing metadata to InDesign files (currently only write XMP)
20
20
  my %indMap = (
@@ -101,8 +101,22 @@ sub ProcessIND($$)
101
101
  for (;;) {
102
102
  $raf->Read($hdr, 32) or last;
103
103
  unless (length($hdr) == 32 and $hdr =~ /^\Q$objectHeaderGUID/) {
104
- # this must be null padding or we have an error
105
- $hdr =~ /^\0+$/ or $err = 'Corrupt file or unsupported InDesign version';
104
+ # this must be null padding or we have a possible error
105
+ last if $hdr =~ /^\0+$/;
106
+ # (could be up to 4095 bytes of non-null garbage plus 4095 null bytes from ExifTool)
107
+ $raf->Read($buff, 8196) and $hdr .= $buff;
108
+ $hdr =~ s/\0+$//; # remove trailing nulls
109
+ if (length($hdr) > 4095) {
110
+ $err = 'Corrupt file or unsupported InDesign version';
111
+ last;
112
+ }
113
+ my $non = 'Non-null padding at end of file';
114
+ if (not $outfile) {
115
+ $et->Warn($non, 1);
116
+ } elsif (not $et->Error($non, 1)) {
117
+ Write($outfile, $hdr) or $err = 1;
118
+ $writeLen += length $hdr;
119
+ }
106
120
  last;
107
121
  }
108
122
  my $len = Get32u(\$hdr, 24);
@@ -1543,7 +1543,7 @@ sub ProcessJP2($$)
1543
1543
 
1544
1544
  # check to be sure this is a valid JPG2000 file
1545
1545
  return 0 unless $raf->Read($hdr,12) == 12;
1546
- unless ($hdr eq "\0\0\0\x0cjP \x0d\x0a\x87\x0a" or # (ref 1)
1546
+ unless ($hdr eq "\0\0\0\x0cjP \x0d\x0a\x87\x0a" or # (ref 1)
1547
1547
  $hdr eq "\0\0\0\x0cjP\x1a\x1a\x0d\x0a\x87\x0a" or # (ref 2)
1548
1548
  $$et{IsJXL})
1549
1549
  {