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.
- package/bin/Changes +81 -0
- package/bin/MANIFEST +6 -18
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +4 -2
- package/bin/build_geolocation +872 -0
- package/bin/config_files/example.config +2 -2
- package/bin/exiftool +61 -17
- package/bin/fmt_files/gpx.fmt +2 -1
- package/bin/fmt_files/gpx_wpt.fmt +2 -1
- package/bin/lib/Image/ExifTool/Apple.pm +51 -7
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +47 -31
- package/bin/lib/Image/ExifTool/CanonVRD.pm +19 -6
- package/bin/lib/Image/ExifTool/DJI.pm +29 -0
- package/bin/lib/Image/ExifTool/Exif.pm +19 -2
- package/bin/lib/Image/ExifTool/FujiFilm.pm +20 -7
- package/bin/lib/Image/ExifTool/GM.pm +552 -0
- package/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/lib/Image/ExifTool/Geolocation.pm +423 -178
- package/bin/lib/Image/ExifTool/Geotag.pm +26 -13
- package/bin/lib/Image/ExifTool/M2TS.pm +32 -4
- package/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
- package/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
- package/bin/lib/Image/ExifTool/Nikon.pm +337 -27
- package/bin/lib/Image/ExifTool/NikonCustom.pm +55 -1
- package/bin/lib/Image/ExifTool/Olympus.pm +1 -0
- package/bin/lib/Image/ExifTool/OpenEXR.pm +21 -3
- package/bin/lib/Image/ExifTool/PNG.pm +3 -3
- package/bin/lib/Image/ExifTool/QuickTime.pm +45 -24
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +66 -30
- package/bin/lib/Image/ExifTool/README +2 -0
- package/bin/lib/Image/ExifTool/Sony.pm +16 -7
- package/bin/lib/Image/ExifTool/TagLookup.pm +4827 -4778
- package/bin/lib/Image/ExifTool/TagNames.pod +953 -620
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +32 -9
- package/bin/lib/Image/ExifTool/Writer.pl +169 -130
- package/bin/lib/Image/ExifTool/XMP.pm +4 -2
- package/bin/lib/Image/ExifTool/XMP2.pl +3 -0
- package/bin/lib/Image/ExifTool.pm +106 -48
- package/bin/lib/Image/ExifTool.pod +47 -25
- package/bin/perl-Image-ExifTool.spec +1 -1
- package/bin/pp_build_exe.args +4 -4
- 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.
|
|
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' }
|
|
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
|
-
|
|
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 $
|
|
1994
|
-
|
|
1995
|
-
|
|
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 @
|
|
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 ? "
|
|
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 =
|
|
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
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
4342
|
-
|
|
4343
|
-
|
|
4344
|
-
|
|
4345
|
-
|
|
4346
|
-
my $
|
|
4347
|
-
foreach $
|
|
4348
|
-
|
|
4349
|
-
|
|
4350
|
-
$self->FoundTag(
|
|
4351
|
-
$self->FoundTag(
|
|
4352
|
-
$self->FoundTag(
|
|
4353
|
-
$self->FoundTag(
|
|
4354
|
-
$self->FoundTag(
|
|
4355
|
-
$self->FoundTag(
|
|
4356
|
-
$self->FoundTag(
|
|
4357
|
-
$self->FoundTag(
|
|
4358
|
-
$self->FoundTag(
|
|
4359
|
-
|
|
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,
|
|
736
|
-
and Other
|
|
737
|
-
|
|
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
|
-
|
|
836
|
-
memory is limited because the ignored tag values are not
|
|
837
|
-
The tag names are case insensitive and group names and
|
|
838
|
-
allowed. A special tag name of "All" may be used to
|
|
839
|
-
those specified by the L</RequestTags> option. Set
|
|
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
|
|
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
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
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,
|
|
2477
|
-
H264, HTML, ICC_Profile, ID3, IPTC, ISO, ITC, JFIF, JPEG, JSON,
|
|
2478
|
-
Jpeg2000, LNK, Leaf, Lytro, M2TS, MIE, MIFF, MISB, MNG, MOI, MPC,
|
|
2479
|
-
MXF, MakerNotes, Matroska, Meta, Ogg, OpenEXR, Opus, PDF, PICT,
|
|
2480
|
-
PSP, Palm, PanasonicRaw, Parrot, PhotoCD, PhotoMechanic,
|
|
2481
|
-
PostScript, PrintIM, QuickTime, RAF, RIFF, RSRC, RTF, Radiance,
|
|
2482
|
-
Real, Red, SVG, SigmaRaw, Sony, Stim, Theora, Torrent, Trailer,
|
|
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,
|
package/bin/pp_build_exe.args
CHANGED
|
@@ -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.
|
|
25
|
-
#--info=FileVersion=12.8.
|
|
26
|
-
#--info=ProductVersion=12.8.
|
|
27
|
-
##"--info=Build Date=2024:
|
|
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.
|
|
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.
|
|
45
|
-
"npm-check-updates": "^16.14.
|
|
44
|
+
"mocha": "^10.4.0",
|
|
45
|
+
"npm-check-updates": "^16.14.20",
|
|
46
46
|
"prettier": "^3.2.5"
|
|
47
47
|
}
|
|
48
48
|
}
|