exiftool-vendored.exe 12.76.0 → 12.80.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/exiftool_files/Changes +79 -4
- package/bin/exiftool_files/README +3 -3
- package/bin/exiftool_files/config_files/acdsee.config +37 -57
- package/bin/exiftool_files/config_files/example.config +16 -2
- package/bin/exiftool_files/exiftool.pl +87 -29
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +12 -9
- package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +7 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +52 -4
- package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +3 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +5 -3
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/cs.pm +978 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/de.pm +1975 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/en_ca.pm +44 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/en_gb.pm +124 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/es.pm +2921 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/fi.pm +1116 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/fr.pm +3171 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/it.pm +2750 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/ja.pm +10256 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/ko.pm +4499 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/nl.pm +1270 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/pl.pm +3019 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/ru.pm +18220 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/sk.pm +441 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/sv.pm +714 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/tr.pm +452 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/zh_cn.pm +2225 -0
- package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/zh_tw.pm +72 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.pm +775 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +8 -1
- package/bin/exiftool_files/lib/Image/ExifTool/HtmlDump.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Import.pm +5 -2
- package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +15 -10
- package/bin/exiftool_files/lib/Image/ExifTool/MWG.pm +1 -0
- package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +19 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Ogg.pm +3 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +3 -1
- package/bin/exiftool_files/lib/Image/ExifTool/OpenEXR.pm +17 -17
- package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +5 -5
- package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +183 -11
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +253 -237
- package/bin/exiftool_files/lib/Image/ExifTool/README +6 -5
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +2624 -2520
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +184 -4
- package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +15 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +59 -8
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +17 -2
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +64 -0
- package/bin/exiftool_files/lib/Image/ExifTool.pm +249 -47
- package/bin/exiftool_files/lib/Image/ExifTool.pod +57 -25
- 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.80';
|
|
33
33
|
$RELEASE = '';
|
|
34
34
|
@ISA = qw(Exporter);
|
|
35
35
|
%EXPORT_TAGS = (
|
|
@@ -103,6 +103,7 @@ sub VerboseValue($$$;$);
|
|
|
103
103
|
sub VPrint($$@);
|
|
104
104
|
sub Rationalize($;$);
|
|
105
105
|
sub Write($@);
|
|
106
|
+
sub GetGeolocateTags($$;$);
|
|
106
107
|
sub WriteTrailerBuffer($$$);
|
|
107
108
|
sub AddNewTrailers($;@);
|
|
108
109
|
sub Tell($);
|
|
@@ -953,7 +954,7 @@ $testLen = 1024; # number of bytes to read when testing for magic number
|
|
|
953
954
|
JPEG => '\xff\xd8\xff',
|
|
954
955
|
JSON => '(\xef\xbb\xbf)?\s*(\[\s*)?\{\s*"[^"]*"\s*:',
|
|
955
956
|
JUMBF=> '.{4}jumb\0.{3}jumd',
|
|
956
|
-
JXL => '\xff\x0a|\0\0\0\x0cJXL \x0d\x0a......ftypjxl ',
|
|
957
|
+
JXL => '(\xff\x0a|\0\0\0\x0cJXL \x0d\x0a......ftypjxl )',
|
|
957
958
|
LFP => '\x89LFP\x0d\x0a\x1a\x0a',
|
|
958
959
|
LIF => '\x70\0{3}.{4}\x2a.{4}<\0',
|
|
959
960
|
LNK => '.{4}\x01\x14\x02\0{5}\xc0\0{6}\x46',
|
|
@@ -1101,6 +1102,10 @@ my @availableOptions = (
|
|
|
1101
1102
|
[ 'Filter', undef, 'output filter for all tag values' ],
|
|
1102
1103
|
[ 'FilterW', undef, 'input filter when writing tag values' ],
|
|
1103
1104
|
[ 'FixBase', undef, 'fix maker notes base offsets' ],
|
|
1105
|
+
[ 'Geolocation', undef, 'generate geolocation tags' ],
|
|
1106
|
+
[ 'GeolocFeature', undef, 'regular expression of geolocation features to match' ],
|
|
1107
|
+
[ 'GeolocMinPop', undef, 'minimum geolocation population' ],
|
|
1108
|
+
[ 'GeolocMaxDist', undef, 'maximum geolocation distance' ],
|
|
1104
1109
|
[ 'GeoMaxIntSecs', 1800, 'geotag maximum interpolation time (secs)' ],
|
|
1105
1110
|
[ 'GeoMaxExtSecs', 1800, 'geotag maximum extrapolation time (secs)' ],
|
|
1106
1111
|
[ 'GeoMaxHDOP', undef, 'geotag maximum HDOP' ],
|
|
@@ -1168,6 +1173,7 @@ my @defaultWriteGroups = qw(
|
|
|
1168
1173
|
|
|
1169
1174
|
# group hash for ExifTool-generated tags
|
|
1170
1175
|
my %allGroupsExifTool = ( 0 => 'ExifTool', 1 => 'ExifTool', 2 => 'ExifTool' );
|
|
1176
|
+
my %geoInfo = ( Groups => { 0 => 'ExifTool', 1 => 'ExifTool', 2 => 'Location' }, Priority => 0 );
|
|
1171
1177
|
|
|
1172
1178
|
# special tag names (not used for tag info)
|
|
1173
1179
|
%specialTags = map { $_ => 1 } qw(
|
|
@@ -1197,7 +1203,7 @@ sub DummyWriteProc { return 1; }
|
|
|
1197
1203
|
|
|
1198
1204
|
my %systemTagsNotes = (
|
|
1199
1205
|
Notes => q{
|
|
1200
|
-
extracted only if specifically requested or the L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll>
|
|
1206
|
+
extracted only if specifically requested or the API L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll>
|
|
1201
1207
|
option is set
|
|
1202
1208
|
},
|
|
1203
1209
|
);
|
|
@@ -1480,7 +1486,7 @@ my %systemTagsNotes = (
|
|
|
1480
1486
|
FileAttributes => {
|
|
1481
1487
|
Groups => { 1 => 'System', 2 => 'Other' },
|
|
1482
1488
|
Notes => q{
|
|
1483
|
-
extracted only if specifically requested or the L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll>
|
|
1489
|
+
extracted only if specifically requested or the API L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll>
|
|
1484
1490
|
option is set. 2 or 3 values: 0. File type, 1. Attribute bits, 2. Windows
|
|
1485
1491
|
attribute bits if Win32API::File is available
|
|
1486
1492
|
},
|
|
@@ -1535,7 +1541,7 @@ my %systemTagsNotes = (
|
|
|
1535
1541
|
FileUserID => {
|
|
1536
1542
|
Groups => { 1 => 'System', 2 => 'Other' },
|
|
1537
1543
|
Notes => q{
|
|
1538
|
-
extracted only if specifically requested or the L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll>
|
|
1544
|
+
extracted only if specifically requested or the API L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll>
|
|
1539
1545
|
option is set. Returns user ID number with the -n option, or name
|
|
1540
1546
|
otherwise. May be written with either user name or number
|
|
1541
1547
|
},
|
|
@@ -1549,7 +1555,7 @@ my %systemTagsNotes = (
|
|
|
1549
1555
|
FileGroupID => {
|
|
1550
1556
|
Groups => { 1 => 'System', 2 => 'Other' },
|
|
1551
1557
|
Notes => q{
|
|
1552
|
-
extracted only if specifically requested or the L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll>
|
|
1558
|
+
extracted only if specifically requested or the API L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll>
|
|
1553
1559
|
option is set. Returns group ID number with the -n option, or name
|
|
1554
1560
|
otherwise. May be written with either group name or number
|
|
1555
1561
|
},
|
|
@@ -1749,6 +1755,11 @@ my %systemTagsNotes = (
|
|
|
1749
1755
|
Notes => 'PDF-format embedded preview image',
|
|
1750
1756
|
Binary => 1,
|
|
1751
1757
|
},
|
|
1758
|
+
PreviewJXL => {
|
|
1759
|
+
Groups => { 2 => 'Preview' },
|
|
1760
|
+
Notes => 'JXL-format embedded preview image',
|
|
1761
|
+
Binary => 1,
|
|
1762
|
+
},
|
|
1752
1763
|
ExifByteOrder => {
|
|
1753
1764
|
Writable => 1,
|
|
1754
1765
|
DelCheck => q{"Can't delete"},
|
|
@@ -1787,7 +1798,7 @@ my %systemTagsNotes = (
|
|
|
1787
1798
|
Groups => { 0 => 'ExifTool', 1 => 'ExifTool', 2 => 'Other' },
|
|
1788
1799
|
Notes => q{
|
|
1789
1800
|
the clock time in seconds taken by ExifTool to extract information from this
|
|
1790
|
-
file. Not generated unless specifically requested or the L<RequestAll|../ExifTool.html#RequestAll>
|
|
1801
|
+
file. Not generated unless specifically requested or the API L<RequestAll|../ExifTool.html#RequestAll>
|
|
1791
1802
|
option is set. Requires Time::HiRes
|
|
1792
1803
|
},
|
|
1793
1804
|
PrintConv => 'sprintf("%.3g s", $val)',
|
|
@@ -1928,7 +1939,7 @@ my %systemTagsNotes = (
|
|
|
1928
1939
|
Groups => { 0 => 'Trailer' },
|
|
1929
1940
|
Notes => q{
|
|
1930
1941
|
the full JPEG trailer data block. Extracted only if specifically requested
|
|
1931
|
-
or the API RequestAll option is set to 3 or higher
|
|
1942
|
+
or the API L<RequestAll|../ExifTool.html#RequestAll> option is set to 3 or higher
|
|
1932
1943
|
},
|
|
1933
1944
|
Writable => 1,
|
|
1934
1945
|
Protected => 1,
|
|
@@ -1957,6 +1968,83 @@ my %systemTagsNotes = (
|
|
|
1957
1968
|
the this hash value and the hash type in the file.
|
|
1958
1969
|
},
|
|
1959
1970
|
},
|
|
1971
|
+
Geolocate => {
|
|
1972
|
+
Writable => 1,
|
|
1973
|
+
WriteOnly => 1,
|
|
1974
|
+
WriteNothing => 1,
|
|
1975
|
+
AllowGroup => '(exif|gps|xmp|xmp-exif|xmp-iptcext|xmp-iptccore|xmp-photoshop|iptc|quicktime|itemlist|keys|userdata)',
|
|
1976
|
+
Notes => q{
|
|
1977
|
+
this write-only tag may be used to write geolocation city, region, country
|
|
1978
|
+
code and country based in input GPS coordinates, or to write GPS
|
|
1979
|
+
coordinates based on geolocation name. See the
|
|
1980
|
+
L<Writing section of the Geolocation page|../geolocation.html#Write> for
|
|
1981
|
+
details. This tag is writable regardless of the API L<Geolocation|../ExifTool.html#Geolocation>
|
|
1982
|
+
option setting
|
|
1983
|
+
},
|
|
1984
|
+
DelCheck => q{
|
|
1985
|
+
my @tags = $self->GetGeolocateTags($wantGroup);
|
|
1986
|
+
$self->SetNewValue($_) foreach @tags;
|
|
1987
|
+
return '';
|
|
1988
|
+
},
|
|
1989
|
+
ValueConvInv => q{
|
|
1990
|
+
require Image::ExifTool::Geolocation;
|
|
1991
|
+
return $val if lc($val) eq 'geotag';
|
|
1992
|
+
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)) {
|
|
1997
|
+
warn "$$self{VALUE}{Warning}\n";
|
|
1998
|
+
return '';
|
|
1999
|
+
}
|
|
2000
|
+
my @tags = $self->GetGeolocateTags($wantGroup, defined $$geo[10] ? 0 : 1);
|
|
2001
|
+
my %geoNum = ( City => 0, Province => 1, State => 1, Code => 3, Country => 4,
|
|
2002
|
+
Coordinates => 89, Latitude => 8, Longitude => 9 );
|
|
2003
|
+
my ($tag, $value);
|
|
2004
|
+
foreach $tag (@tags) {
|
|
2005
|
+
if ($tag =~ /GPS(Coordinates|Latitude|Longitude)?/) {
|
|
2006
|
+
$value = $geoNum{$1} == 89 ? "$$geo[8],$$geo[9]" : $$geo[$geoNum{$1}];
|
|
2007
|
+
} elsif ($tag =~ /(Code)/ or $tag =~ /(City|Province|State|Country)/) {
|
|
2008
|
+
$value = $$geo[$geoNum{$1}];
|
|
2009
|
+
next unless defined $value;
|
|
2010
|
+
$value = $self->Decode($value,'UTF8');
|
|
2011
|
+
$value .= ' ' if $tag eq 'iptc:Country-PrimaryLocationCode'; # (IPTC requires 3-char code)
|
|
2012
|
+
} else {
|
|
2013
|
+
next; # (shouldn't happen)
|
|
2014
|
+
}
|
|
2015
|
+
$self->SetNewValue($tag => $value, Type => 'PrintConv');
|
|
2016
|
+
}
|
|
2017
|
+
return '';
|
|
2018
|
+
},
|
|
2019
|
+
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";
|
|
2027
|
+
},
|
|
2028
|
+
},
|
|
2029
|
+
GeolocationBearing => { %geoInfo,
|
|
2030
|
+
Notes => q{
|
|
2031
|
+
compass bearing to GeolocationCity center. Geolocation tags are
|
|
2032
|
+
generated only if API L<Geolocation|../ExifTool.html#Geolocation> option is set
|
|
2033
|
+
},
|
|
2034
|
+
},
|
|
2035
|
+
GeolocationCity => { %geoInfo, Notes => 'name of city nearest to the current GPS coordinates', ValueConv => '$self->Decode($val,"UTF8")' },
|
|
2036
|
+
GeolocationRegion => { %geoInfo, Notes => 'geolocation state, province or region', ValueConv => '$self->Decode($val,"UTF8")' },
|
|
2037
|
+
GeolocationSubregion=> { %geoInfo, Notes => 'geolocation county or subregion', ValueConv => '$self->Decode($val,"UTF8")' },
|
|
2038
|
+
GeolocationCountry => { %geoInfo, Notes => 'geolocation country name', ValueConv => '$self->Decode($val,"UTF8")' },
|
|
2039
|
+
GeolocationCountryCode=>{%geoInfo, Notes => 'geolocation country code' },
|
|
2040
|
+
GeolocationTimeZone => { %geoInfo, Notes => 'geolocation time zone name' },
|
|
2041
|
+
GeolocationFeatureCode=>{%geoInfo, Notes => 'feature code, see L<http://www.geonames.org/export/codes.html#P>' },
|
|
2042
|
+
GeolocationPopulation=>{ %geoInfo, Notes => 'city population rounded to 2 significant digits' },
|
|
2043
|
+
GeolocationDistance => { %geoInfo, Notes => 'distance in km from current GPS to city', PrintConv => '"$val km"' },
|
|
2044
|
+
GeolocationPosition => { %geoInfo, Notes => 'approximate GPS coordinates of city',
|
|
2045
|
+
PrintConv => '$val =~ s/ /, /; $val',
|
|
2046
|
+
},
|
|
2047
|
+
GeolocationWarning => { %geoInfo },
|
|
1960
2048
|
);
|
|
1961
2049
|
|
|
1962
2050
|
# tags defined by UserParam option (added at runtime)
|
|
@@ -2563,6 +2651,7 @@ sub ExtractInfo($;@)
|
|
|
2563
2651
|
}
|
|
2564
2652
|
# initialize ExifTool object members
|
|
2565
2653
|
$self->Init();
|
|
2654
|
+
$$self{InExtract} = 1; # set flag indicating we are inside ExtractInfo
|
|
2566
2655
|
|
|
2567
2656
|
delete $$self{MAKER_NOTE_FIXUP}; # fixup information for extracted maker notes
|
|
2568
2657
|
delete $$self{MAKER_NOTE_BYTE_ORDER};
|
|
@@ -2738,8 +2827,9 @@ sub ExtractInfo($;@)
|
|
|
2738
2827
|
if ($isDir or (defined $stat[2] and ($stat[2] & 0170000) == 0040000)) {
|
|
2739
2828
|
$self->FoundTag('FileType', 'DIR');
|
|
2740
2829
|
$self->FoundTag('FileTypeExtension', '');
|
|
2741
|
-
$self->
|
|
2830
|
+
$self->DoneExtract();
|
|
2742
2831
|
$raf->Close() if $raf;
|
|
2832
|
+
delete $$self{InExtract} unless $reEntry;
|
|
2743
2833
|
return 1;
|
|
2744
2834
|
}
|
|
2745
2835
|
# get list of file types to check
|
|
@@ -2756,7 +2846,7 @@ sub ExtractInfo($;@)
|
|
|
2756
2846
|
} else {
|
|
2757
2847
|
$self->Error('Unknown file type');
|
|
2758
2848
|
}
|
|
2759
|
-
$self->
|
|
2849
|
+
$self->DoneExtract();
|
|
2760
2850
|
last; # don't read the file
|
|
2761
2851
|
}
|
|
2762
2852
|
if (@fileTypeList) {
|
|
@@ -2924,7 +3014,7 @@ sub ExtractInfo($;@)
|
|
|
2924
3014
|
}
|
|
2925
3015
|
unless ($reEntry) {
|
|
2926
3016
|
$$self{PATH} = [ ]; # reset PATH
|
|
2927
|
-
$self->
|
|
3017
|
+
$self->DoneExtract();
|
|
2928
3018
|
# do our HTML dump if requested
|
|
2929
3019
|
if ($$self{HTML_DUMP}) {
|
|
2930
3020
|
$raf->Seek(0, 2); # seek to end of file
|
|
@@ -2959,27 +3049,10 @@ sub ExtractInfo($;@)
|
|
|
2959
3049
|
last; # (loop was a cheap "goto")
|
|
2960
3050
|
}
|
|
2961
3051
|
|
|
2962
|
-
#
|
|
2963
|
-
|
|
2964
|
-
Image::ExifTool::Validate::FinishValidate($self, $$req{validate});
|
|
2965
|
-
}
|
|
2966
|
-
|
|
3052
|
+
# Note: This should be the only tag generated after BuildCompositeTags,
|
|
3053
|
+
# and as such it can't be used in user-defined Composite tags
|
|
2967
3054
|
@startTime and $self->FoundTag('ProcessingTime', Time::HiRes::tv_interval(\@startTime));
|
|
2968
3055
|
|
|
2969
|
-
# add user-defined parameters that ended with '!'
|
|
2970
|
-
if (%{$$options{UserParam}}) {
|
|
2971
|
-
my $doMsg = $$options{Verbose};
|
|
2972
|
-
my $table = GetTagTable('Image::ExifTool::UserParam');
|
|
2973
|
-
foreach (sort keys %{$$options{UserParam}}) {
|
|
2974
|
-
next unless /#$/;
|
|
2975
|
-
if ($doMsg) {
|
|
2976
|
-
$self->VPrint(0, "UserParam tags:\n");
|
|
2977
|
-
undef $doMsg;
|
|
2978
|
-
}
|
|
2979
|
-
$self->HandleTag($table, $_, $$options{UserParam}{$_});
|
|
2980
|
-
}
|
|
2981
|
-
}
|
|
2982
|
-
|
|
2983
3056
|
# restore original options
|
|
2984
3057
|
%saveOptions and $$self{OPTIONS} = \%saveOptions;
|
|
2985
3058
|
|
|
@@ -2987,14 +3060,8 @@ sub ExtractInfo($;@)
|
|
|
2987
3060
|
# restore necessary members when exiting re-entrant code
|
|
2988
3061
|
$$self{$_} = $$reEntry{$_} foreach keys %$reEntry;
|
|
2989
3062
|
SetByteOrder($saveOrder);
|
|
2990
|
-
} elsif ($$self{ImageDataHash}) {
|
|
2991
|
-
my $digest = $$self{ImageDataHash}->hexdigest;
|
|
2992
|
-
# (don't store empty digest)
|
|
2993
|
-
$self->FoundTag(ImageDataHash => $digest) unless
|
|
2994
|
-
$digest eq 'd41d8cd98f00b204e9800998ecf8427e' or
|
|
2995
|
-
$digest eq 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' or
|
|
2996
|
-
$digest eq 'cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e';
|
|
2997
3063
|
}
|
|
3064
|
+
delete $$self{InExtract} unless $reEntry;
|
|
2998
3065
|
|
|
2999
3066
|
# ($type may be undef without an Error when processing sub-documents)
|
|
3000
3067
|
return 0 if not defined $type or exists $$self{VALUE}{Error};
|
|
@@ -3014,8 +3081,13 @@ sub GetInfo($;@)
|
|
|
3014
3081
|
{
|
|
3015
3082
|
local $_;
|
|
3016
3083
|
my $self = shift;
|
|
3017
|
-
my %saveOptions;
|
|
3084
|
+
my (%saveOptions, @saveMembers, @savedMembers);
|
|
3018
3085
|
|
|
3086
|
+
# save necessary members to allow GetInfo to be called from within ExtractInfo
|
|
3087
|
+
if ($$self{InExtract}) {
|
|
3088
|
+
@saveMembers = qw(REQUESTED_TAGS REQ_TAG_LOOKUP IO_TAG_LIST);
|
|
3089
|
+
@savedMembers = @$self{@saveMembers};
|
|
3090
|
+
}
|
|
3019
3091
|
unless (@_ and not defined $_[0]) {
|
|
3020
3092
|
%saveOptions = %{$$self{OPTIONS}}; # save original options
|
|
3021
3093
|
# must set FILENAME so it isn't parsed from the arguments
|
|
@@ -3098,8 +3170,9 @@ sub GetInfo($;@)
|
|
|
3098
3170
|
@{$$self{IO_TAG_LIST}} = $self->GetTagList($rtnTags, $sort, $$self{OPTIONS}{Sort2});
|
|
3099
3171
|
}
|
|
3100
3172
|
|
|
3101
|
-
# restore original options
|
|
3173
|
+
# restore original options and member variables
|
|
3102
3174
|
%saveOptions and $$self{OPTIONS} = \%saveOptions;
|
|
3175
|
+
@$self{@saveMembers} = @savedMembers if @saveMembers;
|
|
3103
3176
|
|
|
3104
3177
|
return \%info;
|
|
3105
3178
|
}
|
|
@@ -4164,17 +4237,145 @@ sub CombineInfo($;@)
|
|
|
4164
4237
|
}
|
|
4165
4238
|
|
|
4166
4239
|
#------------------------------------------------------------------------------
|
|
4167
|
-
#
|
|
4240
|
+
# Finish generating tags after extracting information from a file
|
|
4168
4241
|
# Inputs: 0) ExifTool ref
|
|
4169
|
-
# Notes:
|
|
4170
|
-
#
|
|
4171
|
-
#
|
|
4172
|
-
|
|
4242
|
+
# Notes: The sequencing here is a bit tricky because tags from the main file
|
|
4243
|
+
# may be used in the names of alternate files, so we finish generating
|
|
4244
|
+
# all main file tags first (including all Composite tags which don't
|
|
4245
|
+
# rely on alternate files) before extracting tags from alternate files,
|
|
4246
|
+
# then we finish by generating the remaingin Composite tags.
|
|
4247
|
+
sub DoneExtract($)
|
|
4173
4248
|
{
|
|
4174
4249
|
my $self = shift;
|
|
4175
4250
|
# extract information from alternate files if necessary
|
|
4176
4251
|
my ($g8, $altExifTool);
|
|
4177
4252
|
my $opts = $$self{OPTIONS};
|
|
4253
|
+
|
|
4254
|
+
# generate ImageDataHash if requested
|
|
4255
|
+
if ($$self{ImageDataHash}) {
|
|
4256
|
+
my $digest = $$self{ImageDataHash}->hexdigest;
|
|
4257
|
+
# (don't store empty digest)
|
|
4258
|
+
$self->FoundTag(ImageDataHash => $digest) unless
|
|
4259
|
+
$digest eq 'd41d8cd98f00b204e9800998ecf8427e' or
|
|
4260
|
+
$digest eq 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' or
|
|
4261
|
+
$digest eq 'cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e';
|
|
4262
|
+
}
|
|
4263
|
+
# generate Validate tag if requested
|
|
4264
|
+
if ($$opts{Validate}) {
|
|
4265
|
+
Image::ExifTool::Validate::FinishValidate($self, $$self{REQ_TAG_LOOKUP}{validate});
|
|
4266
|
+
}
|
|
4267
|
+
# generate geolocation tags if requested
|
|
4268
|
+
if ($$opts{Geolocation}) {
|
|
4269
|
+
my ($arg, @defaults, @tags, $tag, @coord, @ref, @city, $doneCity, $both);
|
|
4270
|
+
my $geoOpt = $$opts{Geolocation};
|
|
4271
|
+
my @args = split /\s*,\s*/, $$opts{Geolocation};
|
|
4272
|
+
foreach $arg (@args) {
|
|
4273
|
+
lc $arg eq 'both' and $both = 1, next;
|
|
4274
|
+
$arg !~ s/^\$// and push(@defaults, $arg), next;
|
|
4275
|
+
push @tags, $arg; # argument is a tag name
|
|
4276
|
+
}
|
|
4277
|
+
unless (@tags) {
|
|
4278
|
+
# default tags to read if not specified
|
|
4279
|
+
@tags = qw(GPSLatitude GPSLongitude GPSLatitudeRef GPSLongitudeRef
|
|
4280
|
+
GPSCoordinates LocationShownGPSLatitude LocationShownGPSLongitude
|
|
4281
|
+
XMP:City State CountryCode Country
|
|
4282
|
+
IPTC:City Province-State Country-PrimaryLocationCode Country-PrimaryLocationName
|
|
4283
|
+
LocationShownCity LocationShownProvinceState LocationShownCountryCode LocationShownCountryName);
|
|
4284
|
+
}
|
|
4285
|
+
# get information for specified tags
|
|
4286
|
+
my $info = $self->GetInfo(\@tags, { PrintConv => 0, Duplicates => 0 }); # (returns tags in proper case)
|
|
4287
|
+
$opts = $$self{OPTIONS}; # (necessary because GetInfo changes the OPTIONS hash)
|
|
4288
|
+
foreach $tag (@tags) {
|
|
4289
|
+
my $val = $$info{$tag};
|
|
4290
|
+
next unless defined $val;
|
|
4291
|
+
$self->VPrint(0, "Found $tag ($val)\n");
|
|
4292
|
+
if ($tag =~ /Coordinates/) {
|
|
4293
|
+
next if defined $coord[0] and defined $coord[1];
|
|
4294
|
+
@coord = split ' ', $val;
|
|
4295
|
+
next;
|
|
4296
|
+
}
|
|
4297
|
+
my $n = $tag =~ /Latitude/ ? 0 : ($tag =~ /Longitude/ ? 1 : undef);
|
|
4298
|
+
if (defined $n) {
|
|
4299
|
+
if ($tag =~ /Ref$/) {
|
|
4300
|
+
$ref[$n] = $val unless $ref[$n];
|
|
4301
|
+
} else {
|
|
4302
|
+
$coord[$n] = $val unless defined $coord[$n];
|
|
4303
|
+
}
|
|
4304
|
+
next;
|
|
4305
|
+
}
|
|
4306
|
+
# handle city tags (save info for first city found)
|
|
4307
|
+
if ($tag =~ /City/) {
|
|
4308
|
+
@city and $doneCity = 1, next;
|
|
4309
|
+
push @city, $val;
|
|
4310
|
+
} elsif (@city) {
|
|
4311
|
+
push @city, $val unless $doneCity;
|
|
4312
|
+
next if $doneCity;
|
|
4313
|
+
}
|
|
4314
|
+
}
|
|
4315
|
+
if (defined $coord[0] and defined $coord[1]) {
|
|
4316
|
+
$coord[0] = -$coord[0] if $ref[0] and $coord[0] > 0 and $ref[0] eq 'S';
|
|
4317
|
+
$coord[1] = -$coord[1] if $ref[1] and $coord[1] > 0 and $ref[1] eq 'W';
|
|
4318
|
+
$arg = join ',', @coord;
|
|
4319
|
+
} elsif (@city) {
|
|
4320
|
+
$arg = join ',', @city;
|
|
4321
|
+
}
|
|
4322
|
+
if (not defined $arg) {
|
|
4323
|
+
# use specified default values if no tags found
|
|
4324
|
+
$arg = join ',', @defaults;
|
|
4325
|
+
undef $arg if $arg eq '1';
|
|
4326
|
+
$both = 1; # use 'both' GPS and place names if provided
|
|
4327
|
+
}
|
|
4328
|
+
if ($arg) {
|
|
4329
|
+
$arg .= ',both' if $both;
|
|
4330
|
+
$arg = $self->Encode($arg, 'UTF8');
|
|
4331
|
+
require Image::ExifTool::Geolocation;
|
|
4332
|
+
if ($$opts{Verbose}) {
|
|
4333
|
+
if ($Image::ExifTool::Geolocation::dbInfo) {
|
|
4334
|
+
print "Loaded $Image::ExifTool::Geolocation::dbInfo\n";
|
|
4335
|
+
} else {
|
|
4336
|
+
print "Error loading Geolocation.dat\n";
|
|
4337
|
+
}
|
|
4338
|
+
}
|
|
4339
|
+
local $SIG{'__WARN__'} = \&SetWarning;
|
|
4340
|
+
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];
|
|
4360
|
+
}
|
|
4361
|
+
} elsif ($evalWarning) {
|
|
4362
|
+
$self->Warn(CleanWarning());
|
|
4363
|
+
}
|
|
4364
|
+
}
|
|
4365
|
+
}
|
|
4366
|
+
# generate tags for user-defined parameters that ended with '#'
|
|
4367
|
+
if (%{$$opts{UserParam}}) {
|
|
4368
|
+
my $doMsg = $$opts{Verbose};
|
|
4369
|
+
my $table = GetTagTable('Image::ExifTool::UserParam');
|
|
4370
|
+
foreach (sort keys %{$$opts{UserParam}}) {
|
|
4371
|
+
next unless /#$/;
|
|
4372
|
+
if ($doMsg) {
|
|
4373
|
+
$self->VPrint(0, "UserParam tags:\n");
|
|
4374
|
+
undef $doMsg;
|
|
4375
|
+
}
|
|
4376
|
+
$self->HandleTag($table, $_, $$opts{UserParam}{$_});
|
|
4377
|
+
}
|
|
4378
|
+
}
|
|
4178
4379
|
if ($$opts{Composite} and (not $$opts{FastScan} or $$opts{FastScan} < 5)) {
|
|
4179
4380
|
# build all composite tags except those requiring tags from alternate files
|
|
4180
4381
|
$self->BuildCompositeTags();
|
|
@@ -4185,6 +4386,7 @@ sub ExtractAltInfo($)
|
|
|
4185
4386
|
$$altExifTool{OPTIONS} = $$self{OPTIONS};
|
|
4186
4387
|
$$altExifTool{GLOBAL_TIME_OFFSET} = $$self{GLOBAL_TIME_OFFSET};
|
|
4187
4388
|
$$altExifTool{REQ_TAG_LOOKUP} = $$self{REQ_TAG_LOOKUP};
|
|
4389
|
+
$$altExifTool{ReqTagAlreadySet} = 1;
|
|
4188
4390
|
my $fileName = $$altExifTool{ALT_FILE};
|
|
4189
4391
|
# allow tags from the main file to be used in the alternate file names
|
|
4190
4392
|
# (eg. -file1 '$originalfilename')
|
|
@@ -4554,7 +4756,7 @@ sub ParseArguments($;@)
|
|
|
4554
4756
|
my (@exclude, $wasExcludeOpt);
|
|
4555
4757
|
|
|
4556
4758
|
$$self{REQUESTED_TAGS} = [ ];
|
|
4557
|
-
$$self{REQ_TAG_LOOKUP} = { };
|
|
4759
|
+
$$self{REQ_TAG_LOOKUP} = { } unless $$self{ReqTagAlreadySet};
|
|
4558
4760
|
$$self{EXCL_TAG_LOOKUP} = { };
|
|
4559
4761
|
$$self{IO_TAG_LIST} = undef;
|
|
4560
4762
|
delete $$self{EXCL_XMP_LOOKUP};
|
|
@@ -5811,7 +6013,7 @@ sub Decode($$$;$$$)
|
|
|
5811
6013
|
# Inputs: 0) ExifTool object ref, 1) string, 2) destination character set name,
|
|
5812
6014
|
# 3) optional destination byte order (2-byte and 4-byte fixed-width sets only)
|
|
5813
6015
|
# Returns: string in specified encoding
|
|
5814
|
-
sub Encode(
|
|
6016
|
+
sub Encode($$;$$)
|
|
5815
6017
|
{
|
|
5816
6018
|
my ($self, $val, $to, $toOrder) = @_;
|
|
5817
6019
|
return $self->Decode($val, undef, undef, $to, $toOrder);
|
|
@@ -5892,8 +6094,8 @@ sub MakeTagName($)
|
|
|
5892
6094
|
my $name = shift;
|
|
5893
6095
|
$name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters
|
|
5894
6096
|
$name = ucfirst $name; # capitalize first letter
|
|
5895
|
-
$name = "Tag$name" if length($name) < 2 or $name =~ /^[-0-9]/;
|
|
5896
6097
|
# must at least 2 characters long and not start with - or 0-9-
|
|
6098
|
+
$name = "Tag$name" if length($name) < 2 or $name =~ /^[-0-9]/;
|
|
5897
6099
|
return $name;
|
|
5898
6100
|
}
|
|
5899
6101
|
|
|
@@ -71,7 +71,7 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
71
71
|
3GP r/w | DSS r | JP2 r/w | ODT r | RWL r/w
|
|
72
72
|
7Z r | DV r | JPEG r/w | OFR r | RWZ r
|
|
73
73
|
A r | DVB r/w | JSON r | OGG r | RM r
|
|
74
|
-
AA r | DVR-MS r | JXL r
|
|
74
|
+
AA r | DVR-MS r | JXL r/w | OGV r | SEQ r
|
|
75
75
|
AAC r | DYLIB r | K25 r | ONP r | SKETCH r
|
|
76
76
|
AAE r | EIP r | KDC r | OPUS r | SO r
|
|
77
77
|
AAX r/w | EPS r/w | KEY r | ORF r/w | SR2 r/w
|
|
@@ -592,9 +592,10 @@ Format for printing GPS coordinates. This is a printf format string with
|
|
|
592
592
|
specifiers for degrees, minutes and seconds in that order, however minutes
|
|
593
593
|
and seconds may be omitted. If the hemisphere is known, a reference
|
|
594
594
|
direction (N, S, E or W) is appended to each printed coordinate, but adding
|
|
595
|
-
a C<+> to the first format specifier (eg. C<%+.6f>
|
|
596
|
-
coordinate instead
|
|
597
|
-
|
|
595
|
+
a C<+> or C<-> to the first format specifier (eg. C<%+.6f> or C<%-.6f>)
|
|
596
|
+
prints a signed coordinate instead (C<+> also adds a leading plus sign to
|
|
597
|
+
positive coordinates, while C<-> does not). For example, the following
|
|
598
|
+
table gives the output for the same coordinate using various formats:
|
|
598
599
|
|
|
599
600
|
CoordFormat Example Output
|
|
600
601
|
------------------- ------------------
|
|
@@ -714,6 +715,37 @@ value to be added to the maker notes base offset. It may also be set to the
|
|
|
714
715
|
empty string ('') for ExifTool will take its best guess at the correct base,
|
|
715
716
|
or undef (the default) for no base adjustment.
|
|
716
717
|
|
|
718
|
+
=item Geolocation
|
|
719
|
+
|
|
720
|
+
Flag to generate geolocation tags based on the GPSLatitude/GPSLongitude or
|
|
721
|
+
City/State/Province/Country read from a file. This feature uses an included
|
|
722
|
+
database with cities over a population of 2000 from geonames.org. May be set
|
|
723
|
+
to a string of the form "Lat,Lon" (eg. "44.56,-72.33") or city with optional
|
|
724
|
+
state/province, country and/or country code (eg. "Paris,France") to act as a
|
|
725
|
+
default for files not containing GPS or geolocation information, or include
|
|
726
|
+
tag names with leading dollar signs separated by commas to specify the tags
|
|
727
|
+
to use for the geolocation input. May also include regular expressions for
|
|
728
|
+
more flexible matching. See L<https://exiftool.org/geolocation.html> for
|
|
729
|
+
more details. Default is undef.
|
|
730
|
+
|
|
731
|
+
=item GeolocFeature
|
|
732
|
+
|
|
733
|
+
Comma-separated list of feature codes to include in city search, or exclude
|
|
734
|
+
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.
|
|
738
|
+
|
|
739
|
+
=item GeolocMaxDist
|
|
740
|
+
|
|
741
|
+
Maximum distance in km to the geolocation city. The Geolocation tags are
|
|
742
|
+
not generated if the distance is greater than this. Default is undef.
|
|
743
|
+
|
|
744
|
+
=item GeolocMinPop
|
|
745
|
+
|
|
746
|
+
Minimum population for the Geolocation city. Cities smaller than this are
|
|
747
|
+
ignored. Default is undef.
|
|
748
|
+
|
|
717
749
|
=item GeoMaxIntSecs
|
|
718
750
|
|
|
719
751
|
Maximum interpolation time in seconds for geotagging. Geotagging is treated
|
|
@@ -2470,27 +2502,27 @@ MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta, MIE-Orient, MIE-Preview,
|
|
|
2470
2502
|
MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video, MIFF, MISB, MNG, MOBI, MOI,
|
|
2471
2503
|
MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS, MakerNotes, MakerUnknown,
|
|
2472
2504
|
Matroska, MediaJukebox, Meta, MetaIFD, Microsoft, Minolta, MinoltaRaw,
|
|
2473
|
-
Motorola, NITF, Nikon, NikonCapture, NikonCustom, NikonScan,
|
|
2474
|
-
NineEdits, Nintendo, Ocad, Ogg, Olympus, OpenEXR, Opus, PDF,
|
|
2475
|
-
PNG-cICP, PNG-pHYs, PSP, Palm, Panasonic, PanasonicRaw, Parrot,
|
|
2476
|
-
PhaseOne, PhotoCD, PhotoMechanic, Photoshop, PictureInfo,
|
|
2477
|
-
PreviewIFD, PrintIM, ProfileIFD, Qualcomm, QuickTime, RAF, RAF2,
|
|
2478
|
-
RMETA, RSRC, RTF, Radiance, Rawzor, Real, Real-CONT, Real-MDPR,
|
|
2479
|
-
Real-RA3, Real-RA4, Real-RA5, Real-RJMD, Reconyx, Red, Ricoh,
|
|
2480
|
-
SR2DataIFD, SR2SubIFD, SRF#, SVG, Samsung, Sanyo, Scalado,
|
|
2481
|
-
Sony, SonyIDC, Stim, SubIFD, System, Theora, Torrent,
|
|
2482
|
-
VCalendar, VCard, VNote, Version0, Vorbis, WTV, XML, XMP,
|
|
2483
|
-
XMP-Device, XMP-GAudio, XMP-GCamera, XMP-GCreations, XMP-GDepth,
|
|
2484
|
-
XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage, XMP-MP,
|
|
2485
|
-
XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-album, XMP-apple-fi,
|
|
2486
|
-
XMP-aux, XMP-cc, XMP-cell, XMP-crd, XMP-creatorAtom, XMP-crs,
|
|
2487
|
-
XMP-dex, XMP-digiKam, XMP-drone-dji, XMP-dwc, XMP-et, XMP-exif,
|
|
2488
|
-
XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-hdr,
|
|
2489
|
-
XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro,
|
|
2490
|
-
XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-nine, XMP-panorama,
|
|
2491
|
-
XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-pmi,
|
|
2492
|
-
XMP-prl, XMP-prm, XMP-pur, XMP-rdf, XMP-sdc, XMP-swf, XMP-tiff,
|
|
2493
|
-
XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpDSA, XMP-xmpMM, XMP-xmpNote,
|
|
2505
|
+
Motorola, NITF, Nextbase, Nikon, NikonCapture, NikonCustom, NikonScan,
|
|
2506
|
+
NikonSettings, NineEdits, Nintendo, Ocad, Ogg, Olympus, OpenEXR, Opus, PDF,
|
|
2507
|
+
PICT, PNG, PNG-cICP, PNG-pHYs, PSP, Palm, Panasonic, PanasonicRaw, Parrot,
|
|
2508
|
+
Pentax, PhaseOne, PhotoCD, PhotoMechanic, Photoshop, PictureInfo,
|
|
2509
|
+
PostScript, PreviewIFD, PrintIM, ProfileIFD, Qualcomm, QuickTime, RAF, RAF2,
|
|
2510
|
+
RIFF, RMETA, RSRC, RTF, Radiance, Rawzor, Real, Real-CONT, Real-MDPR,
|
|
2511
|
+
Real-PROP, Real-RA3, Real-RA4, Real-RA5, Real-RJMD, Reconyx, Red, Ricoh,
|
|
2512
|
+
SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#, SVG, Samsung, Sanyo, Scalado,
|
|
2513
|
+
Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD, System, Theora, Torrent,
|
|
2514
|
+
Track#, UserData, VCalendar, VCard, VNote, Version0, Vorbis, WTV, XML, XMP,
|
|
2515
|
+
XMP-DICOM, XMP-Device, XMP-GAudio, XMP-GCamera, XMP-GCreations, XMP-GDepth,
|
|
2516
|
+
XMP-GFocus, XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage, XMP-MP,
|
|
2517
|
+
XMP-MP1, XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-album, XMP-apple-fi,
|
|
2518
|
+
XMP-ast, XMP-aux, XMP-cc, XMP-cell, XMP-crd, XMP-creatorAtom, XMP-crs,
|
|
2519
|
+
XMP-dc, XMP-dex, XMP-digiKam, XMP-drone-dji, XMP-dwc, XMP-et, XMP-exif,
|
|
2520
|
+
XMP-exifEX, XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-hdr,
|
|
2521
|
+
XMP-hdrgm, XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro,
|
|
2522
|
+
XMP-microsoft, XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-nine, XMP-panorama,
|
|
2523
|
+
XMP-pdf, XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-pmi,
|
|
2524
|
+
XMP-prism, XMP-prl, XMP-prm, XMP-pur, XMP-rdf, XMP-sdc, XMP-swf, XMP-tiff,
|
|
2525
|
+
XMP-x, XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpDSA, XMP-xmpMM, XMP-xmpNote,
|
|
2494
2526
|
XMP-xmpPLUS, XMP-xmpRights, XMP-xmpTPg, ZIP, iTunes
|
|
2495
2527
|
|
|
2496
2528
|
=item Family 2 (Category):
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "exiftool-vendored.exe",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.80.0",
|
|
4
4
|
"description": "Vendored win32 ExifTool for Node.js",
|
|
5
5
|
"main": "./index.js",
|
|
6
6
|
"homepage": "https://github.com/mceachen/exiftool-vendored.exe#readme",
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"mocha": "^10.3.0",
|
|
45
|
-
"npm-check-updates": "^16.14.
|
|
45
|
+
"npm-check-updates": "^16.14.17",
|
|
46
46
|
"prettier": "^3.2.5",
|
|
47
|
-
"release-it": "^17.
|
|
47
|
+
"release-it": "^17.1.1"
|
|
48
48
|
}
|
|
49
49
|
}
|