exiftool_vendored 12.50.0 → 12.52.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: 6307caa0246ae796d5e7a5bc90c52dc9e927e7b94c679091e09e3572c7b12801
4
- data.tar.gz: ec2f914fdf60d44885e3f1356d91a10e5fc7d3c8ba376ecf386ab9a6224dd364
3
+ metadata.gz: ba4ecb59460ff7222300e603360d0911cc1570510f754c02fe047d2f15792457
4
+ data.tar.gz: 5009d51c03eb7d9827e3fd0838f6303d3359320cc8ea92dbbb3418887e91a9c9
5
5
  SHA512:
6
- metadata.gz: 292e0342e259f177bf0146a87494558252add6064609a47bfa92e1afea102771d00cec94ad036c6e6a1d460b545cb1f3d2760350a7007dc2142efb522291263c
7
- data.tar.gz: 474e830728af874fe58565c33b6add3eba00bd6d9df1874834a2f4479186891ffb514deb56ee90cd1c8b1f4992a7134e6f117fe6004c47eb84152822776577b0
6
+ metadata.gz: f10977406b7799830c8d2e4292ed43bac78595b03deb80345486b22a8c87e1ce1d693c59839e7bb6000c271479756a9c3cea23a84501fdbaa19a97540eb6e709
7
+ data.tar.gz: df67d3fe0ec4b6a79354eb880c601eab994b578e439b05770a714bfd32642860e72706bb1a1bc430eb77e4ba4be17d7eabc02e4bdebcda97183a23dfbebd2b5b
data/bin/Changes CHANGED
@@ -7,6 +7,43 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 12.50. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Dec. 6, 2022 - Version 12.52
11
+
12
+ - Added a few new Nikon LensID's (thanks LibRaw and Chris)
13
+ - Added Slovak translations (thanks Peter Bagin)
14
+ - Made SphericalVideoXML readable/writable as a block
15
+ - Improved handling of Matroska metadata tags, including language support
16
+ - Improved French translations (thanks Philippe Bonnaure of GraphicConverter)
17
+ - Improved Composite:GPSAltitude conversion to honour -lang setting
18
+ - Improved -v2 messages to indicate files extracted from zip archives
19
+
20
+ Nov. 21, 2022 - Version 12.51
21
+
22
+ - Added a new Olympus LensType (thanks Herb)
23
+ - Extract C2PA JUMBF metadata from PNG images and extract C2PA Salt values
24
+ - Decode NikonSettings for Z9 firmware 3.0 (thanks Warren Hatch)
25
+ - Decode additional camm metadata from Insta360 Pro2 MP4 videos
26
+ - Improved Verbose output when writing Composite tags to add a "+" sign to
27
+ indicate related tags that are being written
28
+ - Enhanced -geotag option CSV format to support GPSImgDirection column
29
+ - Fixed problem where -w+ option didn't work in Windows if there were Unicode
30
+ characters in the path name
31
+ - Fixed problem where only the last image of the sequence was extracted
32
+ (multiple times) when using -ee2 to extract embedded images from FLIR SEQ
33
+ files
34
+ - Fixed issue where GPS reference directions may be unknowingly written when
35
+ using ExifTool 12.44 or later to write GPSLatitude or GPSLongitude without
36
+ specifying a group name. The fix was to Avoid writing the Composite tags
37
+ unless the Composite group is specified explicitly
38
+ - Fixed -geotag to write orientation and track tags even if some tags in the
39
+ category were missing
40
+ - Fixed inconsistency in selecting which tag to output with the -json option
41
+ when multiple tags with the same JSON key exist and the -TAG# feature is
42
+ used to disable print conversion
43
+ - Fixed problem writing QuickTime:PlayListID
44
+ - Fixed problem writing QuickTime tags when specifying tag ID (ie. family 7
45
+ group) as well as a language code
46
+
10
47
  Nov. 8, 2022 - Version 12.50 (production release)
11
48
 
12
49
  - Added a new XMP-GCreations tag
@@ -209,6 +246,8 @@ June 1, 2022 - Version 12.42 (production release)
209
246
  - Patched to allow PDF Encrypt object to be "null"
210
247
  - Fixed bug reading ICC_Profile 'meta' tags
211
248
 
249
+ History of older versions (back to Nov. 19, 2003 - Version 1.00) -->
250
+
212
251
  Apr. 7, 2022 - Version 12.41
213
252
 
214
253
  - Added support for "OM SYSTEM" maker notes
@@ -420,8 +459,6 @@ Aug. 12, 2021 - Version 12.30 (production release)
420
459
  currently can't be created)
421
460
  - Patched to remove 2 GB size limit when reading Photoshop ImageSourceData
422
461
 
423
- History of older versions (back to Nov. 19, 2003 - Version 1.00) -->
424
-
425
462
  July 9, 2021 - Version 12.29
426
463
 
427
464
  - Added a few new Nikon and Olympus lenses (thanks LibRaw)
data/bin/MANIFEST CHANGED
@@ -323,6 +323,7 @@ lib/Image/ExifTool/Lang/ko.pm
323
323
  lib/Image/ExifTool/Lang/nl.pm
324
324
  lib/Image/ExifTool/Lang/pl.pm
325
325
  lib/Image/ExifTool/Lang/ru.pm
326
+ lib/Image/ExifTool/Lang/sk.pm
326
327
  lib/Image/ExifTool/Lang/sv.pm
327
328
  lib/Image/ExifTool/Lang/tr.pm
328
329
  lib/Image/ExifTool/Lang/zh_cn.pm
@@ -646,6 +647,7 @@ t/Lang_15.out
646
647
  t/Lang_16.out
647
648
  t/Lang_17.out
648
649
  t/Lang_18.out
650
+ t/Lang_19.out
649
651
  t/Lang_2.out
650
652
  t/Lang_3.out
651
653
  t/Lang_4.out
data/bin/META.json CHANGED
@@ -47,5 +47,5 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "12.50"
50
+ "version" : "12.52"
51
51
  }
data/bin/META.yml CHANGED
@@ -28,4 +28,4 @@ recommends:
28
28
  Time::HiRes: 0
29
29
  requires:
30
30
  perl: 5.004
31
- version: 12.50
31
+ version: 12.52
data/bin/README CHANGED
@@ -107,8 +107,8 @@ your home directory, then you would type the following commands in a
107
107
  terminal window to extract and run ExifTool:
108
108
 
109
109
  cd ~/Desktop
110
- gzip -dc Image-ExifTool-12.50.tar.gz | tar -xf -
111
- cd Image-ExifTool-12.50
110
+ gzip -dc Image-ExifTool-12.52.tar.gz | tar -xf -
111
+ cd Image-ExifTool-12.52
112
112
  ./exiftool t/images/ExifTool.jpg
113
113
 
114
114
  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 = '12.50';
14
+ my $version = '12.52';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  BEGIN {
@@ -2351,7 +2351,8 @@ TAG: foreach $tag (@foundTags) {
2351
2351
  $group = $et->GetGroup($tag, $showGroup);
2352
2352
  # look ahead to see if this tag may suppress a priority tag in
2353
2353
  # the same group, and if so suppress this tag instead
2354
- next if $noDups and $tag =~ /^(.*?) \(/ and defined $$info{$1} and
2354
+ # (note that the tag key may look like "TAG #(1)" when the "#" feature is used)
2355
+ next if $noDups and $tag =~ /^(.*?) ?\(/ and defined $$info{$1} and
2355
2356
  $group eq $et->GetGroup($1, $showGroup);
2356
2357
  $group = 'Unknown' if not $group and ($xml or $json or $csv);
2357
2358
  if ($fp and not ($allGroup or $csv)) {
@@ -2376,7 +2377,7 @@ TAG: foreach $tag (@foundTags) {
2376
2377
  }
2377
2378
  } elsif ($noDups) {
2378
2379
  # don't allow duplicates, but avoid suppressing the priority tag
2379
- next if $tag =~ /^(.*?) \(/ and defined $$info{$1};
2380
+ next if $tag =~ /^(.*?) ?\(/ and defined $$info{$1};
2380
2381
  }
2381
2382
 
2382
2383
  ++$lineCount; # we are printing something meaningful
@@ -5474,7 +5475,7 @@ with this command:
5474
5475
 
5475
5476
  produces output like this:
5476
5477
 
5477
- -- Generated by ExifTool 12.50 --
5478
+ -- Generated by ExifTool 12.52 --
5478
5479
  File: a.jpg - 2003:10:31 15:44:19
5479
5480
  (f/5.6, 1/60s, ISO 100)
5480
5481
  File: b.jpg - 2006:05:23 11:57:38
@@ -634,7 +634,7 @@ $VERSION = '1.38';
634
634
  15 => 'High Speed Best Selection',
635
635
  16 => 'Portrait',
636
636
  17 => 'Scenery',
637
- 18 => 'Portrait With Scenery',
637
+ 18 => 'Portrait with Scenery',
638
638
  19 => 'Flower',
639
639
  20 => 'Natural Green',
640
640
  21 => 'Autumn Leaves',
@@ -723,7 +723,7 @@ $VERSION = '1.38';
723
723
  14 => 'High Speed Best Selection',
724
724
  15 => 'Portrait',
725
725
  16 => 'Scenery',
726
- 17 => 'Portrait With Scenery',
726
+ 17 => 'Portrait with Scenery',
727
727
  18 => 'Flower',
728
728
  19 => 'Natural Green',
729
729
  20 => 'Autumn Leaves',
@@ -1408,7 +1408,7 @@ $VERSION = '1.38';
1408
1408
  0 => 'Off',
1409
1409
  1 => 'Portrait',
1410
1410
  2 => 'Scenery',
1411
- 3 => 'Portrait With Scenery',
1411
+ 3 => 'Portrait with Scenery',
1412
1412
  4 => 'Children',
1413
1413
  5 => 'Sports',
1414
1414
  6 => 'Night Scene',
@@ -24,7 +24,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
24
24
  use Image::ExifTool::Exif;
25
25
  use Image::ExifTool::GPS;
26
26
 
27
- $VERSION = '1.21';
27
+ $VERSION = '1.22';
28
28
 
29
29
  sub ProcessFLIR($$;$);
30
30
  sub ProcessFLIRText($$$);
@@ -241,7 +241,8 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
241
241
  16.1 => {
242
242
  Name => 'RawThermalImage',
243
243
  Groups => { 2 => 'Preview' },
244
- RawConv => '\$$self{RawThermalImage}',
244
+ # make a copy in case we want to extract more of them with -ee2
245
+ RawConv => 'my $copy = $$self{RawThermalImage}; \$copy',
245
246
  },
246
247
  );
247
248
 
@@ -272,7 +273,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
272
273
  },
273
274
  16.1 => {
274
275
  Name => 'GainDeadMapImage',
275
- RawConv => '\$$self{GainDeadMapImage}',
276
+ RawConv => 'my $copy = \$$self{GainDeadMapImage}; \$copy',
276
277
  },
277
278
  );
278
279
 
@@ -303,7 +304,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
303
304
  },
304
305
  16.1 => {
305
306
  Name => 'CoarseMapImage',
306
- RawConv => '\$$self{CoarseMapImage}',
307
+ RawConv => 'my $copy = \$$self{CoarseMapImage}; \$copy',
307
308
  },
308
309
  );
309
310
 
@@ -334,7 +335,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
334
335
  },
335
336
  20.1 => {
336
337
  Name => 'PaintImage',
337
- RawConv => '\$$self{PaintImage}',
338
+ RawConv => 'my $copy = \$$self{PaintImage}; \$copy',
338
339
  },
339
340
  );
340
341
 
@@ -12,7 +12,7 @@ use strict;
12
12
  use vars qw($VERSION);
13
13
  use Image::ExifTool::Exif;
14
14
 
15
- $VERSION = '1.54';
15
+ $VERSION = '1.55';
16
16
 
17
17
  my %coordConv = (
18
18
  ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)',
@@ -407,12 +407,18 @@ my %coordConv = (
407
407
  # Require either GPS:GPSAltitudeRef or XMP:GPSAltitudeRef
408
408
  RawConv => '(defined $val[1] or defined $val[3]) ? $val : undef',
409
409
  ValueConv => q{
410
- my $alt = $val[0];
411
- $alt = $val[2] unless defined $alt;
412
- return undef unless defined $alt and IsFloat($alt);
413
- return(($val[1] || $val[3]) ? -$alt : $alt);
410
+ foreach (0,2) {
411
+ next unless defined $val[$_] and IsFloat($val[$_]) and defined $val[$_+1];
412
+ return $val[$_+1] ? -abs($val[$_]) : $val[$_];
413
+ }
414
+ return undef;
414
415
  },
415
416
  PrintConv => q{
417
+ foreach (0,2) {
418
+ next unless defined $val[$_] and IsFloat($val[$_]);
419
+ next unless defined $prt[$_+1] and $prt[$_+1] =~ /Sea/;
420
+ return((int($val[$_]*10)/10) . ' m ' . $prt[$_+1]);
421
+ }
416
422
  $val = int($val * 10) / 10;
417
423
  return(($val =~ s/^-// ? "$val m Below" : "$val m Above") . " Sea Level");
418
424
  },
@@ -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.68';
32
+ $VERSION = '1.69';
33
33
 
34
34
  sub JITTER() { return 2 } # maximum time jitter
35
35
 
@@ -75,7 +75,8 @@ my %xmlTag = (
75
75
  );
76
76
 
77
77
  # fix information keys which must be interpolated around a circle
78
- my %cyclical = (lon => 1, track => 1, dir => 1, roll => 1);
78
+ my %cyclical = (lon => 1, track => 1, dir => 1, pitch => 1, roll => 1);
79
+ my %cyc180 = (lon => 1, pitch => 1, roll => 1); # wraps from 180 to -180
79
80
 
80
81
  # fix information keys for each of our general categories
81
82
  my %fixInfoKeys = (
@@ -88,6 +89,9 @@ my %fixInfoKeys = (
88
89
 
89
90
  my %isOrient = ( dir => 1, pitch => 1, roll => 1 ); # test for orientation key
90
91
 
92
+ # tags which may exist separately in some formats (eg. CSV)
93
+ my %sepTags = ( dir => 1, pitch => 1, roll => 1, track => 1, speed => 1 );
94
+
91
95
  # conversion factors for GPSSpeed
92
96
  my %speedConv = (
93
97
  'K' => 1.852, # km/h per knot
@@ -276,6 +280,8 @@ sub LoadTrackLog($$;$)
276
280
  $param = 'pitch';
277
281
  } elsif (/^(Angle)?Roll/i) {
278
282
  $param = 'roll';
283
+ } elsif (/^Img ?Dir/i) {
284
+ $param = 'dir';
279
285
  }
280
286
  if ($param) {
281
287
  $et->VPrint(2, "CSV column '${_}' is $param\n");
@@ -496,6 +502,7 @@ DoneFix: $isDate = 1;
496
502
  $secs = $val;
497
503
  } else {
498
504
  $$fix{$param} = $val;
505
+ $$has{$param} = 1 if $sepTags{$param};
499
506
  }
500
507
  }
501
508
  # make coordinate negative according to reference direction if necessary
@@ -1101,6 +1108,7 @@ Category: foreach $category (qw{pos track alt orient atemp}) {
1101
1108
  next unless defined $v0 and defined $v1;
1102
1109
  $f = $f0b;
1103
1110
  } else {
1111
+ next if $sepTags{$key}; # (don't scan outwards for some formats, eg. CSV)
1104
1112
  # scan outwards looking for fixes with the required information
1105
1113
  # (NOTE: SHOULD EVENTUALLY DO THIS FOR EXTRAPOLATION TOO!)
1106
1114
  my ($t0b, $t1b);
@@ -1127,8 +1135,8 @@ Category: foreach $category (qw{pos track alt orient atemp}) {
1127
1135
  # 360 degrees to the smaller angle before interpolating
1128
1136
  $v0 < $v1 ? $v0 += 360 : $v1 += 360;
1129
1137
  $$fix{$key} = $v1 * $f + $v0 * (1 - $f);
1130
- # longitude and roll ranges are -180 to 180, others are 0 to 360
1131
- my $max = ($key eq 'lon' or $key eq 'roll') ? 180 : 360;
1138
+ # some ranges are -180 to 180, others are 0 to 360
1139
+ my $max = $cyc180{$key} ? 180 : 360;
1132
1140
  $$fix{$key} -= 360 if $$fix{$key} >= $max;
1133
1141
  } else {
1134
1142
  # simple linear interpolation
@@ -205,6 +205,7 @@ sub ProcessJPEG_HDR($$$);
205
205
  Name => 'JUMBF',
206
206
  Condition => '$$valPt =~ /^JP/',
207
207
  SubDirectory => { TagTable => 'Image::ExifTool::Jpeg2000::Main' },
208
+ # Note: The recommended options for reading C2PA JUMBF metadata are "-G3 -b -j -u"
208
209
  }],
209
210
  APP12 => [{
210
211
  Name => 'PictureInfo',
@@ -16,7 +16,7 @@ use strict;
16
16
  use vars qw($VERSION);
17
17
  use Image::ExifTool qw(:DataAccess :Utils);
18
18
 
19
- $VERSION = '1.32';
19
+ $VERSION = '1.33';
20
20
 
21
21
  sub ProcessJpeg2000Box($$$);
22
22
  sub ProcessJUMD($$$);
@@ -418,6 +418,12 @@ my %j2cMarker = (
418
418
  Binary => 1,
419
419
  JUMBF_Suffix => 'Data', # (used when tag is renamed according to JUMDLabel)
420
420
  },
421
+ c2sh => { # used in JUMBF
422
+ Name => 'C2PASaltHash',
423
+ Format => 'undef',
424
+ ValueConv => 'unpack("H*",$val)',
425
+ JUMBF_Suffix => 'Salt', # (used when tag is renamed according to JUMDLabel)
426
+ },
421
427
  #
422
428
  # stuff seen in JPEG XL images:
423
429
  #
@@ -770,7 +776,22 @@ sub ProcessJUMD($$$)
770
776
  $et->HandleTag($tagTablePtr, 'sig', substr($$dataPt, $pos, 32));
771
777
  $pos += 32;
772
778
  }
773
- $pos == $end or $et->Warn('Extra data in JUMD box'." $pos $end", 1);
779
+ my $more = $end - $pos;
780
+ if ($more) {
781
+ # (may find c2sh box hiding after JUMD record)
782
+ if ($more >= 8) {
783
+ my %dirInfo = (
784
+ DataPt => $dataPt,
785
+ DataLen => $$dirInfo{DataLen},
786
+ DirStart => $pos,
787
+ DirLen => $more,
788
+ DirName => 'JUMDPrivate',
789
+ );
790
+ $et->ProcessDirectory(\%dirInfo, GetTagTable('Image::ExifTool::Jpeg2000::Main'));
791
+ } else {
792
+ $et->Warn("Extra data in JUMD box $more bytes)", 1);
793
+ }
794
+ }
774
795
  return 1;
775
796
  }
776
797
 
@@ -902,7 +923,7 @@ sub ProcessJpeg2000Box($$$)
902
923
  my ($et, $dirInfo, $tagTablePtr) = @_;
903
924
  my $dataPt = $$dirInfo{DataPt};
904
925
  my $dataLen = $$dirInfo{DataLen};
905
- my $dataPos = $$dirInfo{DataPos};
926
+ my $dataPos = $$dirInfo{DataPos} || 0;
906
927
  my $dirLen = $$dirInfo{DirLen} || 0;
907
928
  my $dirStart = $$dirInfo{DirStart} || 0;
908
929
  my $base = $$dirInfo{Base} || 0;
@@ -4149,7 +4149,7 @@ $VERSION = '1.36';
4149
4149
  'Auto' => 'Automatisch',
4150
4150
  'Continuous' => 'Serienaufnahme',
4151
4151
  'Custom' => 'Benutzerdefiniert',
4152
- 'Face detect' => 'Gesichtserkennung AF',
4152
+ 'Face Detect' => 'Gesichtserkennung AF',
4153
4153
  'Infinity' => 'Unendlich',
4154
4154
  'Macro' => 'Makro',
4155
4155
  'Macro (1)' => 'Makro (1)',