exiftool-vendored.pl 12.80.0 → 12.84.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.
Files changed (43) hide show
  1. package/bin/Changes +81 -0
  2. package/bin/MANIFEST +6 -18
  3. package/bin/META.json +1 -1
  4. package/bin/META.yml +1 -1
  5. package/bin/README +4 -2
  6. package/bin/build_geolocation +872 -0
  7. package/bin/config_files/example.config +2 -2
  8. package/bin/exiftool +61 -17
  9. package/bin/fmt_files/gpx.fmt +2 -1
  10. package/bin/fmt_files/gpx_wpt.fmt +2 -1
  11. package/bin/lib/Image/ExifTool/Apple.pm +51 -7
  12. package/bin/lib/Image/ExifTool/BuildTagLookup.pm +47 -31
  13. package/bin/lib/Image/ExifTool/CanonVRD.pm +19 -6
  14. package/bin/lib/Image/ExifTool/DJI.pm +29 -0
  15. package/bin/lib/Image/ExifTool/Exif.pm +19 -2
  16. package/bin/lib/Image/ExifTool/FujiFilm.pm +20 -7
  17. package/bin/lib/Image/ExifTool/GM.pm +552 -0
  18. package/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  19. package/bin/lib/Image/ExifTool/Geolocation.pm +423 -178
  20. package/bin/lib/Image/ExifTool/Geotag.pm +26 -13
  21. package/bin/lib/Image/ExifTool/M2TS.pm +32 -4
  22. package/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
  23. package/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  24. package/bin/lib/Image/ExifTool/Nikon.pm +337 -27
  25. package/bin/lib/Image/ExifTool/NikonCustom.pm +55 -1
  26. package/bin/lib/Image/ExifTool/Olympus.pm +1 -0
  27. package/bin/lib/Image/ExifTool/OpenEXR.pm +21 -3
  28. package/bin/lib/Image/ExifTool/PNG.pm +3 -3
  29. package/bin/lib/Image/ExifTool/QuickTime.pm +45 -24
  30. package/bin/lib/Image/ExifTool/QuickTimeStream.pl +66 -30
  31. package/bin/lib/Image/ExifTool/README +2 -0
  32. package/bin/lib/Image/ExifTool/Sony.pm +16 -7
  33. package/bin/lib/Image/ExifTool/TagLookup.pm +4827 -4778
  34. package/bin/lib/Image/ExifTool/TagNames.pod +953 -620
  35. package/bin/lib/Image/ExifTool/WriteQuickTime.pl +32 -9
  36. package/bin/lib/Image/ExifTool/Writer.pl +169 -130
  37. package/bin/lib/Image/ExifTool/XMP.pm +4 -2
  38. package/bin/lib/Image/ExifTool/XMP2.pl +3 -0
  39. package/bin/lib/Image/ExifTool.pm +106 -48
  40. package/bin/lib/Image/ExifTool.pod +47 -25
  41. package/bin/perl-Image-ExifTool.spec +1 -1
  42. package/bin/pp_build_exe.args +4 -4
  43. package/package.json +3 -3
@@ -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);
31
31
 
32
- $VERSION = '12.80';
32
+ $VERSION = '12.84';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -921,7 +921,7 @@ $testLen = 1024; # number of bytes to read when testing for magic number
921
921
  DICOM=> '(.{128}DICM|\0[\x02\x04\x06\x08]\0[\0-\x20]|[\x02\x04\x06\x08]\0[\0-\x20]\0)',
922
922
  DOCX => 'PK\x03\x04',
923
923
  DPX => '(SDPX|XPDS)',
924
- DR4 => 'IIII\x04\0\x04\0',
924
+ DR4 => 'IIII[\x04|\x05]\0\x04\0',
925
925
  DSS => '(\x02dss|\x03ds2)',
926
926
  DV => '\x1f\x07\0[\x3f\xbf]', # (not tested if extension recognized)
927
927
  DWF => '\(DWF V\d',
@@ -1103,6 +1103,7 @@ my @availableOptions = (
1103
1103
  [ 'FilterW', undef, 'input filter when writing tag values' ],
1104
1104
  [ 'FixBase', undef, 'fix maker notes base offsets' ],
1105
1105
  [ 'Geolocation', undef, 'generate geolocation tags' ],
1106
+ [ 'GeolocAltNames', 1, 'search alternate city names if available' ],
1106
1107
  [ 'GeolocFeature', undef, 'regular expression of geolocation features to match' ],
1107
1108
  [ 'GeolocMinPop', undef, 'minimum geolocation population' ],
1108
1109
  [ 'GeolocMaxDist', undef, 'maximum geolocation distance' ],
@@ -1117,6 +1118,7 @@ my @availableOptions = (
1117
1118
  [ 'HexTagIDs', 0, 'use hex tag ID\'s in family 7 group names' ],
1118
1119
  [ 'HtmlDump', 0, 'HTML dump (0-3, higher # = bigger limit)' ],
1119
1120
  [ 'HtmlDumpBase', undef, 'base address for HTML dump' ],
1121
+ [ 'IgnoreGroups', undef, 'list of groups to ignore when extracting' ],
1120
1122
  [ 'IgnoreMinorErrors',undef, 'ignore minor errors when reading/writing' ],
1121
1123
  [ 'IgnoreTags', undef, 'list of tags to ignore when extracting' ],
1122
1124
  [ 'ImageHashType', 'MD5', 'image hash algorithm' ],
@@ -1136,6 +1138,7 @@ my @availableOptions = (
1136
1138
  [ 'NoPDFList', undef, 'flag to avoid splitting PDF List-type tag values' ],
1137
1139
  [ 'NoWarning', undef, 'regular expression for warnings to suppress' ],
1138
1140
  [ 'Password', undef, 'password for password-protected PDF documents' ],
1141
+ [ 'PrintCSV', undef, 'flag to print CSV directly (selected metadata types only)' ],
1139
1142
  [ 'PrintConv', 1, 'flag to enable print conversion' ],
1140
1143
  [ 'QuickTimeHandler', 1, 'flag to add mdir Handler to newly created Meta box' ],
1141
1144
  [ 'QuickTimePad', undef, 'flag to preserve padding of QuickTime CR3 tags' ],
@@ -1173,7 +1176,7 @@ my @defaultWriteGroups = qw(
1173
1176
 
1174
1177
  # group hash for ExifTool-generated tags
1175
1178
  my %allGroupsExifTool = ( 0 => 'ExifTool', 1 => 'ExifTool', 2 => 'ExifTool' );
1176
- my %geoInfo = ( Groups => { 0 => 'ExifTool', 1 => 'ExifTool', 2 => 'Location' }, Priority => 0 );
1179
+ my %geoInfo = ( Groups => { 0 => 'ExifTool', 1 => 'ExifTool', 2 => 'Location' } );
1177
1180
 
1178
1181
  # special tag names (not used for tag info)
1179
1182
  %specialTags = map { $_ => 1 } qw(
@@ -1691,7 +1694,7 @@ my %systemTagsNotes = (
1691
1694
  Flags => ['Writable' ,'Protected', 'Binary'],
1692
1695
  Permanent => 0, # (this is 1 by default for MakerNotes tags)
1693
1696
  WriteCheck => q{
1694
- return undef if $val =~ /^IIII\x04\0\x04\0/;
1697
+ return undef if $val =~ /^IIII[\x04|\x05]\0\x04\0/;
1695
1698
  return 'Invalid CanonDR4 data';
1696
1699
  },
1697
1700
  },
@@ -1988,27 +1991,34 @@ my %systemTagsNotes = (
1988
1991
  },
1989
1992
  ValueConvInv => q{
1990
1993
  require Image::ExifTool::Geolocation;
1991
- return $val if lc($val) eq 'geotag';
1994
+ # write this tag later if geotagging
1995
+ return $val if $val =~ /\bgeotag\b/i;
1996
+ $val .= ',both';
1992
1997
  my $opts = $$self{OPTIONS};
1993
- my $geo = Image::ExifTool::Geolocation::Geolocate($self->Encode($val,'UTF8'),
1994
- $$opts{GeolocMinPop}, $$opts{GeolocMaxDist}, $$opts{Lang}, undef, $$opts{GeolocFeature});
1995
- return '' unless $geo;
1996
- if ($$geo[12] and $self->Warn('Multiple matching cities found',2)) {
1998
+ my ($cities, $dist) = Image::ExifTool::Geolocation::Geolocate($self->Encode($val,'UTF8'), $opts);
1999
+ return '' unless $cities;
2000
+ if (@$cities > 1 and $self->Warn('Multiple matching cities found',2)) {
1997
2001
  warn "$$self{VALUE}{Warning}\n";
1998
2002
  return '';
1999
2003
  }
2000
- my @tags = $self->GetGeolocateTags($wantGroup, defined $$geo[10] ? 0 : 1);
2004
+ my @geo = Image::ExifTool::Geolocation::GetEntry($$cities[0], $$opts{Lang});
2005
+ my @tags = $self->GetGeolocateTags($wantGroup, $dist ? 0 : 1);
2001
2006
  my %geoNum = ( City => 0, Province => 1, State => 1, Code => 3, Country => 4,
2002
2007
  Coordinates => 89, Latitude => 8, Longitude => 9 );
2003
2008
  my ($tag, $value);
2004
2009
  foreach $tag (@tags) {
2005
2010
  if ($tag =~ /GPS(Coordinates|Latitude|Longitude)?/) {
2006
- $value = $geoNum{$1} == 89 ? "$$geo[8],$$geo[9]" : $$geo[$geoNum{$1}];
2011
+ $value = $geoNum{$1} == 89 ? "$geo[8],$geo[9]" : $geo[$geoNum{$1}];
2007
2012
  } elsif ($tag =~ /(Code)/ or $tag =~ /(City|Province|State|Country)/) {
2008
- $value = $$geo[$geoNum{$1}];
2013
+ $value = $geo[$geoNum{$1}];
2009
2014
  next unless defined $value;
2010
2015
  $value = $self->Decode($value,'UTF8');
2011
2016
  $value .= ' ' if $tag eq 'iptc:Country-PrimaryLocationCode'; # (IPTC requires 3-char code)
2017
+ } elsif ($tag =~ /LocationName/) {
2018
+ $value = $geo[0] or next;
2019
+ $value .= ', ' . $geo[1] if $geo[1];
2020
+ $value .= ', ' . $geo[4] if $geo[4];
2021
+ $value = $self->Decode($value, 'UTF8');
2012
2022
  } else {
2013
2023
  next; # (shouldn't happen)
2014
2024
  }
@@ -2017,16 +2027,18 @@ my %systemTagsNotes = (
2017
2027
  return '';
2018
2028
  },
2019
2029
  PrintConvInv => q{
2020
- return $val unless $val =~ /^([-+]?\d.*?[NS]?), ?([-+]?\d.*?[EW]?)$/ or
2021
- $val =~ /^\s*(-?\d+(?:\.\d+)?)\s*(-?\d+(?:\.\d+)?)\s*$/;
2022
- my ($lat, $lon) = ($1, $2);
2023
- require Image::ExifTool::GPS;
2024
- $lat = Image::ExifTool::GPS::ToDegrees($lat, 1, "lat");
2025
- $lon = Image::ExifTool::GPS::ToDegrees($lon, 1, "lon");
2026
- return "$lat, $lon";
2030
+ my @args = split /\s*,\s*/, $val;
2031
+ my $lat = 1;
2032
+ foreach (@args) {
2033
+ next unless /^[-+]?\d/;
2034
+ require Image::ExifTool::GPS;
2035
+ $_ = Image::ExifTool::GPS::ToDegrees($_, 1, $lat ? 'lat' : 'lon');
2036
+ $lat ^= 1;
2037
+ }
2038
+ return join(',', @args);
2027
2039
  },
2028
- },
2029
- GeolocationBearing => { %geoInfo,
2040
+ },
2041
+ GeolocationBearing => { %geoInfo,
2030
2042
  Notes => q{
2031
2043
  compass bearing to GeolocationCity center. Geolocation tags are
2032
2044
  generated only if API L<Geolocation|../ExifTool.html#Geolocation> option is set
@@ -2037,7 +2049,7 @@ my %systemTagsNotes = (
2037
2049
  GeolocationSubregion=> { %geoInfo, Notes => 'geolocation county or subregion', ValueConv => '$self->Decode($val,"UTF8")' },
2038
2050
  GeolocationCountry => { %geoInfo, Notes => 'geolocation country name', ValueConv => '$self->Decode($val,"UTF8")' },
2039
2051
  GeolocationCountryCode=>{%geoInfo, Notes => 'geolocation country code' },
2040
- GeolocationTimeZone => { %geoInfo, Notes => 'geolocation time zone name' },
2052
+ GeolocationTimeZone => { %geoInfo, Notes => 'geolocation time zone ID' },
2041
2053
  GeolocationFeatureCode=>{%geoInfo, Notes => 'feature code, see L<http://www.geonames.org/export/codes.html#P>' },
2042
2054
  GeolocationPopulation=>{ %geoInfo, Notes => 'city population rounded to 2 significant digits' },
2043
2055
  GeolocationDistance => { %geoInfo, Notes => 'distance in km from current GPS to city', PrintConv => '"$val km"' },
@@ -2459,12 +2471,12 @@ sub Options($$;@)
2459
2471
  } else {
2460
2472
  $$options{$param} = undef; # clear the list
2461
2473
  }
2462
- } elsif ($param eq 'IgnoreTags') {
2474
+ } elsif ($param =~ /^(IgnoreTags|IgnoreGroups)$/) {
2463
2475
  if (defined $newVal) {
2464
2476
  # parse list from delimited string if necessary
2465
- my @ignoreList = (ref $newVal eq 'ARRAY') ? @$newVal : ($newVal =~ /[-\w?*:]+/g);
2466
- ExpandShortcuts(\@ignoreList);
2467
- # add to existing tags to ignore
2477
+ my @ignoreList = (ref $newVal eq 'ARRAY') ? @$newVal : ($newVal =~ /[-\w?*:#]+/g);
2478
+ ExpandShortcuts(\@ignoreList) if $param eq 'IgnoreTags';
2479
+ # add to existing tags/groups to ignore
2468
2480
  $$options{$param} or $$options{$param} = { };
2469
2481
  foreach (@ignoreList) {
2470
2482
  /^(.*:)?([-\w?*]+)#?$/ or next;
@@ -2544,6 +2556,8 @@ sub Options($$;@)
2544
2556
  } else {
2545
2557
  warn("Can't set $param to undef\n");
2546
2558
  }
2559
+ } elsif (lc $param eq 'geodir') {
2560
+ $Image::ExifTool::Geolocation::geoDir = $newVal; # (undocumented)
2547
2561
  } else {
2548
2562
  if ($param eq 'Escape') {
2549
2563
  # set ESCAPE_PROC
@@ -2562,7 +2576,15 @@ sub Options($$;@)
2562
2576
  delete $$self{GLOBAL_TIME_OFFSET}; # reset our calculated offset
2563
2577
  } elsif ($param eq 'TimeZone' and defined $newVal and length $newVal) {
2564
2578
  $ENV{TZ} = $newVal;
2565
- eval { require POSIX; POSIX::tzset() };
2579
+ if ($^O eq 'MSWin32') {
2580
+ if (eval { require Time::Piece }) {
2581
+ eval { Time::Piece::_tzset() };
2582
+ } else {
2583
+ warn("Install Time::Piece to set time zone in Windows\n");
2584
+ }
2585
+ } else {
2586
+ eval { require POSIX; POSIX::tzset() };
2587
+ }
2566
2588
  } elsif ($param eq 'Validate') {
2567
2589
  # load Validate module if Validate option enabled
2568
2590
  $newVal and require Image::ExifTool::Validate;
@@ -2640,7 +2662,6 @@ sub ExtractInfo($;@)
2640
2662
  $self->Options(Duplicates => 1) if $$options{HtmlDump};
2641
2663
  # enable Validate option if Validate tag is requested
2642
2664
  $self->Options(Validate => 1) if $$req{validate};
2643
-
2644
2665
  if (defined $_[0]) {
2645
2666
  # only initialize filename if called with arguments
2646
2667
  $$self{FILENAME} = undef; # name of file (or '' if we didn't open it)
@@ -2649,6 +2670,11 @@ sub ExtractInfo($;@)
2649
2670
  $self->ParseArguments(@_); # initialize from our arguments
2650
2671
  }
2651
2672
  }
2673
+ # ignore all tags and set ExtractEmbedded if outputting CSV directly
2674
+ if ($self->Options('PrintCSV')) {
2675
+ $$self{OPTIONS}{IgnoreTags} = { all => 1 };
2676
+ $self->Options(ExtractEmbedded => 1);
2677
+ }
2652
2678
  # initialize ExifTool object members
2653
2679
  $self->Init();
2654
2680
  $$self{InExtract} = 1; # set flag indicating we are inside ExtractInfo
@@ -2829,6 +2855,7 @@ sub ExtractInfo($;@)
2829
2855
  $self->FoundTag('FileTypeExtension', '');
2830
2856
  $self->DoneExtract();
2831
2857
  $raf->Close() if $raf;
2858
+ %saveOptions and $$self{OPTIONS} = \%saveOptions;
2832
2859
  delete $$self{InExtract} unless $reEntry;
2833
2860
  return 1;
2834
2861
  }
@@ -3060,8 +3087,14 @@ sub ExtractInfo($;@)
3060
3087
  # restore necessary members when exiting re-entrant code
3061
3088
  $$self{$_} = $$reEntry{$_} foreach keys %$reEntry;
3062
3089
  SetByteOrder($saveOrder);
3090
+ } else {
3091
+ # call cleanup routines if necessary
3092
+ if ($$self{Cleanup}) {
3093
+ &$_($self) foreach @{$$self{Cleanup}};
3094
+ delete $$self{Cleanup};
3095
+ }
3096
+ delete $$self{InExtract};
3063
3097
  }
3064
- delete $$self{InExtract} unless $reEntry;
3065
3098
 
3066
3099
  # ($type may be undef without an Error when processing sub-documents)
3067
3100
  return 0 if not defined $type or exists $$self{VALUE}{Error};
@@ -4338,26 +4371,32 @@ sub DoneExtract($)
4338
4371
  }
4339
4372
  local $SIG{'__WARN__'} = \&SetWarning;
4340
4373
  undef $evalWarning;
4341
- my $geo = Image::ExifTool::Geolocation::Geolocate($arg, $$opts{GeolocMinPop},
4342
- $$opts{GeolocMaxDist}, $$opts{Lang}, $$opts{Duplicates},
4343
- $$opts{GeolocFeature});
4344
- # ($$geo[0] will be an ARRAY ref if multiple matches were found and the Duplicates option is set)
4345
- if ($geo and (ref $$geo[0] or not $$geo[12] or not $self->Warn('Multiple Geolocation cities are possible',2))) {
4346
- my $geoList = ref $$geo[0] ? $geo : [ $geo ]; # make a list if not done alreaday
4347
- foreach $geo (@$geoList) {
4348
- $self->FoundTag(GeolocationCity => $$geo[0]);
4349
- $self->FoundTag(GeolocationRegion => $$geo[1]) if $$geo[1];
4350
- $self->FoundTag(GeolocationSubregion => $$geo[2]) if $$geo[2];
4351
- $self->FoundTag(GeolocationCountryCode => $$geo[3]);
4352
- $self->FoundTag(GeolocationCountry => $$geo[4]) if $$geo[4];
4353
- $self->FoundTag(GeolocationTimeZone => $$geo[5]) if $$geo[5];
4354
- $self->FoundTag(GeolocationFeatureCode => $$geo[6]);
4355
- $self->FoundTag(GeolocationPopulation => $$geo[7]);
4356
- $self->FoundTag(GeolocationPosition => "$$geo[8] $$geo[9]");
4357
- $self->FoundTag(GeolocationDistance => $$geo[10]) if defined $$geo[10];
4358
- $self->FoundTag(GeolocationBearing => $$geo[11]) if defined $$geo[11];
4359
- $self->FoundTag(GeolocationWarning => "Search matched $$geo[12] cities") if $$geo[12] and $geo eq $$geoList[0];
4374
+ $$opts{GeolocMulti} = $$opts{Duplicates};
4375
+ my ($cities, $dist) = Image::ExifTool::Geolocation::Geolocate($arg, $opts);
4376
+ delete $$opts{GeolocMulti};
4377
+ if ($cities and (@$cities < 2 or $dist or not $self->Warn('Multiple Geolocation cities are possible',2))) {
4378
+ $self->FoundTag(GeolocationWarning => 'Search matched '.scalar(@$cities).' cities') if @$cities > 1;
4379
+ my $city;
4380
+ foreach $city (@$cities) {
4381
+ $$self{DOC_NUM} = ++$$self{DOC_COUNT} unless $city eq $$cities[0];
4382
+ my @geo = Image::ExifTool::Geolocation::GetEntry($city, $$opts{Lang});
4383
+ $self->FoundTag(GeolocationCity => $geo[0]);
4384
+ $self->FoundTag(GeolocationRegion => $geo[1]) if $geo[1];
4385
+ $self->FoundTag(GeolocationSubregion => $geo[2]) if $geo[2];
4386
+ $self->FoundTag(GeolocationCountryCode => $geo[3]);
4387
+ $self->FoundTag(GeolocationCountry => $geo[4]) if $geo[4];
4388
+ $self->FoundTag(GeolocationTimeZone => $geo[5]) if $geo[5];
4389
+ $self->FoundTag(GeolocationFeatureCode => $geo[6]);
4390
+ $self->FoundTag(GeolocationPopulation => $geo[7]);
4391
+ $self->FoundTag(GeolocationPosition => "$geo[8] $geo[9]");
4392
+ if ($dist) {
4393
+ $self->FoundTag(GeolocationDistance => $$dist[0][0]);
4394
+ $self->FoundTag(GeolocationBearing => $$dist[0][1]);
4395
+ shift @$dist;
4396
+ }
4397
+ last unless $$opts{Duplicates};
4360
4398
  }
4399
+ delete $$self{DOC_NUM};
4361
4400
  } elsif ($evalWarning) {
4362
4401
  $self->Warn(CleanWarning());
4363
4402
  }
@@ -5040,6 +5079,7 @@ sub SetFoundTags($)
5040
5079
  $allTag = 1;
5041
5080
  } elsif ($tag =~ /[*?]/) {
5042
5081
  # allow wildcards in tag names
5082
+ $tag =~ tr/-_A-Za-z0-9*?//dc; # sterilize
5043
5083
  $tag =~ s/\*/[-\\w]*/g;
5044
5084
  $tag =~ s/\?/[-\\w]/g;
5045
5085
  $tag .= '( \\(.*)?' if $doDups or $allGrp;
@@ -5047,6 +5087,7 @@ sub SetFoundTags($)
5047
5087
  next unless @matches; # don't want entry in list for wildcard tags
5048
5088
  $allTag = 1;
5049
5089
  } elsif ($doDups or defined $group) {
5090
+ $tag =~ tr/-_A-Za-z0-9//dc; # sterilize
5050
5091
  # must also look for tags like "Tag (1)"
5051
5092
  # (but be sure not to match temporary ValueConv entries like "Tag #")
5052
5093
  @matches = grep(/^$tag( \(|$)/i, keys %$tagHash);
@@ -5259,6 +5300,16 @@ sub AUTOLOAD
5259
5300
  return DoAutoLoad($AUTOLOAD, @_);
5260
5301
  }
5261
5302
 
5303
+ #------------------------------------------------------------------------------
5304
+ # Add cleanup routine to call before returning from Extract
5305
+ # Inputs: 0) ExifTool ref, 1) code ref to routine with ExifTool ref as an argument
5306
+ sub AddCleanup($)
5307
+ {
5308
+ my ($self, $sub) = @_;
5309
+ $$self{Cleanup} or $$self{Cleanup} = [ ];
5310
+ push @{$$self{Cleanup}}, $sub;
5311
+ }
5312
+
5262
5313
  #------------------------------------------------------------------------------
5263
5314
  # Add warning tag
5264
5315
  # Inputs: 0) ExifTool object reference, 1) warning message
@@ -6326,6 +6377,7 @@ sub TimeLocal(@)
6326
6377
  if ($^O eq 'MSWin32') {
6327
6378
  # patch for ActivePerl timezone bug
6328
6379
  my @t2 = localtime($tm);
6380
+ $t2[5] += 1900;
6329
6381
  my $t2 = Time::Local::timelocal(@t2);
6330
6382
  # adjust timelocal() return value to be consistent with localtime()
6331
6383
  $tm += $tm - $t2;
@@ -8900,6 +8952,12 @@ sub FoundTag($$$;@)
8900
8952
  }
8901
8953
  $grps[0] or $grps[0] = $$self{SET_GROUP0};
8902
8954
  $grps[1] or $grps[1] = $$self{SET_GROUP1};
8955
+ if ($$options{IgnoreGroups}) {
8956
+ foreach (0..1) {
8957
+ my $g = lc($grps[$_] || $$tagInfo{Groups}{$_} || $$tagInfo{Table}{GROUPS}{$_});
8958
+ return undef if $$options{IgnoreGroups}{$g} or $$options{IgnoreGroups}{"$_$g"};
8959
+ }
8960
+ }
8903
8961
  my $valueHash = $$self{VALUE};
8904
8962
 
8905
8963
  if ($$tagInfo{RawConv}) {
@@ -728,13 +728,20 @@ to use for the geolocation input. May also include regular expressions for
728
728
  more flexible matching. See L<https://exiftool.org/geolocation.html> for
729
729
  more details. Default is undef.
730
730
 
731
+ =item GeolocAltNames
732
+
733
+ Flag to search alternate Geolocation city names if available (ie. if
734
+ $Image::ExifTool::Geolocation::altDir has been set). Set to 0 to disable
735
+ use of the alternate names. Default is 1.
736
+
731
737
  =item GeolocFeature
732
738
 
733
739
  Comma-separated list of feature codes to include in city search, or exclude
734
740
  if the list begins with a dash (-). Valid feature codes are PPL, PPLA,
735
- PPLA2, PPLA3, PPLA4, PPLA5, PPLC, PPLCH, PPLF, PPLG, PPLL, PPLR, PPLS, STLMT
736
- and Other. See L<http://www.geonames.org/export/codes.html#P> for a
737
- description of these codes. Default is undef.
741
+ PPLA2, PPLA3, PPLA4, PPLA5, PPLC, PPLCH, PPLF, PPLG, PPLH, PPLL, PPLQ, PPLR,
742
+ PPLS, PPLW, PPLX, STLMT and Other, plus possible user-include codes if an
743
+ alternate database is used. See L<http://www.geonames.org/export/codes.html#P>
744
+ for a description of these codes. Default is undef.
738
745
 
739
746
  =item GeolocMaxDist
740
747
 
@@ -819,6 +826,12 @@ goes to the file specified by the TextOut option (\*STDOUT by default).
819
826
  Base for HTML dump offsets. If not defined, the EXIF/TIFF base offset is
820
827
  used. Set to 0 for absolute offsets. Default is undef.
821
828
 
829
+ =item IgnoreGroups
830
+
831
+ Comma-separated list of group names to ignore when reading. The group names
832
+ are case insensitive and may be preceeded by a family number. Set to undef
833
+ to clear the previous IgnoreGroups list. Default is undef.
834
+
822
835
  =item IgnoreMinorErrors
823
836
 
824
837
  Flag to ignore minor errors. Causes minor errors to be downgraded to
@@ -832,12 +845,12 @@ warnings are denoted by "[minor]" at the start of the message, or "[Minor]"
832
845
 
833
846
  =item IgnoreTags
834
847
 
835
- List of tag names to ignore when reading. This may help in situations where
836
- memory is limited because the ignored tag values are not stored in memory.
837
- The tag names are case insensitive and group names and wildcards are not
838
- allowed. A special tag name of "All" may be used to ignore all tags except
839
- those specified by the L</RequestTags> option. Set to undef to clear the
840
- previous IgnoreTags list. Default is undef.
848
+ Comma-separated list of tag names to ignore when reading. This may help in
849
+ situations where memory is limited because the ignored tag values are not
850
+ stored in memory. The tag names are case insensitive and group names and
851
+ wildcards are not allowed. A special tag name of "All" may be used to
852
+ ignore all tags except those specified by the L</RequestTags> option. Set
853
+ to undef to clear the previous IgnoreTags list. Default is undef.
841
854
 
842
855
  =item ImageHashType
843
856
 
@@ -948,6 +961,14 @@ by the value of the Charset option at processing time. Default is undef.
948
961
  Flag to enable automatic print conversion. Also enables inverse
949
962
  print conversion for writing. Default is 1.
950
963
 
964
+ =item PrintCSV
965
+
966
+ Flag to directly print CSV-format output rather than extracting tags
967
+ normally. Currently this feature applies only to GM PDR data (see
968
+ L<Image::ExifTool::TagNames/GM Tags>). Setting this option automatically
969
+ sets L</IgnoreTags> to "all", and L</ExtractEmbedded> to 1. Default is
970
+ undef.
971
+
951
972
  =item QuickTimeHandler
952
973
 
953
974
  Flag set to add an 'mdir' Handler to a newly created Meta box when adding
@@ -998,8 +1019,7 @@ the list. Default is undef.
998
1019
 
999
1020
  Flag to save EXIF/TIFF format type as the family 6 group name when
1000
1021
  extracting information. Without this option set, the family 6 group names
1001
- are not generated. Default is undef. See the L</GetGroup> option for more
1002
- details.
1022
+ are not generated. Default is undef. See L</GetGroup> for more details.
1003
1023
 
1004
1024
  =item SavePath
1005
1025
 
@@ -1086,10 +1106,12 @@ Output file reference for Verbose and HtmlDump options. Default is
1086
1106
 
1087
1107
  =item TimeZone
1088
1108
 
1089
- Time zone for local date/time values. May be set to any valid TZ string.
1090
- Uses the system time zone if not specified. Default is undef. (Requires
1091
- POSIX::tzset, which may not be available in Windows. A work-around in
1092
- Windows is to C<set TZ=E<lt>zoneE<gt>> before running ExifTool.)
1109
+ Set the time zone for local date/time values. The value is a time zone
1110
+ offset like "+05:00" (but note that the offset is to UTC, not from UTC, so
1111
+ it is positive for western time zones), or a time zone name like "EST5EDT".
1112
+ For Unix-based systems, the value may also be a time zone ID like
1113
+ "America/New_York". Requires Time::Piece on Windows, or POSIX::tzset on
1114
+ other systems. Default is undef.
1093
1115
 
1094
1116
  =item Unknown
1095
1117
 
@@ -1213,7 +1235,7 @@ L</ExtractInfo>:
1213
1235
 
1214
1236
  Binary, Charset, CharsetEXIF, CharsetFileName, CharsetID3, CharsetIPTC,
1215
1237
  CharsetPhotoshop, CharsetQuickTime, CharsetRIFF, Composite, ExtendedXMP,
1216
- ExtractEmbedded, FastScan, FixBase, HtmlDump, HtmlDumpBase,
1238
+ ExtractEmbedded, FastScan, FixBase, HtmlDump, HtmlDumpBase, IgnoreGroups,
1217
1239
  IgnoreMinorErrors, IgnoreTags, Lang, LargeFileSupport, MakerNotes,
1218
1240
  MDItemTags, NoPDFList, Password, QuickTimeUTC (enforced 1904 time zero),
1219
1241
  RequestAll, RequestTags, SaveFormat, SavePath, ScanForXMP, Struct, TextOut,
@@ -2473,14 +2495,14 @@ Here is a complete list of groups for each of these families:
2473
2495
  AAC, AFCP, AIFF, APE, APP0, APP1, APP11, APP12, APP13, APP14, APP15, APP2,
2474
2496
  APP3, APP4, APP5, APP6, APP7, APP8, APP9, ASF, Audible, Canon, CanonVRD,
2475
2497
  Composite, DICOM, DNG, DV, DjVu, Ducky, EXE, EXIF, ExifTool, FITS, FLAC,
2476
- FLIR, File, Flash, FlashPix, Font, FotoStation, GIF, GIMP, GeoTiff, GoPro,
2477
- H264, HTML, ICC_Profile, ID3, IPTC, ISO, ITC, JFIF, JPEG, JSON, JUMBF,
2478
- Jpeg2000, LNK, Leaf, Lytro, M2TS, MIE, MIFF, MISB, MNG, MOI, MPC, MPEG, MPF,
2479
- MXF, MakerNotes, Matroska, Meta, Ogg, OpenEXR, Opus, PDF, PICT, PLIST, PNG,
2480
- PSP, Palm, PanasonicRaw, Parrot, PhotoCD, PhotoMechanic, Photoshop,
2481
- PostScript, PrintIM, QuickTime, RAF, RIFF, RSRC, RTF, Radiance, Rawzor,
2482
- Real, Red, SVG, SigmaRaw, Sony, Stim, Theora, Torrent, Trailer, VCard,
2483
- Vorbis, WTV, XML, XMP, ZIP
2498
+ FLIR, File, Flash, FlashPix, Font, FotoStation, GIF, GIMP, GM, GeoTiff,
2499
+ GoPro, H264, HTML, ICC_Profile, ID3, IPTC, ISO, ITC, JFIF, JPEG, JSON,
2500
+ JUMBF, Jpeg2000, LNK, Leaf, Lytro, M2TS, MIE, MIFF, MISB, MNG, MOI, MPC,
2501
+ MPEG, MPF, MXF, MakerNotes, Matroska, Meta, Ogg, OpenEXR, Opus, PDF, PICT,
2502
+ PLIST, PNG, PSP, Palm, PanasonicRaw, Parrot, PhotoCD, PhotoMechanic,
2503
+ Photoshop, PostScript, PrintIM, QuickTime, RAF, RIFF, RSRC, RTF, Radiance,
2504
+ Rawzor, Real, Red, SVG, SigmaRaw, Sony, Stim, Theora, Torrent, Trailer,
2505
+ VCard, Vorbis, WTV, XML, XMP, ZIP
2484
2506
 
2485
2507
  =item Family 1 (Specific Location):
2486
2508
 
@@ -2488,7 +2510,7 @@ AAC, AC3, AFCP, AIFF, APE, ASF, AVI1, Adobe, AdobeCM, AdobeDNG, Apple,
2488
2510
  Audible, CBOR, CIFF, CameraIFD, Canon, CanonCustom, CanonDR4, CanonRaw,
2489
2511
  CanonVRD, Casio, Chapter#, Composite, DICOM, DJI, DNG, DV, DjVu, DjVu-Meta,
2490
2512
  Ducky, EPPIM, EXE, EXIF, ExifIFD, ExifTool, FITS, FLAC, FLIR, File, Flash,
2491
- FlashPix, Font, FotoStation, FujiFilm, FujiIFD, GE, GIF, GIMP, GPS,
2513
+ FlashPix, Font, FotoStation, FujiFilm, FujiIFD, GE, GIF, GIMP, GM, GPS,
2492
2514
  GSpherical, Garmin, GeoTiff, GlobParamIFD, GoPro, GraphConv, H264, HP, HTC,
2493
2515
  HTML, HTML-dc, HTML-ncc, HTML-office, HTML-prod, HTML-vw96, HTTP-equiv,
2494
2516
  ICC-chrm, ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-view, ICC_Profile,
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 12.80
3
+ Version: 12.84
4
4
  Release: 1
5
5
  License: Artistic/GPL
6
6
  Group: Development/Libraries/Perl
@@ -21,10 +21,10 @@
21
21
  # 10) Copy zip archive to web servers.
22
22
  # 11) Update zip file version in link and text of html/index.html.
23
23
  #------------------------------------------------------------------------------
24
- -T exiftool-12.80
25
- #--info=FileVersion=12.8.0.0
26
- #--info=ProductVersion=12.8.0.0
27
- ##"--info=Build Date=2024:03:19 14:33:58-04:00"
24
+ -T exiftool-12.84
25
+ #--info=FileVersion=12.8.4.0
26
+ #--info=ProductVersion=12.8.4.0
27
+ ##"--info=Build Date=2024:04:23 11:39:08-04:00"
28
28
  ##"--info=Bundled Perl Version=ActivePerl 5.24.0"
29
29
  ##"--info=LegalCopyright=Copyright (c) 2003-2024, Phil Harvey"
30
30
  ##"--info=ProductName=ExifTool"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "exiftool-vendored.pl",
3
- "version": "12.80.0",
3
+ "version": "12.84.0",
4
4
  "description": "Vendored perl ExifTool for Node.js",
5
5
  "main": "./index.js",
6
6
  "homepage": "https://github.com/mceachen/exiftool-vendored.pl#readme",
@@ -41,8 +41,8 @@
41
41
  }
42
42
  },
43
43
  "devDependencies": {
44
- "mocha": "^10.3.0",
45
- "npm-check-updates": "^16.14.17",
44
+ "mocha": "^10.4.0",
45
+ "npm-check-updates": "^16.14.20",
46
46
  "prettier": "^3.2.5"
47
47
  }
48
48
  }