exiftool_vendored 12.50.0 → 12.52.0

Sign up to get free protection for your applications and to get access to all the features.
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)',