exiftool_vendored 13.34.0 → 13.37.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.
- checksums.yaml +4 -4
- data/bin/Changes +55 -1
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/Makefile.PL +1 -0
- data/bin/README +2 -2
- data/bin/build_geolocation +7 -3
- data/bin/exiftool +43 -33
- data/bin/lib/Image/ExifTool/Audible.pm +1 -1
- data/bin/lib/Image/ExifTool/BMP.pm +1 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +15 -8
- data/bin/lib/Image/ExifTool/CBOR.pm +1 -1
- data/bin/lib/Image/ExifTool/Canon.pm +86 -9
- data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
- data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
- data/bin/lib/Image/ExifTool/DJI.pm +59 -8
- data/bin/lib/Image/ExifTool/DV.pm +1 -1
- data/bin/lib/Image/ExifTool/EXE.pm +3 -2
- data/bin/lib/Image/ExifTool/FLIF.pm +1 -1
- data/bin/lib/Image/ExifTool/FLIR.pm +3 -3
- data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
- data/bin/lib/Image/ExifTool/FujiFilm.pm +91 -33
- data/bin/lib/Image/ExifTool/GIF.pm +1 -1
- data/bin/lib/Image/ExifTool/GM.pm +1 -1
- data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- data/bin/lib/Image/ExifTool/Geolocation.pm +3 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +10 -2
- data/bin/lib/Image/ExifTool/GoPro.pm +5 -5
- data/bin/lib/Image/ExifTool/Google.pm +804 -0
- data/bin/lib/Image/ExifTool/H264.pm +1 -1
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
- data/bin/lib/Image/ExifTool/ID3.pm +3 -3
- data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/JSON.pm +1 -1
- data/bin/lib/Image/ExifTool/LIF.pm +1 -1
- data/bin/lib/Image/ExifTool/LNK.pm +2 -2
- data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +4 -6
- data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/MWG.pm +1 -1
- data/bin/lib/Image/ExifTool/MXF.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +2 -2
- data/bin/lib/Image/ExifTool/MakerNotes.pm +30 -7
- data/bin/lib/Image/ExifTool/Microsoft.pm +4 -4
- data/bin/lib/Image/ExifTool/Nikon.pm +6 -5
- data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
- data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +6 -1
- data/bin/lib/Image/ExifTool/Other.pm +1 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +51 -39
- data/bin/lib/Image/ExifTool/Protobuf.pm +12 -6
- data/bin/lib/Image/ExifTool/Qualcomm.pm +2 -2
- data/bin/lib/Image/ExifTool/QuickTime.pm +30 -8
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +1 -1
- data/bin/lib/Image/ExifTool/README +7 -6
- data/bin/lib/Image/ExifTool/RIFF.pm +5 -3
- data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
- data/bin/lib/Image/ExifTool/Reconyx.pm +375 -91
- data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
- data/bin/lib/Image/ExifTool/Shortcuts.pm +8 -5
- data/bin/lib/Image/ExifTool/Sony.pm +20 -3
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +3 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +5749 -5695
- data/bin/lib/Image/ExifTool/TagNames.pod +690 -519
- data/bin/lib/Image/ExifTool/Text.pm +1 -1
- data/bin/lib/Image/ExifTool/Trailer.pm +1 -1
- data/bin/lib/Image/ExifTool/WPG.pm +1 -1
- data/bin/lib/Image/ExifTool/WTV.pm +1 -1
- data/bin/lib/Image/ExifTool/Writer.pl +2 -1
- data/bin/lib/Image/ExifTool/XMP.pm +39 -32
- data/bin/lib/Image/ExifTool/XMP2.pl +0 -482
- data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
- data/bin/lib/Image/ExifTool/iWork.pm +1 -1
- data/bin/lib/Image/ExifTool.pm +6 -4
- data/bin/lib/Image/ExifTool.pod +3 -3
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +4 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e99939a853444d1ebc80ab2738cd08bc29f2945044aa74ff682a9205e7e2e878
|
4
|
+
data.tar.gz: 14cc3a3e709dd586a4d73d4056c52ee24e74c0020042ecba084211a17ce93381
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '098d4af617f88acbc7cba6dd401e894e6eac938b5475b889fab26de2c670aef6320040e3bb5acd1e951d06c95de022e6c76207e67c6f022117566efa13fca872'
|
7
|
+
data.tar.gz: 72e570d5b590d04d5a39de9c32698f3946c0f1c0b8bdac6d9010b6c0b94e0418100b6991d16601c5064a093a6d04867290ddc286ae76478e0cc87900a9adb2e3
|
data/bin/Changes
CHANGED
@@ -4,9 +4,63 @@ ExifTool Version History
|
|
4
4
|
|
5
5
|
RSS feed: https://exiftool.org/rss.xml
|
6
6
|
|
7
|
-
Note: The most recent production release is Version 13.
|
7
|
+
Note: The most recent production release is Version 13.36. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
9
9
|
|
10
|
+
Sept. 22, 2025 - Version 13.37
|
11
|
+
|
12
|
+
- Added support for geotagging from Columbus GPS logger CSV files
|
13
|
+
- Added some new Canon, Sony and Olympus lenses (thanks Hubert Figuiere,
|
14
|
+
github #352 and Jos Roost)
|
15
|
+
- Added new Canon RFLensType and CanonModelID values (thanks Norbert Wasser
|
16
|
+
and Hubert Figuiere, github #350)
|
17
|
+
- Added a new FujiFilm FaceElementType value
|
18
|
+
- Decode Reconyx MicroFire and Hyperfire 4K maker notes (thanks Reconyx)
|
19
|
+
- Decode a number of new Canon and Pentax tags and add a number of new values
|
20
|
+
(thanks Karsten Gieselmann)
|
21
|
+
- Decode maker notes from Ricoh GR III videos
|
22
|
+
- Decode a new Sony tag (thanks Jos Roost)
|
23
|
+
- Decode Google HDRP maker notes
|
24
|
+
- Raised size limit on QuickTime atoms extracted for the -ee option, and added
|
25
|
+
a minor warning and allow bypassing with the -m option if over this limit
|
26
|
+
- Minor change to verbose output for XMP metadata
|
27
|
+
- Fixed possible hang/crash when reading Windows executables (github #351)
|
28
|
+
- Fixed incorrect FujiFilm PanoramaDirection values
|
29
|
+
- API Changes:
|
30
|
+
- Fixed GeoDir option so alternate languages are loaded properly when a
|
31
|
+
relative path is used
|
32
|
+
|
33
|
+
Sept. 9, 2025 - Version 13.36 (production release)
|
34
|
+
|
35
|
+
- Added a new Nikon LensID (thanks Max, github #345)
|
36
|
+
- Added new Sony and Pentax camera ID's (thanks Hubert Figuiere, github #347)
|
37
|
+
- Tolerate 'junk' after 'WAVE' chunk in LA, PAC, OFR and WV audio files
|
38
|
+
- Use gnu tar 1.35 to build the .tar.gz distribution package (versions
|
39
|
+
13.31-13.35 used bsdtar 3.5.3, and earlier versions used bsdtar 2.8.3)
|
40
|
+
|
41
|
+
Sept. 6, 2025 - Version 13.35 (production release)
|
42
|
+
|
43
|
+
- Added a new CanonModelID
|
44
|
+
- Added new Olympus PictureMode and LensType values (thanks Michael Meissner)
|
45
|
+
- Decode GPS from another DJI protobuf format (DJI Neo)
|
46
|
+
- Decode a few new FujiFilm tags
|
47
|
+
- Enhanced -ee option to extract M-RAW information from all images in FujiFilm
|
48
|
+
RAF files
|
49
|
+
- Improved handling of standard-format unknown XMP date/time tags when the API
|
50
|
+
XMPAutoConv option is set (which is the default) to put them in the "Time"
|
51
|
+
group and apply the -d date/time formatting
|
52
|
+
- Improved -fileNUM option so it may be used to access tags from alternate
|
53
|
+
files when the specified target FILE doesn't exist
|
54
|
+
- Improved print conversions for some Canon tags to handle "n/a" values
|
55
|
+
- Enhanced JSON long output (-j -l) so the API SaveBin option also returns the
|
56
|
+
Rational ("rat") value if available
|
57
|
+
- Changed -if option so the expression is evaluated even when the source file
|
58
|
+
doesn't exist (to allow more flexibily when using -fileNUM option or when
|
59
|
+
creating the output file when writing)
|
60
|
+
- Fixed decoding of a few new Pentax tags (thanks Karsten Gieselmann)
|
61
|
+
- Fixed -diff feature to report differences in binary-data values and to be
|
62
|
+
consistent with handling of backslashes in Windows path names
|
63
|
+
|
10
64
|
Aug. 18, 2025 - Version 13.34
|
11
65
|
|
12
66
|
- Decode a number of new Pentax tags (thanks Karsten Gieselmann)
|
data/bin/MANIFEST
CHANGED
@@ -87,6 +87,7 @@ html/TagNames/GM.html
|
|
87
87
|
html/TagNames/GPS.html
|
88
88
|
html/TagNames/GeoTiff.html
|
89
89
|
html/TagNames/GoPro.html
|
90
|
+
html/TagNames/Google.html
|
90
91
|
html/TagNames/H264.html
|
91
92
|
html/TagNames/HP.html
|
92
93
|
html/TagNames/HTML.html
|
@@ -308,6 +309,7 @@ lib/Image/ExifTool/FujiFilm.pm
|
|
308
309
|
lib/Image/ExifTool/GE.pm
|
309
310
|
lib/Image/ExifTool/GIF.pm
|
310
311
|
lib/Image/ExifTool/GIMP.pm
|
312
|
+
lib/Image/ExifTool/Google.pm
|
311
313
|
lib/Image/ExifTool/GM.pm
|
312
314
|
lib/Image/ExifTool/GPS.pm
|
313
315
|
lib/Image/ExifTool/GeoTiff.pm
|
@@ -645,6 +647,8 @@ t/Geotag_8.out
|
|
645
647
|
t/Geotag_9.out
|
646
648
|
t/GoPro.t
|
647
649
|
t/GoPro_2.out
|
650
|
+
t/Google.t
|
651
|
+
t/Google_2.out
|
648
652
|
t/HTML.t
|
649
653
|
t/HTML_2.out
|
650
654
|
t/ICO.t
|
@@ -1095,6 +1099,7 @@ t/images/Geotag2.log
|
|
1095
1099
|
t/images/Geotag3.log
|
1096
1100
|
t/images/Geotag_DJI_2020-12-02_[07-50-31].csv
|
1097
1101
|
t/images/GoPro.jpg
|
1102
|
+
t/images/Google.jpg
|
1098
1103
|
t/images/HTML.html
|
1099
1104
|
t/images/ICC_Profile.icc
|
1100
1105
|
t/images/ICO.ico
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/Makefile.PL
CHANGED
data/bin/README
CHANGED
@@ -110,8 +110,8 @@ your home directory, then you would type the following commands in a
|
|
110
110
|
terminal window to extract and run ExifTool:
|
111
111
|
|
112
112
|
cd ~/Desktop
|
113
|
-
gzip -dc Image-ExifTool-13.
|
114
|
-
cd Image-ExifTool-13.
|
113
|
+
gzip -dc Image-ExifTool-13.37.tar.gz | tar -xf -
|
114
|
+
cd Image-ExifTool-13.37
|
115
115
|
./exiftool t/images/ExifTool.jpg
|
116
116
|
|
117
117
|
Note: These commands extract meta information from one of the test images.
|
data/bin/build_geolocation
CHANGED
@@ -16,6 +16,9 @@
|
|
16
16
|
# under ActivePerl
|
17
17
|
# 2024-04-29 - PH Added feature types and default to db v1.03
|
18
18
|
# 2024-06-13 - PH Tweaked case of imported feature types
|
19
|
+
# 2025-09-11 - PH Changed priority of alternate-language names to
|
20
|
+
# use the preferred name if available and fixed
|
21
|
+
# flag counts in verbose output
|
19
22
|
#
|
20
23
|
# Notes: Requires these files from https://download.geonames.org/export/
|
21
24
|
#
|
@@ -564,7 +567,8 @@ if (not $noLang and open INFILE, '<', "$dbdir/$altNamesFile") {
|
|
564
567
|
$items[$_] and $flags |= (1<<($_-4)) foreach 4,5,6,7;
|
565
568
|
$flags{$items[1]} = ( $flags{$items[1]} || 0 ) | $flags;
|
566
569
|
next if $items[6] or $items[7]; # ignore colloquial and historic names
|
567
|
-
|
570
|
+
# give more weight to preferred name and less weight to short name
|
571
|
+
my $pri = ($items[4] ? 2 : 0) + ($items[5] ? 0 : 1);
|
568
572
|
my $langPri = $bestPri{$lng};
|
569
573
|
$langPri or $langPri = $bestPri{$lng} = { };
|
570
574
|
next if $$langPri{$items[1]} and $$langPri{$items[1]} > $pri;
|
@@ -930,9 +934,9 @@ if ($noLang) {
|
|
930
934
|
print "$type flags:\n";
|
931
935
|
printf(" 0x%.2x - %d\n", 0, $$flags{0} || 0);
|
932
936
|
my @label = qw(preferred short colloquial historic);
|
933
|
-
foreach my $bit (0..
|
937
|
+
foreach my $bit (0..3) {
|
934
938
|
my $n = 0;
|
935
|
-
$_ & (1<<$bit) and
|
939
|
+
$_ & (1<<$bit) and $n += $$flags{$_} foreach keys %$flags;
|
936
940
|
printf(" 0x%.2x - %d (%s)\n", (1<<$bit), $n, shift(@label)) if $n;
|
937
941
|
}
|
938
942
|
}
|
data/bin/exiftool
CHANGED
@@ -11,7 +11,7 @@ use strict;
|
|
11
11
|
use warnings;
|
12
12
|
require 5.004;
|
13
13
|
|
14
|
-
my $version = '13.
|
14
|
+
my $version = '13.37';
|
15
15
|
|
16
16
|
$^W = 1; # enable global warnings
|
17
17
|
|
@@ -57,7 +57,7 @@ sub FormatJSON($$$;$);
|
|
57
57
|
sub PrintCSV(;$);
|
58
58
|
sub AddGroups($$$$);
|
59
59
|
sub ConvertBinary($);
|
60
|
-
sub IsEqual(
|
60
|
+
sub IsEqual($$;$);
|
61
61
|
sub Printable($);
|
62
62
|
sub LengthUTF8($);
|
63
63
|
sub Infile($;$);
|
@@ -969,6 +969,7 @@ for (;;) {
|
|
969
969
|
if (/^diff$/i) {
|
970
970
|
$diff = shift;
|
971
971
|
defined $diff or Error("Expecting file name for -$_ option\n"), $badCmd=1;
|
972
|
+
CleanFilename($diff); # change to forward slashes if necessary
|
972
973
|
next;
|
973
974
|
}
|
974
975
|
/^delete_original(!?)$/i and $deleteOrig = ($1 ? 2 : 1), next;
|
@@ -2150,10 +2151,12 @@ sub GetImageInfo($$)
|
|
2150
2151
|
# set alternate file names
|
2151
2152
|
foreach $g8 (sort keys %altFile) {
|
2152
2153
|
my $altName = $orig;
|
2153
|
-
|
2154
|
-
|
2155
|
-
|
2156
|
-
|
2154
|
+
unless ($altFile{$g8} eq '@') {
|
2155
|
+
# must double any '$' symbols in the original file name because
|
2156
|
+
# they are used for tag names in a -fileNUM argument
|
2157
|
+
$altName =~ s/\$/\$\$/g;
|
2158
|
+
$altName = FilenameSPrintf($altFile{$g8}, $altName);
|
2159
|
+
}
|
2157
2160
|
$et->SetAlternateFile($g8, $altName);
|
2158
2161
|
}
|
2159
2162
|
|
@@ -2178,15 +2181,7 @@ sub GetImageInfo($$)
|
|
2178
2181
|
}
|
2179
2182
|
# evaluate -if expression for conditional processing
|
2180
2183
|
if (@condition) {
|
2181
|
-
unless ($file eq '-' or $et->Exists($file)) {
|
2182
|
-
Warn "Error: File not found - $file\n";
|
2183
|
-
EFile($file);
|
2184
|
-
FileNotFound($file);
|
2185
|
-
++$countBad;
|
2186
|
-
return;
|
2187
|
-
}
|
2188
2184
|
my $result;
|
2189
|
-
|
2190
2185
|
unless ($failCondition) {
|
2191
2186
|
# catch run time errors as well as compile errors
|
2192
2187
|
undef $evalWarning;
|
@@ -2225,7 +2220,10 @@ sub GetImageInfo($$)
|
|
2225
2220
|
}
|
2226
2221
|
undef @foundTags if $fastCondition; # ignore if we didn't get all tags
|
2227
2222
|
}
|
2228
|
-
|
2223
|
+
if ($result) {
|
2224
|
+
# discard $info for non-existent file
|
2225
|
+
undef $info unless $file eq '-' or $et->Exists($file);
|
2226
|
+
} else {
|
2229
2227
|
Progress($vout, "-------- $file (failed condition)") if $verbose;
|
2230
2228
|
EFile($file, 2);
|
2231
2229
|
++$countFailed;
|
@@ -2922,7 +2920,7 @@ TAG: foreach $tag (@foundTags) {
|
|
2922
2920
|
$val = $et->GetValue($tag, 'ValueConv');
|
2923
2921
|
$val = '' unless defined $val;
|
2924
2922
|
# go back to print ValueConv value only if different
|
2925
|
-
next unless IsEqual($val, $lastVal);
|
2923
|
+
next unless IsEqual($val, $lastVal, 1);
|
2926
2924
|
print $fp "$descClose\n </$tok>";
|
2927
2925
|
last;
|
2928
2926
|
}
|
@@ -2959,7 +2957,7 @@ TAG: foreach $tag (@foundTags) {
|
|
2959
2957
|
$$val{desc} = $desc;
|
2960
2958
|
if ($printConv) {
|
2961
2959
|
my $num = $et->GetValue($tag, 'ValueConv');
|
2962
|
-
$$val{num} = $num if defined $num and not IsEqual($num, $$val{val});
|
2960
|
+
$$val{num} = $num if defined $num and not IsEqual($num, $$val{val}, 1);
|
2963
2961
|
}
|
2964
2962
|
my $ex = $$et{TAG_EXTRA}{$tag};
|
2965
2963
|
$$val{'fmt'} = $$ex{G6} if defined $$ex{G6};
|
@@ -2972,6 +2970,7 @@ TAG: foreach $tag (@foundTags) {
|
|
2972
2970
|
$$val{'hex'} = join ' ', unpack '(H2)*', $$ex{BinVal};
|
2973
2971
|
}
|
2974
2972
|
}
|
2973
|
+
$$val{rat} = $$ex{Rational} if defined $$ex{Rational} and $$et{OPTIONS}{SaveBin};
|
2975
2974
|
}
|
2976
2975
|
}
|
2977
2976
|
FormatJSON($fp, $val, $ind, $quote);
|
@@ -3945,24 +3944,29 @@ sub ConvertBinary($)
|
|
3945
3944
|
|
3946
3945
|
#------------------------------------------------------------------------------
|
3947
3946
|
# Compare ValueConv and PrintConv values of a tag to see if they are equal
|
3948
|
-
# Inputs: 0) value1, 1) value2
|
3947
|
+
# Inputs: 0) value1, 1) value2, 2) flag to return true for any scalar references
|
3949
3948
|
# Returns: true if they are equal
|
3950
|
-
sub IsEqual(
|
3949
|
+
sub IsEqual($$;$)
|
3951
3950
|
{
|
3952
|
-
my ($a, $b) = @_;
|
3951
|
+
my ($a, $b, $trueScalar) = @_;
|
3953
3952
|
# (scalar values are not print-converted)
|
3954
|
-
return 1 if $a eq $b
|
3953
|
+
return 1 if $a eq $b;
|
3954
|
+
if (ref $a eq 'SCALAR') {
|
3955
|
+
return 1 if $trueScalar;
|
3956
|
+
return 1 if ref $b eq 'SCALAR' and $$a eq $$b;
|
3957
|
+
return 0;
|
3958
|
+
}
|
3955
3959
|
if (ref $a eq 'HASH' and ref $b eq 'HASH') {
|
3956
3960
|
return 0 if scalar(keys %$a) != scalar(keys %$b);
|
3957
3961
|
my $key;
|
3958
3962
|
foreach $key (keys %$a) {
|
3959
|
-
return 0 unless IsEqual($$a{$key}, $$b{$key});
|
3963
|
+
return 0 unless IsEqual($$a{$key}, $$b{$key}, $trueScalar);
|
3960
3964
|
}
|
3961
3965
|
} else {
|
3962
3966
|
return 0 if ref $a ne 'ARRAY' or ref $b ne 'ARRAY' or @$a != @$b;
|
3963
3967
|
my $i;
|
3964
3968
|
for ($i=0; $i<scalar(@$a); ++$i) {
|
3965
|
-
return 0 unless IsEqual($$a[$i], $$b[$i]);
|
3969
|
+
return 0 unless IsEqual($$a[$i], $$b[$i], $trueScalar);
|
3966
3970
|
}
|
3967
3971
|
}
|
3968
3972
|
return 1;
|
@@ -4380,7 +4384,7 @@ sub FindFileWindows($$)
|
|
4380
4384
|
# recode file name as UTF-8 if necessary
|
4381
4385
|
my $enc = $et->Options('CharsetFileName');
|
4382
4386
|
$wildfile = $et->Decode($wildfile, $enc, undef, 'UTF8') if $enc and $enc ne 'UTF8';
|
4383
|
-
$wildfile
|
4387
|
+
CleanFilename($wildfile); # use forward slashes
|
4384
4388
|
my ($dir, $wildname) = ($wildfile =~ m{(.*[:/])(.*)}) ? ($1, $2) : ('', $wildfile);
|
4385
4389
|
if (HasWildcards($dir)) {
|
4386
4390
|
Warn "Wildcards don't work in the directory specification\n";
|
@@ -4460,7 +4464,7 @@ sub AbsPath($)
|
|
4460
4464
|
local $SIG{'__WARN__'} = sub { };
|
4461
4465
|
$path = eval { Cwd::abs_path($file) };
|
4462
4466
|
}
|
4463
|
-
$path
|
4467
|
+
CleanFilename($path) if defined $path; # use forward slashes
|
4464
4468
|
}
|
4465
4469
|
return $path;
|
4466
4470
|
}
|
@@ -5901,13 +5905,15 @@ Adding the B<-D> or B<-H> option changes tag values to JSON objects with
|
|
5901
5905
|
"val" and "id" fields. Adding B<-l> adds a "desc" field, and a "num" field
|
5902
5906
|
if the numerical value is different from the converted "val", and "fmt" and
|
5903
5907
|
"hex" fields for EXIF metadata if the API SaveFormat and SaveBin options are
|
5904
|
-
set respectively
|
5905
|
-
LimitLongValues setting.
|
5906
|
-
|
5907
|
-
|
5908
|
-
|
5909
|
-
|
5910
|
-
|
5908
|
+
set respectively. The length of the "hex" output is limited by the API
|
5909
|
+
LimitLongValues setting. Setting the SaveBin option also causes the
|
5910
|
+
original values of Rational tags to be returned in string form as an extra
|
5911
|
+
"rat" field. The B<-b> option may be added to output binary data, encoded
|
5912
|
+
in base64 if necessary (indicated by ASCII "base64:" as the first 7 bytes of
|
5913
|
+
the value), and B<-t> may be added to include tag table information (see
|
5914
|
+
B<-t> for details). The JSON output is UTF-8 regardless of any B<-L> or
|
5915
|
+
B<-charset> option setting, but the UTF-8 validation is disabled if a
|
5916
|
+
character set other than UTF-8 is specified.
|
5911
5917
|
|
5912
5918
|
Note that ExifTool quotes JSON values only if they don't look like numbers
|
5913
5919
|
(regardless of the original storage format or the relevant metadata
|
@@ -6076,7 +6082,7 @@ with this command:
|
|
6076
6082
|
|
6077
6083
|
produces output like this:
|
6078
6084
|
|
6079
|
-
-- Generated by ExifTool 13.
|
6085
|
+
-- Generated by ExifTool 13.37 --
|
6080
6086
|
File: a.jpg - 2003:10:31 15:44:19
|
6081
6087
|
(f/5.6, 1/60s, ISO 100)
|
6082
6088
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -7173,6 +7179,10 @@ Subtle note: If a B<-tagsFromFile> option is used, tags in the I<ALTFILE>
|
|
7173
7179
|
argument come from the I<SRCFILE> that applies to the first argument
|
7174
7180
|
accessing tags from the corresponding C<FileNUM> group.
|
7175
7181
|
|
7182
|
+
I<ALTFILE> may also be C<@> to access tags from the specified I<FILE>, which
|
7183
|
+
may be useful when the B<-srcfile> option is used to process a different
|
7184
|
+
source file.
|
7185
|
+
|
7176
7186
|
User-defined Composite tags may access tags from alternate files using the
|
7177
7187
|
appropriate (case-sensitive) family 8 group name.
|
7178
7188
|
|
@@ -88,7 +88,7 @@ sub ProcessAudible_cvrx($$$);
|
|
88
88
|
PROCESS_PROC => \&ProcessAudible_cvrx,
|
89
89
|
GROUPS => { 0 => 'QuickTime', 2 => 'Audio' },
|
90
90
|
NOTES => 'Audible cover art information in M4B audio books.',
|
91
|
-
VARS => {
|
91
|
+
VARS => { ID_FMT => 'none' },
|
92
92
|
CoverArtType => 'CoverArtType',
|
93
93
|
CoverArt => {
|
94
94
|
Name => 'CoverArt',
|
@@ -234,7 +234,7 @@ my %fixed2_30 = (
|
|
234
234
|
%Image::ExifTool::BMP::Extra = (
|
235
235
|
GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Image' },
|
236
236
|
NOTES => 'Extra information extracted from some BMP images.',
|
237
|
-
VARS => {
|
237
|
+
VARS => { ID_FMT => 'none' },
|
238
238
|
LinkedProfileName => { },
|
239
239
|
ICC_Profile => { SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' } },
|
240
240
|
EmbeddedJPG => {
|
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
|
|
35
35
|
use Image::ExifTool::Validate;
|
36
36
|
use Image::ExifTool::MacOS;
|
37
37
|
|
38
|
-
$VERSION = '3.
|
38
|
+
$VERSION = '3.63';
|
39
39
|
@ISA = qw(Exporter);
|
40
40
|
|
41
41
|
sub NumbersFirst($$);
|
@@ -109,6 +109,7 @@ my %tweakOrder = (
|
|
109
109
|
'FujiFilm::RAFData' => 'FujiFilm::RAF',
|
110
110
|
'QuickTime::AudioKeys' => 'QuickTime::Keys',
|
111
111
|
'QuickTime::VideoKeys' => 'QuickTime::AudioKeys',
|
112
|
+
'Google::HDRPText' => 'Google::HDRPlusMakerNote',
|
112
113
|
);
|
113
114
|
|
114
115
|
# list of all recognized Format strings
|
@@ -867,15 +868,15 @@ sub new
|
|
867
868
|
$longID{$tableName} = 0;
|
868
869
|
$longName{$tableName} = 0;
|
869
870
|
# save all tag names
|
870
|
-
my ($tagID, $binaryTable, $noID, $
|
871
|
+
my ($tagID, $binaryTable, $noID, $prtID, $isIPTC, $isXMP);
|
871
872
|
$isIPTC = 1 if $writeProc and $writeProc eq \&Image::ExifTool::IPTC::WriteIPTC;
|
872
873
|
# generate flattened tag names for structure fields if this is an XMP table
|
873
874
|
if ($$table{GROUPS} and $$table{GROUPS}{0} eq 'XMP' or $$vars{ADD_FLATTENED}) {
|
874
875
|
Image::ExifTool::XMP::AddFlattenedTags($table);
|
875
876
|
$isXMP = 1;
|
876
877
|
}
|
877
|
-
$
|
878
|
-
$
|
878
|
+
$prtID = $$vars{ID_FMT};
|
879
|
+
$noID = 1 if $isXMP or $short =~ /^(Shortcuts|ASF.*)$/ or $prtID and $prtID eq 'none';
|
879
880
|
if ($$table{WRITE_PROC} and $$table{WRITE_PROC} eq \&Image::ExifTool::WriteBinaryData
|
880
881
|
and not $$table{CHECK_PROC})
|
881
882
|
{
|
@@ -1104,7 +1105,7 @@ TagID: foreach $tagID (@keys) {
|
|
1104
1105
|
$note = 'NOT a flattened tag!';
|
1105
1106
|
} else {
|
1106
1107
|
# add note about different XMP Tag ID
|
1107
|
-
$note = $$tagInfo{RootTagInfo} ? $tagID : "
|
1108
|
+
$note = $$tagInfo{RootTagInfo} ? $tagID : "tag ID is '${tagID}'";
|
1108
1109
|
}
|
1109
1110
|
if ($$tagInfo{Notes}) {
|
1110
1111
|
$values[-1] =~ s/^\(/($note; /;
|
@@ -1492,8 +1493,14 @@ TagID: foreach $tagID (@keys) {
|
|
1492
1493
|
if ($tagID =~ /^(-)?\d+(\.\d+)?$/) {
|
1493
1494
|
if ($1) {
|
1494
1495
|
$tagIDstr = $tagID;
|
1495
|
-
} elsif (defined $
|
1496
|
-
|
1496
|
+
} elsif (defined $prtID) {
|
1497
|
+
if ($prtID eq 'hex') {
|
1498
|
+
$tagIDstr = sprintf('0x%.4x',$tagID);
|
1499
|
+
} elsif ($prtID eq 'str') {
|
1500
|
+
$tagIDstr = "'${tagID}'";
|
1501
|
+
} else {
|
1502
|
+
$tagIDstr = $tagID;
|
1503
|
+
}
|
1497
1504
|
} elsif (not $2 and not $binaryTable and not $isIPTC and
|
1498
1505
|
not ($short =~ /^CanonCustom/ and $tagID < 256))
|
1499
1506
|
{
|
@@ -1911,7 +1918,7 @@ sub SortedTagTableKeys($)
|
|
1911
1918
|
my $table = shift;
|
1912
1919
|
my $vars = $$table{VARS} || { };
|
1913
1920
|
my @keys = TagTableKeys($table);
|
1914
|
-
if ($$vars{
|
1921
|
+
if ($$vars{ID_FMT} and $$vars{ID_FMT} eq 'none') {
|
1915
1922
|
# sort by tag name if ID not shown
|
1916
1923
|
my ($key, %name);
|
1917
1924
|
foreach $key (@keys) {
|
@@ -62,7 +62,7 @@ my %cborType7 = (
|
|
62
62
|
|
63
63
|
%Image::ExifTool::CBOR::Main = (
|
64
64
|
GROUPS => { 0 => 'JUMBF', 1 => 'CBOR', 2 => 'Other' },
|
65
|
-
VARS => {
|
65
|
+
VARS => { ID_FMT => 'none' },
|
66
66
|
PROCESS_PROC => \&ProcessCBOR,
|
67
67
|
NOTES => q{
|
68
68
|
The tags below are extracted from CBOR (Concise Binary Object
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
88
88
|
sub ProcessExifInfo($$$);
|
89
89
|
sub SwapWords($);
|
90
90
|
|
91
|
-
$VERSION = '4.
|
91
|
+
$VERSION = '4.97';
|
92
92
|
|
93
93
|
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
|
94
94
|
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
|
@@ -561,7 +561,8 @@ $VERSION = '4.95';
|
|
561
561
|
4159 => 'Canon EF-M 32mm f/1.4 STM', #42
|
562
562
|
4160 => 'Canon EF-S 35mm f/2.8 Macro IS STM', #42
|
563
563
|
4208 => 'Sigma 56mm f/1.4 DC DN | C or other Sigma Lens', #forum10603
|
564
|
-
4208.1 => 'Sigma 30mm F1.4 DC DN | C', #
|
564
|
+
4208.1 => 'Sigma 30mm F1.4 DC DN | C', #github#83 (016)
|
565
|
+
6512 => 'Sigma 12mm F1.4 DC | C', #github#352 (025)
|
565
566
|
# (Nano USM lenses - 0x90xx)
|
566
567
|
36910 => 'Canon EF 70-300mm f/4-5.6 IS II USM', #42
|
567
568
|
36912 => 'Canon EF-S 18-135mm f/3.5-5.6 IS USM', #42
|
@@ -640,6 +641,7 @@ $VERSION = '4.95';
|
|
640
641
|
'61182.62' => 'Canon RF 50mm F1.4 L VCM', #42
|
641
642
|
'61182.63' => 'Canon RF 24mm F1.4 L VCM', #42
|
642
643
|
'61182.64' => 'Canon RF 20mm F1.4 L VCM', #42
|
644
|
+
'61182.65' => 'Canon RF 85mm F1.4 L VCM', #github350
|
643
645
|
65535 => 'n/a',
|
644
646
|
);
|
645
647
|
|
@@ -892,6 +894,7 @@ $VERSION = '4.95';
|
|
892
894
|
|
893
895
|
# (see http://cweb.canon.jp/e-support/faq/answer/digitalcamera/10447-1.html for PowerShot/IXUS/IXY names)
|
894
896
|
|
897
|
+
0x40000227 => 'EOS C50', #github350
|
895
898
|
0x4007d673 => 'DC19/DC21/DC22',
|
896
899
|
0x4007d674 => 'XH A1',
|
897
900
|
0x4007d675 => 'HV10',
|
@@ -1006,6 +1009,7 @@ $VERSION = '4.95';
|
|
1006
1009
|
0x80000491 => 'PowerShot V10', #25
|
1007
1010
|
0x80000495 => 'EOS R1', #PH
|
1008
1011
|
0x80000496 => 'R5 Mark II', #forum16406
|
1012
|
+
0x80000497 => 'PowerShot V1', #PH
|
1009
1013
|
0x80000498 => 'EOS R100', #25
|
1010
1014
|
0x80000516 => 'EOS R50 V', #42
|
1011
1015
|
0x80000520 => 'EOS D2000C', #IB
|
@@ -7047,6 +7051,7 @@ my %ciMaxFocal = (
|
|
7047
7051
|
325 => 'Canon RF 50mm F1.4 L VCM', #42
|
7048
7052
|
326 => 'Canon RF 24mm F1.4 L VCM', #42
|
7049
7053
|
327 => 'Canon RF 20mm F1.4 L VCM', #42
|
7054
|
+
328 => 'Canon RF 85mm F1.4 L VCM', #42/github350
|
7050
7055
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
7051
7056
|
},
|
7052
7057
|
},
|
@@ -9124,7 +9129,7 @@ my %filterConv = (
|
|
9124
9129
|
RawConv => '$val == 0x7fffffff ? undef : $val',
|
9125
9130
|
},
|
9126
9131
|
7 => { # -4 to 4
|
9127
|
-
Name => 'Saturation',
|
9132
|
+
Name => 'Saturation',
|
9128
9133
|
RawConv => '$val == 0x7fffffff ? undef : $val',
|
9129
9134
|
%Image::ExifTool::Exif::printParameter,
|
9130
9135
|
},
|
@@ -9172,15 +9177,40 @@ my %filterConv = (
|
|
9172
9177
|
Name => 'AFConfigTool',
|
9173
9178
|
ValueConv => '$val + 1',
|
9174
9179
|
ValueConvInv => '$val - 1',
|
9175
|
-
|
9176
|
-
|
9180
|
+
PrintHex => 1,
|
9181
|
+
PrintConv => {
|
9182
|
+
11 => 'Case A', #KG instead of 'Case 11'. Canon use A for Auto
|
9183
|
+
0x80000000 => 'n/a',
|
9184
|
+
OTHER => sub { 'Case ' . shift },
|
9185
|
+
},
|
9186
|
+
PrintConvInv => '$val=~/(\d+)/ ? $1 : 0x80000000',
|
9187
|
+
},
|
9188
|
+
2 => {
|
9189
|
+
Name => 'AFTrackingSensitivity',
|
9190
|
+
PrintHex => 1,
|
9191
|
+
PrintConv => {
|
9192
|
+
127 => 'Auto', #KG
|
9193
|
+
0x7fffffff => 'n/a',
|
9194
|
+
OTHER => sub { shift },
|
9195
|
+
},
|
9177
9196
|
},
|
9178
|
-
2 => 'AFTrackingSensitivity',
|
9179
9197
|
3 => {
|
9180
9198
|
Name => 'AFAccelDecelTracking',
|
9181
9199
|
Description => 'AF Accel/Decel Tracking',
|
9200
|
+
PrintHex => 1,
|
9201
|
+
PrintConv => {
|
9202
|
+
127 => 'Auto', #KG
|
9203
|
+
0x7fffffff => 'n/a',
|
9204
|
+
OTHER => sub { shift },
|
9205
|
+
},
|
9206
|
+
},
|
9207
|
+
4 => {
|
9208
|
+
Name => 'AFPointSwitching',
|
9209
|
+
PrintConv => {
|
9210
|
+
0x7fffffff => 'n/a',
|
9211
|
+
OTHER => sub { shift },
|
9212
|
+
},
|
9182
9213
|
},
|
9183
|
-
4 => 'AFPointSwitching',
|
9184
9214
|
5 => { #52
|
9185
9215
|
Name => 'AIServoFirstImage',
|
9186
9216
|
PrintConv => {
|
@@ -9330,6 +9360,7 @@ my %filterConv = (
|
|
9330
9360
|
1 => 'People',
|
9331
9361
|
2 => 'Animals',
|
9332
9362
|
3 => 'Vehicles',
|
9363
|
+
4 => 'Auto', #KG (R1, R5m2)
|
9333
9364
|
},
|
9334
9365
|
},
|
9335
9366
|
21 => { #github344 (R6)
|
@@ -9340,9 +9371,55 @@ my %filterConv = (
|
|
9340
9371
|
2 => 'Switch Subject',
|
9341
9372
|
},
|
9342
9373
|
},
|
9343
|
-
24 => { #forum16068
|
9374
|
+
24 => { #forum16068 #KG extensions for 'left' and 'right'
|
9344
9375
|
Name => 'EyeDetection',
|
9345
|
-
PrintConv =>
|
9376
|
+
PrintConv => {
|
9377
|
+
0 => 'Off',
|
9378
|
+
1 => 'Auto',
|
9379
|
+
2 => 'Left Eye',
|
9380
|
+
3 => 'Right Eye',
|
9381
|
+
},
|
9382
|
+
},
|
9383
|
+
# ---------------
|
9384
|
+
# Entries 25..31 exist for recent models only (R1, R5m2, ...)
|
9385
|
+
# ---------------
|
9386
|
+
26 => { #KG
|
9387
|
+
Name => 'WholeAreaTracking',
|
9388
|
+
PrintConv => {
|
9389
|
+
0 => 'Off',
|
9390
|
+
1 => 'On',
|
9391
|
+
},
|
9392
|
+
},
|
9393
|
+
27 => { #KG
|
9394
|
+
Name => 'ServoAFCharacteristics',
|
9395
|
+
PrintConv => {
|
9396
|
+
0 => 'Case Auto',
|
9397
|
+
1 => 'Case Manual',
|
9398
|
+
},
|
9399
|
+
},
|
9400
|
+
28 => { #KG
|
9401
|
+
Name => 'CaseAutoSetting',
|
9402
|
+
PrintConv => {
|
9403
|
+
-1 => 'Locked On',
|
9404
|
+
0 => 'Standard',
|
9405
|
+
1 => 'Responsive',
|
9406
|
+
0x7fffffff => 'n/a',
|
9407
|
+
},
|
9408
|
+
},
|
9409
|
+
29 => { #KG
|
9410
|
+
Name => 'ActionPriority',
|
9411
|
+
PrintConv => {
|
9412
|
+
0 => 'Off',
|
9413
|
+
1 => 'On',
|
9414
|
+
},
|
9415
|
+
},
|
9416
|
+
30 => { #KG
|
9417
|
+
Name => 'SportEvents',
|
9418
|
+
PrintConv => {
|
9419
|
+
0 => 'Soccer',
|
9420
|
+
1 => 'Basketball',
|
9421
|
+
2 => 'Volleyball',
|
9422
|
+
}
|
9346
9423
|
},
|
9347
9424
|
);
|
9348
9425
|
|
@@ -1004,7 +1004,7 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
1004
1004
|
WRITABLE => 1,
|
1005
1005
|
PERMANENT => 1, # (can't add/delete these individually)
|
1006
1006
|
GROUPS => { 1 => 'CanonDR4', 2 => 'Image' },
|
1007
|
-
VARS => {
|
1007
|
+
VARS => { ID_FMT => 'hex', SORT_PROC => \&SortDR4 },
|
1008
1008
|
NOTES => q{
|
1009
1009
|
Tags written by Canon DPP version 4 in CanonVRD trailers and DR4 files. Each
|
1010
1010
|
tag has three associated flag words which are stored with the directory
|
@@ -25,7 +25,7 @@ $VERSION = '1.04';
|
|
25
25
|
%Image::ExifTool::CaptureOne::Main = (
|
26
26
|
GROUPS => { 0 => 'XML', 1 => 'XML', 2 => 'Image' },
|
27
27
|
PROCESS_PROC => \&Image::ExifTool::XMP::ProcessXMP,
|
28
|
-
VARS => {
|
28
|
+
VARS => { ID_FMT => 'none' },
|
29
29
|
ColorCorrections => { ValueConv => '\$val' }, # (long list of floating point numbers)
|
30
30
|
);
|
31
31
|
|