exiftool_vendored 12.76.1 → 12.81.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +105 -4
- data/bin/MANIFEST +29 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +4 -3
- data/bin/config_files/acdsee.config +37 -57
- data/bin/config_files/example.config +16 -2
- data/bin/exiftool +102 -31
- data/bin/lib/Image/ExifTool/Canon.pm +12 -9
- data/bin/lib/Image/ExifTool/CanonVRD.pm +8 -2
- data/bin/lib/Image/ExifTool/Exif.pm +52 -4
- data/bin/lib/Image/ExifTool/FujiFilm.pm +14 -5
- data/bin/lib/Image/ExifTool/GPS.pm +5 -3
- data/bin/lib/Image/ExifTool/GeoLang/cs.pm +978 -0
- data/bin/lib/Image/ExifTool/GeoLang/de.pm +1975 -0
- data/bin/lib/Image/ExifTool/GeoLang/en_ca.pm +44 -0
- data/bin/lib/Image/ExifTool/GeoLang/en_gb.pm +124 -0
- data/bin/lib/Image/ExifTool/GeoLang/es.pm +2921 -0
- data/bin/lib/Image/ExifTool/GeoLang/fi.pm +1116 -0
- data/bin/lib/Image/ExifTool/GeoLang/fr.pm +3171 -0
- data/bin/lib/Image/ExifTool/GeoLang/it.pm +2750 -0
- data/bin/lib/Image/ExifTool/GeoLang/ja.pm +10256 -0
- data/bin/lib/Image/ExifTool/GeoLang/ko.pm +4499 -0
- data/bin/lib/Image/ExifTool/GeoLang/nl.pm +1270 -0
- data/bin/lib/Image/ExifTool/GeoLang/pl.pm +3019 -0
- data/bin/lib/Image/ExifTool/GeoLang/ru.pm +18220 -0
- data/bin/lib/Image/ExifTool/GeoLang/sk.pm +441 -0
- data/bin/lib/Image/ExifTool/GeoLang/sv.pm +714 -0
- data/bin/lib/Image/ExifTool/GeoLang/tr.pm +452 -0
- data/bin/lib/Image/ExifTool/GeoLang/zh_cn.pm +2225 -0
- data/bin/lib/Image/ExifTool/GeoLang/zh_tw.pm +72 -0
- data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- data/bin/lib/Image/ExifTool/Geolocation.pm +935 -0
- data/bin/lib/Image/ExifTool/Geotag.pm +14 -2
- data/bin/lib/Image/ExifTool/HtmlDump.pm +2 -1
- data/bin/lib/Image/ExifTool/Import.pm +5 -2
- data/bin/lib/Image/ExifTool/JSON.pm +15 -10
- data/bin/lib/Image/ExifTool/M2TS.pm +32 -4
- data/bin/lib/Image/ExifTool/MWG.pm +1 -0
- data/bin/lib/Image/ExifTool/MacOS.pm +19 -4
- data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
- data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +331 -23
- data/bin/lib/Image/ExifTool/NikonCustom.pm +55 -1
- data/bin/lib/Image/ExifTool/Ogg.pm +3 -2
- data/bin/lib/Image/ExifTool/Olympus.pm +4 -1
- data/bin/lib/Image/ExifTool/OpenEXR.pm +37 -19
- data/bin/lib/Image/ExifTool/PDF.pm +5 -5
- data/bin/lib/Image/ExifTool/PNG.pm +3 -3
- data/bin/lib/Image/ExifTool/Pentax.pm +1 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +195 -12
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +253 -237
- data/bin/lib/Image/ExifTool/README +6 -5
- data/bin/lib/Image/ExifTool/Sony.pm +1 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4871 -4752
- data/bin/lib/Image/ExifTool/TagNames.pod +722 -383
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +43 -9
- data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
- data/bin/lib/Image/ExifTool/Writer.pl +65 -8
- data/bin/lib/Image/ExifTool/XMP.pm +18 -2
- data/bin/lib/Image/ExifTool/XMP2.pl +64 -0
- data/bin/lib/Image/ExifTool.pm +265 -49
- data/bin/lib/Image/ExifTool.pod +63 -25
- data/bin/perl-Image-ExifTool.spec +2 -2
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +22 -2
data/bin/lib/Image/ExifTool.pm
CHANGED
@@ -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.81';
|
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($);
|
@@ -920,7 +921,7 @@ $testLen = 1024; # number of bytes to read when testing for magic number
|
|
920
921
|
DICOM=> '(.{128}DICM|\0[\x02\x04\x06\x08]\0[\0-\x20]|[\x02\x04\x06\x08]\0[\0-\x20]\0)',
|
921
922
|
DOCX => 'PK\x03\x04',
|
922
923
|
DPX => '(SDPX|XPDS)',
|
923
|
-
DR4 => 'IIII\x04\0\x04\0',
|
924
|
+
DR4 => 'IIII[\x04|\x05]\0\x04\0',
|
924
925
|
DSS => '(\x02dss|\x03ds2)',
|
925
926
|
DV => '\x1f\x07\0[\x3f\xbf]', # (not tested if extension recognized)
|
926
927
|
DWF => '\(DWF V\d',
|
@@ -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,11 @@ 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
|
+
[ 'GeolocAltNames', 1, 'search alternate city names if available' ],
|
1107
|
+
[ 'GeolocFeature', undef, 'regular expression of geolocation features to match' ],
|
1108
|
+
[ 'GeolocMinPop', undef, 'minimum geolocation population' ],
|
1109
|
+
[ 'GeolocMaxDist', undef, 'maximum geolocation distance' ],
|
1104
1110
|
[ 'GeoMaxIntSecs', 1800, 'geotag maximum interpolation time (secs)' ],
|
1105
1111
|
[ 'GeoMaxExtSecs', 1800, 'geotag maximum extrapolation time (secs)' ],
|
1106
1112
|
[ 'GeoMaxHDOP', undef, 'geotag maximum HDOP' ],
|
@@ -1168,6 +1174,7 @@ my @defaultWriteGroups = qw(
|
|
1168
1174
|
|
1169
1175
|
# group hash for ExifTool-generated tags
|
1170
1176
|
my %allGroupsExifTool = ( 0 => 'ExifTool', 1 => 'ExifTool', 2 => 'ExifTool' );
|
1177
|
+
my %geoInfo = ( Groups => { 0 => 'ExifTool', 1 => 'ExifTool', 2 => 'Location' }, Priority => 0 );
|
1171
1178
|
|
1172
1179
|
# special tag names (not used for tag info)
|
1173
1180
|
%specialTags = map { $_ => 1 } qw(
|
@@ -1197,7 +1204,7 @@ sub DummyWriteProc { return 1; }
|
|
1197
1204
|
|
1198
1205
|
my %systemTagsNotes = (
|
1199
1206
|
Notes => q{
|
1200
|
-
extracted only if specifically requested or the L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll>
|
1207
|
+
extracted only if specifically requested or the API L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll>
|
1201
1208
|
option is set
|
1202
1209
|
},
|
1203
1210
|
);
|
@@ -1480,7 +1487,7 @@ my %systemTagsNotes = (
|
|
1480
1487
|
FileAttributes => {
|
1481
1488
|
Groups => { 1 => 'System', 2 => 'Other' },
|
1482
1489
|
Notes => q{
|
1483
|
-
extracted only if specifically requested or the L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll>
|
1490
|
+
extracted only if specifically requested or the API L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll>
|
1484
1491
|
option is set. 2 or 3 values: 0. File type, 1. Attribute bits, 2. Windows
|
1485
1492
|
attribute bits if Win32API::File is available
|
1486
1493
|
},
|
@@ -1535,7 +1542,7 @@ my %systemTagsNotes = (
|
|
1535
1542
|
FileUserID => {
|
1536
1543
|
Groups => { 1 => 'System', 2 => 'Other' },
|
1537
1544
|
Notes => q{
|
1538
|
-
extracted only if specifically requested or the L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll>
|
1545
|
+
extracted only if specifically requested or the API L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll>
|
1539
1546
|
option is set. Returns user ID number with the -n option, or name
|
1540
1547
|
otherwise. May be written with either user name or number
|
1541
1548
|
},
|
@@ -1549,7 +1556,7 @@ my %systemTagsNotes = (
|
|
1549
1556
|
FileGroupID => {
|
1550
1557
|
Groups => { 1 => 'System', 2 => 'Other' },
|
1551
1558
|
Notes => q{
|
1552
|
-
extracted only if specifically requested or the L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll>
|
1559
|
+
extracted only if specifically requested or the API L<SystemTags|../ExifTool.html#SystemTags> or L<RequestAll|../ExifTool.html#RequestAll>
|
1553
1560
|
option is set. Returns group ID number with the -n option, or name
|
1554
1561
|
otherwise. May be written with either group name or number
|
1555
1562
|
},
|
@@ -1685,7 +1692,7 @@ my %systemTagsNotes = (
|
|
1685
1692
|
Flags => ['Writable' ,'Protected', 'Binary'],
|
1686
1693
|
Permanent => 0, # (this is 1 by default for MakerNotes tags)
|
1687
1694
|
WriteCheck => q{
|
1688
|
-
return undef if $val =~ /^IIII\x04\0\x04\0/;
|
1695
|
+
return undef if $val =~ /^IIII[\x04|\x05]\0\x04\0/;
|
1689
1696
|
return 'Invalid CanonDR4 data';
|
1690
1697
|
},
|
1691
1698
|
},
|
@@ -1749,6 +1756,11 @@ my %systemTagsNotes = (
|
|
1749
1756
|
Notes => 'PDF-format embedded preview image',
|
1750
1757
|
Binary => 1,
|
1751
1758
|
},
|
1759
|
+
PreviewJXL => {
|
1760
|
+
Groups => { 2 => 'Preview' },
|
1761
|
+
Notes => 'JXL-format embedded preview image',
|
1762
|
+
Binary => 1,
|
1763
|
+
},
|
1752
1764
|
ExifByteOrder => {
|
1753
1765
|
Writable => 1,
|
1754
1766
|
DelCheck => q{"Can't delete"},
|
@@ -1787,7 +1799,7 @@ my %systemTagsNotes = (
|
|
1787
1799
|
Groups => { 0 => 'ExifTool', 1 => 'ExifTool', 2 => 'Other' },
|
1788
1800
|
Notes => q{
|
1789
1801
|
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>
|
1802
|
+
file. Not generated unless specifically requested or the API L<RequestAll|../ExifTool.html#RequestAll>
|
1791
1803
|
option is set. Requires Time::HiRes
|
1792
1804
|
},
|
1793
1805
|
PrintConv => 'sprintf("%.3g s", $val)',
|
@@ -1928,7 +1940,7 @@ my %systemTagsNotes = (
|
|
1928
1940
|
Groups => { 0 => 'Trailer' },
|
1929
1941
|
Notes => q{
|
1930
1942
|
the full JPEG trailer data block. Extracted only if specifically requested
|
1931
|
-
or the API RequestAll option is set to 3 or higher
|
1943
|
+
or the API L<RequestAll|../ExifTool.html#RequestAll> option is set to 3 or higher
|
1932
1944
|
},
|
1933
1945
|
Writable => 1,
|
1934
1946
|
Protected => 1,
|
@@ -1957,6 +1969,92 @@ my %systemTagsNotes = (
|
|
1957
1969
|
the this hash value and the hash type in the file.
|
1958
1970
|
},
|
1959
1971
|
},
|
1972
|
+
Geolocate => {
|
1973
|
+
Writable => 1,
|
1974
|
+
WriteOnly => 1,
|
1975
|
+
WriteNothing => 1,
|
1976
|
+
AllowGroup => '(exif|gps|xmp|xmp-exif|xmp-iptcext|xmp-iptccore|xmp-photoshop|iptc|quicktime|itemlist|keys|userdata)',
|
1977
|
+
Notes => q{
|
1978
|
+
this write-only tag may be used to write geolocation city, region, country
|
1979
|
+
code and country based in input GPS coordinates, or to write GPS
|
1980
|
+
coordinates based on geolocation name. See the
|
1981
|
+
L<Writing section of the Geolocation page|../geolocation.html#Write> for
|
1982
|
+
details. This tag is writable regardless of the API L<Geolocation|../ExifTool.html#Geolocation>
|
1983
|
+
option setting
|
1984
|
+
},
|
1985
|
+
DelCheck => q{
|
1986
|
+
my @tags = $self->GetGeolocateTags($wantGroup);
|
1987
|
+
$self->SetNewValue($_) foreach @tags;
|
1988
|
+
return '';
|
1989
|
+
},
|
1990
|
+
ValueConvInv => q{
|
1991
|
+
require Image::ExifTool::Geolocation;
|
1992
|
+
# write this tag later if geotagging
|
1993
|
+
return $val if $val =~ /\bgeotag\b/i;
|
1994
|
+
$val .= ',both';
|
1995
|
+
my $opts = $$self{OPTIONS};
|
1996
|
+
my ($n, $i, $km, $be) = Image::ExifTool::Geolocation::Geolocate($self->Encode($val,'UTF8'), $opts);
|
1997
|
+
return '' unless $n;
|
1998
|
+
if ($n > 1 and $self->Warn('Multiple matching cities found',2)) {
|
1999
|
+
warn "$$self{VALUE}{Warning}\n";
|
2000
|
+
return '';
|
2001
|
+
}
|
2002
|
+
my @geo = Image::ExifTool::Geolocation::GetEntry($i, $$opts{Lang});
|
2003
|
+
my @tags = $self->GetGeolocateTags($wantGroup, $km ? 0 : 1);
|
2004
|
+
my %geoNum = ( City => 0, Province => 1, State => 1, Code => 3, Country => 4,
|
2005
|
+
Coordinates => 89, Latitude => 8, Longitude => 9 );
|
2006
|
+
my ($tag, $value);
|
2007
|
+
foreach $tag (@tags) {
|
2008
|
+
if ($tag =~ /GPS(Coordinates|Latitude|Longitude)?/) {
|
2009
|
+
$value = $geoNum{$1} == 89 ? "$geo[8],$geo[9]" : $geo[$geoNum{$1}];
|
2010
|
+
} elsif ($tag =~ /(Code)/ or $tag =~ /(City|Province|State|Country)/) {
|
2011
|
+
$value = $geo[$geoNum{$1}];
|
2012
|
+
next unless defined $value;
|
2013
|
+
$value = $self->Decode($value,'UTF8');
|
2014
|
+
$value .= ' ' if $tag eq 'iptc:Country-PrimaryLocationCode'; # (IPTC requires 3-char code)
|
2015
|
+
} elsif ($tag =~ /LocationName/) {
|
2016
|
+
$value = $geo[0] or next;
|
2017
|
+
$value .= ', ' . $geo[1] if $geo[1];
|
2018
|
+
$value .= ', ' . $geo[4] if $geo[4];
|
2019
|
+
$value = $self->Decode($value, 'UTF8');
|
2020
|
+
} else {
|
2021
|
+
next; # (shouldn't happen)
|
2022
|
+
}
|
2023
|
+
$self->SetNewValue($tag => $value, Type => 'PrintConv');
|
2024
|
+
}
|
2025
|
+
return '';
|
2026
|
+
},
|
2027
|
+
PrintConvInv => q{
|
2028
|
+
my @args = split /\s*,\s*/, $val;
|
2029
|
+
my $lat = 1;
|
2030
|
+
foreach (@args) {
|
2031
|
+
next unless /^[-+]?\d/;
|
2032
|
+
require Image::ExifTool::GPS;
|
2033
|
+
$_ = Image::ExifTool::GPS::ToDegrees($_, 1, $lat ? 'lat' : 'lon');
|
2034
|
+
$lat ^= 1;
|
2035
|
+
}
|
2036
|
+
return join(',', @args);
|
2037
|
+
},
|
2038
|
+
},
|
2039
|
+
GeolocationBearing => { %geoInfo,
|
2040
|
+
Notes => q{
|
2041
|
+
compass bearing to GeolocationCity center. Geolocation tags are
|
2042
|
+
generated only if API L<Geolocation|../ExifTool.html#Geolocation> option is set
|
2043
|
+
},
|
2044
|
+
},
|
2045
|
+
GeolocationCity => { %geoInfo, Notes => 'name of city nearest to the current GPS coordinates', ValueConv => '$self->Decode($val,"UTF8")' },
|
2046
|
+
GeolocationRegion => { %geoInfo, Notes => 'geolocation state, province or region', ValueConv => '$self->Decode($val,"UTF8")' },
|
2047
|
+
GeolocationSubregion=> { %geoInfo, Notes => 'geolocation county or subregion', ValueConv => '$self->Decode($val,"UTF8")' },
|
2048
|
+
GeolocationCountry => { %geoInfo, Notes => 'geolocation country name', ValueConv => '$self->Decode($val,"UTF8")' },
|
2049
|
+
GeolocationCountryCode=>{%geoInfo, Notes => 'geolocation country code' },
|
2050
|
+
GeolocationTimeZone => { %geoInfo, Notes => 'geolocation time zone name' },
|
2051
|
+
GeolocationFeatureCode=>{%geoInfo, Notes => 'feature code, see L<http://www.geonames.org/export/codes.html#P>' },
|
2052
|
+
GeolocationPopulation=>{ %geoInfo, Notes => 'city population rounded to 2 significant digits' },
|
2053
|
+
GeolocationDistance => { %geoInfo, Notes => 'distance in km from current GPS to city', PrintConv => '"$val km"' },
|
2054
|
+
GeolocationPosition => { %geoInfo, Notes => 'approximate GPS coordinates of city',
|
2055
|
+
PrintConv => '$val =~ s/ /, /; $val',
|
2056
|
+
},
|
2057
|
+
GeolocationWarning => { %geoInfo },
|
1960
2058
|
);
|
1961
2059
|
|
1962
2060
|
# tags defined by UserParam option (added at runtime)
|
@@ -2563,6 +2661,7 @@ sub ExtractInfo($;@)
|
|
2563
2661
|
}
|
2564
2662
|
# initialize ExifTool object members
|
2565
2663
|
$self->Init();
|
2664
|
+
$$self{InExtract} = 1; # set flag indicating we are inside ExtractInfo
|
2566
2665
|
|
2567
2666
|
delete $$self{MAKER_NOTE_FIXUP}; # fixup information for extracted maker notes
|
2568
2667
|
delete $$self{MAKER_NOTE_BYTE_ORDER};
|
@@ -2738,8 +2837,9 @@ sub ExtractInfo($;@)
|
|
2738
2837
|
if ($isDir or (defined $stat[2] and ($stat[2] & 0170000) == 0040000)) {
|
2739
2838
|
$self->FoundTag('FileType', 'DIR');
|
2740
2839
|
$self->FoundTag('FileTypeExtension', '');
|
2741
|
-
$self->
|
2840
|
+
$self->DoneExtract();
|
2742
2841
|
$raf->Close() if $raf;
|
2842
|
+
delete $$self{InExtract} unless $reEntry;
|
2743
2843
|
return 1;
|
2744
2844
|
}
|
2745
2845
|
# get list of file types to check
|
@@ -2756,7 +2856,7 @@ sub ExtractInfo($;@)
|
|
2756
2856
|
} else {
|
2757
2857
|
$self->Error('Unknown file type');
|
2758
2858
|
}
|
2759
|
-
$self->
|
2859
|
+
$self->DoneExtract();
|
2760
2860
|
last; # don't read the file
|
2761
2861
|
}
|
2762
2862
|
if (@fileTypeList) {
|
@@ -2924,7 +3024,7 @@ sub ExtractInfo($;@)
|
|
2924
3024
|
}
|
2925
3025
|
unless ($reEntry) {
|
2926
3026
|
$$self{PATH} = [ ]; # reset PATH
|
2927
|
-
$self->
|
3027
|
+
$self->DoneExtract();
|
2928
3028
|
# do our HTML dump if requested
|
2929
3029
|
if ($$self{HTML_DUMP}) {
|
2930
3030
|
$raf->Seek(0, 2); # seek to end of file
|
@@ -2959,27 +3059,10 @@ sub ExtractInfo($;@)
|
|
2959
3059
|
last; # (loop was a cheap "goto")
|
2960
3060
|
}
|
2961
3061
|
|
2962
|
-
#
|
2963
|
-
|
2964
|
-
Image::ExifTool::Validate::FinishValidate($self, $$req{validate});
|
2965
|
-
}
|
2966
|
-
|
3062
|
+
# Note: This should be the only tag generated after BuildCompositeTags,
|
3063
|
+
# and as such it can't be used in user-defined Composite tags
|
2967
3064
|
@startTime and $self->FoundTag('ProcessingTime', Time::HiRes::tv_interval(\@startTime));
|
2968
3065
|
|
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
3066
|
# restore original options
|
2984
3067
|
%saveOptions and $$self{OPTIONS} = \%saveOptions;
|
2985
3068
|
|
@@ -2987,14 +3070,8 @@ sub ExtractInfo($;@)
|
|
2987
3070
|
# restore necessary members when exiting re-entrant code
|
2988
3071
|
$$self{$_} = $$reEntry{$_} foreach keys %$reEntry;
|
2989
3072
|
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
3073
|
}
|
3074
|
+
delete $$self{InExtract} unless $reEntry;
|
2998
3075
|
|
2999
3076
|
# ($type may be undef without an Error when processing sub-documents)
|
3000
3077
|
return 0 if not defined $type or exists $$self{VALUE}{Error};
|
@@ -3014,8 +3091,13 @@ sub GetInfo($;@)
|
|
3014
3091
|
{
|
3015
3092
|
local $_;
|
3016
3093
|
my $self = shift;
|
3017
|
-
my %saveOptions;
|
3094
|
+
my (%saveOptions, @saveMembers, @savedMembers);
|
3018
3095
|
|
3096
|
+
# save necessary members to allow GetInfo to be called from within ExtractInfo
|
3097
|
+
if ($$self{InExtract}) {
|
3098
|
+
@saveMembers = qw(REQUESTED_TAGS REQ_TAG_LOOKUP IO_TAG_LIST);
|
3099
|
+
@savedMembers = @$self{@saveMembers};
|
3100
|
+
}
|
3019
3101
|
unless (@_ and not defined $_[0]) {
|
3020
3102
|
%saveOptions = %{$$self{OPTIONS}}; # save original options
|
3021
3103
|
# must set FILENAME so it isn't parsed from the arguments
|
@@ -3098,8 +3180,9 @@ sub GetInfo($;@)
|
|
3098
3180
|
@{$$self{IO_TAG_LIST}} = $self->GetTagList($rtnTags, $sort, $$self{OPTIONS}{Sort2});
|
3099
3181
|
}
|
3100
3182
|
|
3101
|
-
# restore original options
|
3183
|
+
# restore original options and member variables
|
3102
3184
|
%saveOptions and $$self{OPTIONS} = \%saveOptions;
|
3185
|
+
@$self{@saveMembers} = @savedMembers if @saveMembers;
|
3103
3186
|
|
3104
3187
|
return \%info;
|
3105
3188
|
}
|
@@ -4164,17 +4247,147 @@ sub CombineInfo($;@)
|
|
4164
4247
|
}
|
4165
4248
|
|
4166
4249
|
#------------------------------------------------------------------------------
|
4167
|
-
#
|
4250
|
+
# Finish generating tags after extracting information from a file
|
4168
4251
|
# Inputs: 0) ExifTool ref
|
4169
|
-
# Notes:
|
4170
|
-
#
|
4171
|
-
#
|
4172
|
-
|
4252
|
+
# Notes: The sequencing here is a bit tricky because tags from the main file
|
4253
|
+
# may be used in the names of alternate files, so we finish generating
|
4254
|
+
# all main file tags first (including all Composite tags which don't
|
4255
|
+
# rely on alternate files) before extracting tags from alternate files,
|
4256
|
+
# then we finish by generating the remaingin Composite tags.
|
4257
|
+
sub DoneExtract($)
|
4173
4258
|
{
|
4174
4259
|
my $self = shift;
|
4175
4260
|
# extract information from alternate files if necessary
|
4176
4261
|
my ($g8, $altExifTool);
|
4177
4262
|
my $opts = $$self{OPTIONS};
|
4263
|
+
|
4264
|
+
# generate ImageDataHash if requested
|
4265
|
+
if ($$self{ImageDataHash}) {
|
4266
|
+
my $digest = $$self{ImageDataHash}->hexdigest;
|
4267
|
+
# (don't store empty digest)
|
4268
|
+
$self->FoundTag(ImageDataHash => $digest) unless
|
4269
|
+
$digest eq 'd41d8cd98f00b204e9800998ecf8427e' or
|
4270
|
+
$digest eq 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' or
|
4271
|
+
$digest eq 'cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e';
|
4272
|
+
}
|
4273
|
+
# generate Validate tag if requested
|
4274
|
+
if ($$opts{Validate}) {
|
4275
|
+
Image::ExifTool::Validate::FinishValidate($self, $$self{REQ_TAG_LOOKUP}{validate});
|
4276
|
+
}
|
4277
|
+
# generate geolocation tags if requested
|
4278
|
+
if ($$opts{Geolocation}) {
|
4279
|
+
my ($arg, @defaults, @tags, $tag, @coord, @ref, @city, $doneCity, $both);
|
4280
|
+
my $geoOpt = $$opts{Geolocation};
|
4281
|
+
my @args = split /\s*,\s*/, $$opts{Geolocation};
|
4282
|
+
foreach $arg (@args) {
|
4283
|
+
lc $arg eq 'both' and $both = 1, next;
|
4284
|
+
$arg !~ s/^\$// and push(@defaults, $arg), next;
|
4285
|
+
push @tags, $arg; # argument is a tag name
|
4286
|
+
}
|
4287
|
+
unless (@tags) {
|
4288
|
+
# default tags to read if not specified
|
4289
|
+
@tags = qw(GPSLatitude GPSLongitude GPSLatitudeRef GPSLongitudeRef
|
4290
|
+
GPSCoordinates LocationShownGPSLatitude LocationShownGPSLongitude
|
4291
|
+
XMP:City State CountryCode Country
|
4292
|
+
IPTC:City Province-State Country-PrimaryLocationCode Country-PrimaryLocationName
|
4293
|
+
LocationShownCity LocationShownProvinceState LocationShownCountryCode LocationShownCountryName);
|
4294
|
+
}
|
4295
|
+
# get information for specified tags
|
4296
|
+
my $info = $self->GetInfo(\@tags, { PrintConv => 0, Duplicates => 0 }); # (returns tags in proper case)
|
4297
|
+
$opts = $$self{OPTIONS}; # (necessary because GetInfo changes the OPTIONS hash)
|
4298
|
+
foreach $tag (@tags) {
|
4299
|
+
my $val = $$info{$tag};
|
4300
|
+
next unless defined $val;
|
4301
|
+
$self->VPrint(0, "Found $tag ($val)\n");
|
4302
|
+
if ($tag =~ /Coordinates/) {
|
4303
|
+
next if defined $coord[0] and defined $coord[1];
|
4304
|
+
@coord = split ' ', $val;
|
4305
|
+
next;
|
4306
|
+
}
|
4307
|
+
my $n = $tag =~ /Latitude/ ? 0 : ($tag =~ /Longitude/ ? 1 : undef);
|
4308
|
+
if (defined $n) {
|
4309
|
+
if ($tag =~ /Ref$/) {
|
4310
|
+
$ref[$n] = $val unless $ref[$n];
|
4311
|
+
} else {
|
4312
|
+
$coord[$n] = $val unless defined $coord[$n];
|
4313
|
+
}
|
4314
|
+
next;
|
4315
|
+
}
|
4316
|
+
# handle city tags (save info for first city found)
|
4317
|
+
if ($tag =~ /City/) {
|
4318
|
+
@city and $doneCity = 1, next;
|
4319
|
+
push @city, $val;
|
4320
|
+
} elsif (@city) {
|
4321
|
+
push @city, $val unless $doneCity;
|
4322
|
+
next if $doneCity;
|
4323
|
+
}
|
4324
|
+
}
|
4325
|
+
if (defined $coord[0] and defined $coord[1]) {
|
4326
|
+
$coord[0] = -$coord[0] if $ref[0] and $coord[0] > 0 and $ref[0] eq 'S';
|
4327
|
+
$coord[1] = -$coord[1] if $ref[1] and $coord[1] > 0 and $ref[1] eq 'W';
|
4328
|
+
$arg = join ',', @coord;
|
4329
|
+
} elsif (@city) {
|
4330
|
+
$arg = join ',', @city;
|
4331
|
+
}
|
4332
|
+
if (not defined $arg) {
|
4333
|
+
# use specified default values if no tags found
|
4334
|
+
$arg = join ',', @defaults;
|
4335
|
+
undef $arg if $arg eq '1';
|
4336
|
+
$both = 1; # use 'both' GPS and place names if provided
|
4337
|
+
}
|
4338
|
+
if ($arg) {
|
4339
|
+
$arg .= ',both' if $both;
|
4340
|
+
$arg = $self->Encode($arg, 'UTF8');
|
4341
|
+
require Image::ExifTool::Geolocation;
|
4342
|
+
if ($$opts{Verbose}) {
|
4343
|
+
if ($Image::ExifTool::Geolocation::dbInfo) {
|
4344
|
+
print "Loaded $Image::ExifTool::Geolocation::dbInfo\n";
|
4345
|
+
} else {
|
4346
|
+
print "Error loading Geolocation.dat\n";
|
4347
|
+
}
|
4348
|
+
}
|
4349
|
+
local $SIG{'__WARN__'} = \&SetWarning;
|
4350
|
+
undef $evalWarning;
|
4351
|
+
$$opts{GeolocMulti} = $$opts{Duplicates};
|
4352
|
+
my ($n, $i, $km, $be) = Image::ExifTool::Geolocation::Geolocate($arg, $opts);
|
4353
|
+
delete $$opts{GeolocMulti};
|
4354
|
+
# ($i will be an ARRAY ref if multiple matches were found and the Duplicates option is set)
|
4355
|
+
if ($n and (ref $i or $n < 2 or not $self->Warn('Multiple Geolocation cities are possible',2))) {
|
4356
|
+
my $list = ref $i ? $i : [ $i ]; # make a list if not done alreaday
|
4357
|
+
foreach $i (@$list) {
|
4358
|
+
my @geo = Image::ExifTool::Geolocation::GetEntry($i, $$opts{Lang});
|
4359
|
+
$self->FoundTag(GeolocationCity => $geo[0]);
|
4360
|
+
$self->FoundTag(GeolocationRegion => $geo[1]) if $geo[1];
|
4361
|
+
$self->FoundTag(GeolocationSubregion => $geo[2]) if $geo[2];
|
4362
|
+
$self->FoundTag(GeolocationCountryCode => $geo[3]);
|
4363
|
+
$self->FoundTag(GeolocationCountry => $geo[4]) if $geo[4];
|
4364
|
+
$self->FoundTag(GeolocationTimeZone => $geo[5]) if $geo[5];
|
4365
|
+
$self->FoundTag(GeolocationFeatureCode => $geo[6]);
|
4366
|
+
$self->FoundTag(GeolocationPopulation => $geo[7]);
|
4367
|
+
$self->FoundTag(GeolocationPosition => "$geo[8] $geo[9]");
|
4368
|
+
next if $i != $$list[0];
|
4369
|
+
$self->FoundTag(GeolocationDistance => $km) if defined $km;
|
4370
|
+
$self->FoundTag(GeolocationBearing => $be) if defined $be;
|
4371
|
+
$self->FoundTag(GeolocationWarning => "Search matched $n cities") if $n > 1;
|
4372
|
+
}
|
4373
|
+
} elsif ($evalWarning) {
|
4374
|
+
$self->Warn(CleanWarning());
|
4375
|
+
}
|
4376
|
+
}
|
4377
|
+
}
|
4378
|
+
# generate tags for user-defined parameters that ended with '#'
|
4379
|
+
if (%{$$opts{UserParam}}) {
|
4380
|
+
my $doMsg = $$opts{Verbose};
|
4381
|
+
my $table = GetTagTable('Image::ExifTool::UserParam');
|
4382
|
+
foreach (sort keys %{$$opts{UserParam}}) {
|
4383
|
+
next unless /#$/;
|
4384
|
+
if ($doMsg) {
|
4385
|
+
$self->VPrint(0, "UserParam tags:\n");
|
4386
|
+
undef $doMsg;
|
4387
|
+
}
|
4388
|
+
$self->HandleTag($table, $_, $$opts{UserParam}{$_});
|
4389
|
+
}
|
4390
|
+
}
|
4178
4391
|
if ($$opts{Composite} and (not $$opts{FastScan} or $$opts{FastScan} < 5)) {
|
4179
4392
|
# build all composite tags except those requiring tags from alternate files
|
4180
4393
|
$self->BuildCompositeTags();
|
@@ -4185,6 +4398,7 @@ sub ExtractAltInfo($)
|
|
4185
4398
|
$$altExifTool{OPTIONS} = $$self{OPTIONS};
|
4186
4399
|
$$altExifTool{GLOBAL_TIME_OFFSET} = $$self{GLOBAL_TIME_OFFSET};
|
4187
4400
|
$$altExifTool{REQ_TAG_LOOKUP} = $$self{REQ_TAG_LOOKUP};
|
4401
|
+
$$altExifTool{ReqTagAlreadySet} = 1;
|
4188
4402
|
my $fileName = $$altExifTool{ALT_FILE};
|
4189
4403
|
# allow tags from the main file to be used in the alternate file names
|
4190
4404
|
# (eg. -file1 '$originalfilename')
|
@@ -4554,7 +4768,7 @@ sub ParseArguments($;@)
|
|
4554
4768
|
my (@exclude, $wasExcludeOpt);
|
4555
4769
|
|
4556
4770
|
$$self{REQUESTED_TAGS} = [ ];
|
4557
|
-
$$self{REQ_TAG_LOOKUP} = { };
|
4771
|
+
$$self{REQ_TAG_LOOKUP} = { } unless $$self{ReqTagAlreadySet};
|
4558
4772
|
$$self{EXCL_TAG_LOOKUP} = { };
|
4559
4773
|
$$self{IO_TAG_LIST} = undef;
|
4560
4774
|
delete $$self{EXCL_XMP_LOOKUP};
|
@@ -4838,6 +5052,7 @@ sub SetFoundTags($)
|
|
4838
5052
|
$allTag = 1;
|
4839
5053
|
} elsif ($tag =~ /[*?]/) {
|
4840
5054
|
# allow wildcards in tag names
|
5055
|
+
$tag =~ tr/-_A-Za-z0-9*?//dc; # sterilize
|
4841
5056
|
$tag =~ s/\*/[-\\w]*/g;
|
4842
5057
|
$tag =~ s/\?/[-\\w]/g;
|
4843
5058
|
$tag .= '( \\(.*)?' if $doDups or $allGrp;
|
@@ -4845,6 +5060,7 @@ sub SetFoundTags($)
|
|
4845
5060
|
next unless @matches; # don't want entry in list for wildcard tags
|
4846
5061
|
$allTag = 1;
|
4847
5062
|
} elsif ($doDups or defined $group) {
|
5063
|
+
$tag =~ tr/-_A-Za-z0-9//dc; # sterilize
|
4848
5064
|
# must also look for tags like "Tag (1)"
|
4849
5065
|
# (but be sure not to match temporary ValueConv entries like "Tag #")
|
4850
5066
|
@matches = grep(/^$tag( \(|$)/i, keys %$tagHash);
|
@@ -5811,7 +6027,7 @@ sub Decode($$$;$$$)
|
|
5811
6027
|
# Inputs: 0) ExifTool object ref, 1) string, 2) destination character set name,
|
5812
6028
|
# 3) optional destination byte order (2-byte and 4-byte fixed-width sets only)
|
5813
6029
|
# Returns: string in specified encoding
|
5814
|
-
sub Encode(
|
6030
|
+
sub Encode($$;$$)
|
5815
6031
|
{
|
5816
6032
|
my ($self, $val, $to, $toOrder) = @_;
|
5817
6033
|
return $self->Decode($val, undef, undef, $to, $toOrder);
|
@@ -5892,8 +6108,8 @@ sub MakeTagName($)
|
|
5892
6108
|
my $name = shift;
|
5893
6109
|
$name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters
|
5894
6110
|
$name = ucfirst $name; # capitalize first letter
|
5895
|
-
$name = "Tag$name" if length($name) < 2 or $name =~ /^[-0-9]/;
|
5896
6111
|
# must at least 2 characters long and not start with - or 0-9-
|
6112
|
+
$name = "Tag$name" if length($name) < 2 or $name =~ /^[-0-9]/;
|
5897
6113
|
return $name;
|
5898
6114
|
}
|
5899
6115
|
|
data/bin/lib/Image/ExifTool.pod
CHANGED
@@ -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,43 @@ 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 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
|
+
|
737
|
+
=item GeolocFeature
|
738
|
+
|
739
|
+
Comma-separated list of feature codes to include in city search, or exclude
|
740
|
+
if the list begins with a dash (-). Valid feature codes are PPL, PPLA,
|
741
|
+
PPLA2, PPLA3, PPLA4, PPLA5, PPLC, PPLCH, PPLF, PPLG, PPLL, PPLR, PPLS, STLMT
|
742
|
+
and Other. See L<http://www.geonames.org/export/codes.html#P> for a
|
743
|
+
description of these codes. Default is undef.
|
744
|
+
|
745
|
+
=item GeolocMaxDist
|
746
|
+
|
747
|
+
Maximum distance in km to the geolocation city. The Geolocation tags are
|
748
|
+
not generated if the distance is greater than this. Default is undef.
|
749
|
+
|
750
|
+
=item GeolocMinPop
|
751
|
+
|
752
|
+
Minimum population for the Geolocation city. Cities smaller than this are
|
753
|
+
ignored. Default is undef.
|
754
|
+
|
717
755
|
=item GeoMaxIntSecs
|
718
756
|
|
719
757
|
Maximum interpolation time in seconds for geotagging. Geotagging is treated
|
@@ -2470,27 +2508,27 @@ MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta, MIE-Orient, MIE-Preview,
|
|
2470
2508
|
MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video, MIFF, MISB, MNG, MOBI, MOI,
|
2471
2509
|
MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS, MakerNotes, MakerUnknown,
|
2472
2510
|
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,
|
2511
|
+
Motorola, NITF, Nextbase, Nikon, NikonCapture, NikonCustom, NikonScan,
|
2512
|
+
NikonSettings, NineEdits, Nintendo, Ocad, Ogg, Olympus, OpenEXR, Opus, PDF,
|
2513
|
+
PICT, PNG, PNG-cICP, PNG-pHYs, PSP, Palm, Panasonic, PanasonicRaw, Parrot,
|
2514
|
+
Pentax, PhaseOne, PhotoCD, PhotoMechanic, Photoshop, PictureInfo,
|
2515
|
+
PostScript, PreviewIFD, PrintIM, ProfileIFD, Qualcomm, QuickTime, RAF, RAF2,
|
2516
|
+
RIFF, RMETA, RSRC, RTF, Radiance, Rawzor, Real, Real-CONT, Real-MDPR,
|
2517
|
+
Real-PROP, Real-RA3, Real-RA4, Real-RA5, Real-RJMD, Reconyx, Red, Ricoh,
|
2518
|
+
SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#, SVG, Samsung, Sanyo, Scalado,
|
2519
|
+
Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD, System, Theora, Torrent,
|
2520
|
+
Track#, UserData, VCalendar, VCard, VNote, Version0, Vorbis, WTV, XML, XMP,
|
2521
|
+
XMP-DICOM, XMP-Device, XMP-GAudio, XMP-GCamera, XMP-GCreations, XMP-GDepth,
|
2522
|
+
XMP-GFocus, XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage, XMP-MP,
|
2523
|
+
XMP-MP1, XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-album, XMP-apple-fi,
|
2524
|
+
XMP-ast, XMP-aux, XMP-cc, XMP-cell, XMP-crd, XMP-creatorAtom, XMP-crs,
|
2525
|
+
XMP-dc, XMP-dex, XMP-digiKam, XMP-drone-dji, XMP-dwc, XMP-et, XMP-exif,
|
2526
|
+
XMP-exifEX, XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-hdr,
|
2527
|
+
XMP-hdrgm, XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro,
|
2528
|
+
XMP-microsoft, XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-nine, XMP-panorama,
|
2529
|
+
XMP-pdf, XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-pmi,
|
2530
|
+
XMP-prism, XMP-prl, XMP-prm, XMP-pur, XMP-rdf, XMP-sdc, XMP-swf, XMP-tiff,
|
2531
|
+
XMP-x, XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpDSA, XMP-xmpMM, XMP-xmpNote,
|
2494
2532
|
XMP-xmpPLUS, XMP-xmpRights, XMP-xmpTPg, ZIP, iTunes
|
2495
2533
|
|
2496
2534
|
=item Family 2 (Category):
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Summary: perl module for image data extraction
|
2
2
|
Name: perl-Image-ExifTool
|
3
|
-
Version: 12.
|
3
|
+
Version: 12.81
|
4
4
|
Release: 1
|
5
5
|
License: Artistic/GPL
|
6
6
|
Group: Development/Libraries/Perl
|
@@ -28,7 +28,7 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
28
28
|
3GP r/w | DSS r | JP2 r/w | ODT r | RWL r/w
|
29
29
|
7Z r | DV r | JPEG r/w | OFR r | RWZ r
|
30
30
|
A r | DVB r/w | JSON r | OGG r | RM r
|
31
|
-
AA r | DVR-MS r | JXL r
|
31
|
+
AA r | DVR-MS r | JXL r/w | OGV r | SEQ r
|
32
32
|
AAC r | DYLIB r | K25 r | ONP r | SKETCH r
|
33
33
|
AAE r | EIP r | KDC r | OPUS r | SO r
|
34
34
|
AAX r/w | EPS r/w | KEY r | ORF r/w | SR2 r/w
|