exiftool-vendored.exe 13.32.0 → 13.34.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.exe +0 -0
- package/bin/exiftool_files/exiftool.pl +17 -4
- package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +4 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +15 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +6 -5
- package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +4 -159
- package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +11 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +5 -3
- package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +14 -2
- package/bin/exiftool_files/lib/Image/ExifTool/LNK.pm +4 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/cs.pm +0 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/de.pm +0 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/fr.pm +0 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/it.pm +0 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/ja.pm +0 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/nl.pm +0 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/pl.pm +0 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/zh_cn.pm +0 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Microsoft.pm +158 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Minolta.pm +4 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +69 -35
- package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +40 -10
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +253 -34
- package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +168 -14
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +11 -4
- package/bin/exiftool_files/lib/Image/ExifTool/README +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +43 -17
- package/bin/exiftool_files/lib/Image/ExifTool/TNEF.pm +487 -0
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +4375 -4267
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +244 -16
- package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +14 -12
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +12 -12
- package/bin/exiftool_files/lib/Image/ExifTool.pm +12 -4
- package/bin/exiftool_files/lib/Image/ExifTool.pod +50 -44
- package/bin/exiftool_files/windows_exiftool.txt +87 -82
- package/package.json +4 -4
package/bin/exiftool.exe
CHANGED
|
Binary file
|
|
@@ -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.34';
|
|
15
15
|
|
|
16
16
|
$^W = 1; # enable global warnings
|
|
17
17
|
|
|
@@ -2538,7 +2538,7 @@ T2: foreach $t2 (@tags2) {
|
|
|
2538
2538
|
# print the results for this file
|
|
2539
2539
|
if (%printFmt) {
|
|
2540
2540
|
# output using print format file (-p) option
|
|
2541
|
-
my ($type,
|
|
2541
|
+
my ($type, @doc, $grp, $lastDoc, $cache);
|
|
2542
2542
|
$fileTrailer = '';
|
|
2543
2543
|
# repeat for each embedded document if necessary (only if -ee used)
|
|
2544
2544
|
if ($et->Options('ExtractEmbedded')) {
|
|
@@ -2547,7 +2547,8 @@ T2: foreach $t2 (@tags2) {
|
|
|
2547
2547
|
} else {
|
|
2548
2548
|
$lastDoc = 0;
|
|
2549
2549
|
}
|
|
2550
|
-
for ($doc=0; $doc<=$lastDoc;
|
|
2550
|
+
for ($doc[0]=0; $doc[0]<=$lastDoc; ) {
|
|
2551
|
+
my $doc = join '-', @doc;
|
|
2551
2552
|
my ($skipBody, $opt);
|
|
2552
2553
|
foreach $type (qw(HEAD SECT IF BODY ENDS TAIL)) {
|
|
2553
2554
|
my $prf = $printFmt{$type} or next;
|
|
@@ -2557,7 +2558,7 @@ T2: foreach $t2 (@tags2) {
|
|
|
2557
2558
|
}
|
|
2558
2559
|
next if $type eq 'BODY' and $skipBody;
|
|
2559
2560
|
# silence "IF" warnings and warnings for subdocuments > 1
|
|
2560
|
-
if ($type eq 'IF' or ($doc > 1 and not $$et{OPTIONS}{IgnoreMinorErrors})) {
|
|
2561
|
+
if ($type eq 'IF' or (($doc[0] > 1 or @doc > 1) and not $$et{OPTIONS}{IgnoreMinorErrors})) {
|
|
2561
2562
|
$opt = 'Silent';
|
|
2562
2563
|
} else {
|
|
2563
2564
|
$opt = 'Warn';
|
|
@@ -2596,6 +2597,14 @@ T2: foreach $t2 (@tags2) {
|
|
|
2596
2597
|
print $fp @lines;
|
|
2597
2598
|
}
|
|
2598
2599
|
}
|
|
2600
|
+
# find next available doc-subdoc
|
|
2601
|
+
push @doc, 1;
|
|
2602
|
+
while (@doc > 1) {
|
|
2603
|
+
my $nextDoc = join '-', @doc;
|
|
2604
|
+
last if $$et{HAS_DOC}{$nextDoc};
|
|
2605
|
+
pop @doc;
|
|
2606
|
+
++$doc[-1];
|
|
2607
|
+
}
|
|
2599
2608
|
}
|
|
2600
2609
|
delete $printFmt{HEAD} unless defined $outfile; # print header only once per output file
|
|
2601
2610
|
my $errs = $et->GetInfo('Warning', 'Error');
|
|
@@ -4527,6 +4536,10 @@ sub SuggestedExtension($$$)
|
|
|
4527
4536
|
} elsif ($$valPt =~ /^.{4}ftyp(3gp|mp4|f4v|qt )/s) {
|
|
4528
4537
|
my %movType = ( 'qt ' => 'mov' );
|
|
4529
4538
|
$ext = $movType{$1} || $1;
|
|
4539
|
+
} elsif ($$valPt =~ /^<(!DOCTYPE )?html/i) {
|
|
4540
|
+
$ext = 'html';
|
|
4541
|
+
} elsif ($$valPt =~ /^[\n\r]*\{[\n\r]*\\rtf/) {
|
|
4542
|
+
$ext = 'rtf';
|
|
4530
4543
|
} elsif ($$valPt !~ /^.{0,4096}\0/s) {
|
|
4531
4544
|
$ext = 'txt';
|
|
4532
4545
|
} elsif ($$valPt =~ /^BM.{15}\0/s) {
|
|
@@ -2338,7 +2338,8 @@ sub WriteTagNames($$)
|
|
|
2338
2338
|
my ($hid, $showGrp);
|
|
2339
2339
|
# widths of the different columns in the POD documentation
|
|
2340
2340
|
my ($wID,$wTag,$wReq,$wGrp) = (8,36,24,10);
|
|
2341
|
-
my ($composite, $derived, $notes, $longTags, $
|
|
2341
|
+
my ($composite, $derived, $notes, $longTags, $prefix);
|
|
2342
|
+
my $wasLong = 0;
|
|
2342
2343
|
if ($short eq 'Shortcuts') {
|
|
2343
2344
|
$derived = '<th>Refers To</th>';
|
|
2344
2345
|
$composite = 2;
|
|
@@ -2396,7 +2397,7 @@ sub WriteTagNames($$)
|
|
|
2396
2397
|
$wID -= $longTag - $wTag;
|
|
2397
2398
|
$wTag = $longTag;
|
|
2398
2399
|
}
|
|
2399
|
-
|
|
2400
|
+
++$wasLong if $wID <= $self->{LONG_ID}->{$tableName};
|
|
2400
2401
|
}
|
|
2401
2402
|
} elsif ($composite) {
|
|
2402
2403
|
$wTag += $wID - $wReq;
|
|
@@ -2471,6 +2472,7 @@ sub WriteTagNames($$)
|
|
|
2471
2472
|
if ($over <= $wTag - length($$tagNames[0])) {
|
|
2472
2473
|
$wTag2 -= $over;
|
|
2473
2474
|
$w += $over;
|
|
2475
|
+
--$wasLong;
|
|
2474
2476
|
} else {
|
|
2475
2477
|
# put tag name on next line if ID is too long
|
|
2476
2478
|
$idStr = " $tagIDstr\n " . (' ' x $w);
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.95';
|
|
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)
|
|
@@ -2151,6 +2151,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
2151
2151
|
TagTable => 'Image::ExifTool::Canon::RawBurstInfo',
|
|
2152
2152
|
}
|
|
2153
2153
|
},
|
|
2154
|
+
# 0x4049 - related to croping (forum13491) - "8 0 0 0" = no crop, "8 1 0 1" = crop enabled
|
|
2154
2155
|
0x4059 => { #forum16111
|
|
2155
2156
|
Name => 'LevelInfo',
|
|
2156
2157
|
SubDirectory => {
|
|
@@ -2621,6 +2622,10 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
2621
2622
|
# 47 - related to aspect ratio: 100=4:3,70=1:1/16:9,90=3:2,60=4:5 (PH G12)
|
|
2622
2623
|
# (roughly image area in percent - 4:3=100%,1:1/16:9=75%,3:2=89%,4:5=60%)
|
|
2623
2624
|
# 48 - 3 for CR2/CR3, 4 or 7 for JPG, -1 for edited JPG (see forum16127)
|
|
2625
|
+
50 => { #github340
|
|
2626
|
+
Name => 'FocusBracketing',
|
|
2627
|
+
PrintConv => { 0 => 'Disable', 1 => 'Enable' },
|
|
2628
|
+
},
|
|
2624
2629
|
51 => { #forum16036 (EOS R models)
|
|
2625
2630
|
Name => 'Clarity',
|
|
2626
2631
|
PrintConv => {
|
|
@@ -8935,7 +8940,7 @@ my %ciMaxFocal = (
|
|
|
8935
8940
|
},
|
|
8936
8941
|
3 => {
|
|
8937
8942
|
Name => 'HighlightTonePriority',
|
|
8938
|
-
PrintConv =>
|
|
8943
|
+
PrintConv => { %offOn, 2 => 'Enhanced' }, #github339 (Enhanced)
|
|
8939
8944
|
},
|
|
8940
8945
|
4 => {
|
|
8941
8946
|
Name => 'LongExposureNoiseReduction',
|
|
@@ -9327,6 +9332,14 @@ my %filterConv = (
|
|
|
9327
9332
|
3 => 'Vehicles',
|
|
9328
9333
|
},
|
|
9329
9334
|
},
|
|
9335
|
+
21 => { #github344 (R6)
|
|
9336
|
+
Name => 'SubjectSwitching',
|
|
9337
|
+
PrintConv => {
|
|
9338
|
+
0 => 'Initial Priority',
|
|
9339
|
+
1 => 'On Subject',
|
|
9340
|
+
2 => 'Switch Subject',
|
|
9341
|
+
},
|
|
9342
|
+
},
|
|
9330
9343
|
24 => { #forum16068
|
|
9331
9344
|
Name => 'EyeDetection',
|
|
9332
9345
|
PrintConv => \%offOn,
|
|
@@ -57,7 +57,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
|
|
|
57
57
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
58
58
|
use Image::ExifTool::MakerNotes;
|
|
59
59
|
|
|
60
|
-
$VERSION = '4.
|
|
60
|
+
$VERSION = '4.60';
|
|
61
61
|
|
|
62
62
|
sub ProcessExif($$$);
|
|
63
63
|
sub WriteExif($$$);
|
|
@@ -402,7 +402,7 @@ my %opcodeInfo = (
|
|
|
402
402
|
THM => 'THM - DCF thumbnail file',
|
|
403
403
|
},
|
|
404
404
|
},
|
|
405
|
-
0x2 => { #5
|
|
405
|
+
0x2 => { #5 (not in the EXIF spec)
|
|
406
406
|
Name => 'InteropVersion',
|
|
407
407
|
Description => 'Interoperability Version',
|
|
408
408
|
Protected => 1,
|
|
@@ -6362,9 +6362,10 @@ sub ProcessExif($$$)
|
|
|
6362
6362
|
$et->Warn("Bad format ($format) for $dir entry $index", $inMakerNotes);
|
|
6363
6363
|
++$warnCount;
|
|
6364
6364
|
}
|
|
6365
|
-
# assume corrupted IFD if this is our first entry (except Sony ILCE
|
|
6366
|
-
|
|
6367
|
-
|
|
6365
|
+
# assume corrupted IFD if this is our first entry (except Sony ILCE which have an empty first entry)
|
|
6366
|
+
next if $index or $$et{Model} =~ /^ILCE/;
|
|
6367
|
+
# $et->Warn(sprintf('Format code 0x%x encountered -- Possibly corrupted IFD'));
|
|
6368
|
+
return 0;
|
|
6368
6369
|
}
|
|
6369
6370
|
}
|
|
6370
6371
|
my $formatStr = $formatName[$format]; # get name of this format
|
|
@@ -21,8 +21,9 @@ use vars qw($VERSION);
|
|
|
21
21
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
22
22
|
use Image::ExifTool::Exif;
|
|
23
23
|
use Image::ExifTool::ASF; # for GetGUID()
|
|
24
|
+
use Image::ExifTool::Microsoft; # for %codePage
|
|
24
25
|
|
|
25
|
-
$VERSION = '1.
|
|
26
|
+
$VERSION = '1.50';
|
|
26
27
|
|
|
27
28
|
sub ProcessFPX($$);
|
|
28
29
|
sub ProcessFPXR($$$);
|
|
@@ -123,163 +124,6 @@ my %oleFormatSize = (
|
|
|
123
124
|
# names for each type of directory entry
|
|
124
125
|
my @dirEntryType = qw(INVALID STORAGE STREAM LOCKBYTES PROPERTY ROOT);
|
|
125
126
|
|
|
126
|
-
# list of code pages used by Microsoft
|
|
127
|
-
# (ref http://msdn.microsoft.com/en-us/library/dd317756(VS.85).aspx)
|
|
128
|
-
my %codePage = (
|
|
129
|
-
37 => 'IBM EBCDIC US-Canada',
|
|
130
|
-
437 => 'DOS United States',
|
|
131
|
-
500 => 'IBM EBCDIC International',
|
|
132
|
-
708 => 'Arabic (ASMO 708)',
|
|
133
|
-
709 => 'Arabic (ASMO-449+, BCON V4)',
|
|
134
|
-
710 => 'Arabic - Transparent Arabic',
|
|
135
|
-
720 => 'DOS Arabic (Transparent ASMO)',
|
|
136
|
-
737 => 'DOS Greek (formerly 437G)',
|
|
137
|
-
775 => 'DOS Baltic',
|
|
138
|
-
850 => 'DOS Latin 1 (Western European)',
|
|
139
|
-
852 => 'DOS Latin 2 (Central European)',
|
|
140
|
-
855 => 'DOS Cyrillic (primarily Russian)',
|
|
141
|
-
857 => 'DOS Turkish',
|
|
142
|
-
858 => 'DOS Multilingual Latin 1 with Euro',
|
|
143
|
-
860 => 'DOS Portuguese',
|
|
144
|
-
861 => 'DOS Icelandic',
|
|
145
|
-
862 => 'DOS Hebrew',
|
|
146
|
-
863 => 'DOS French Canadian',
|
|
147
|
-
864 => 'DOS Arabic',
|
|
148
|
-
865 => 'DOS Nordic',
|
|
149
|
-
866 => 'DOS Russian (Cyrillic)',
|
|
150
|
-
869 => 'DOS Modern Greek',
|
|
151
|
-
870 => 'IBM EBCDIC Multilingual/ROECE (Latin 2)',
|
|
152
|
-
874 => 'Windows Thai (same as 28605, ISO 8859-15)',
|
|
153
|
-
875 => 'IBM EBCDIC Greek Modern',
|
|
154
|
-
932 => 'Windows Japanese (Shift-JIS)',
|
|
155
|
-
936 => 'Windows Simplified Chinese (PRC, Singapore)',
|
|
156
|
-
949 => 'Windows Korean (Unified Hangul Code)',
|
|
157
|
-
950 => 'Windows Traditional Chinese (Taiwan)',
|
|
158
|
-
1026 => 'IBM EBCDIC Turkish (Latin 5)',
|
|
159
|
-
1047 => 'IBM EBCDIC Latin 1/Open System',
|
|
160
|
-
1140 => 'IBM EBCDIC US-Canada with Euro',
|
|
161
|
-
1141 => 'IBM EBCDIC Germany with Euro',
|
|
162
|
-
1142 => 'IBM EBCDIC Denmark-Norway with Euro',
|
|
163
|
-
1143 => 'IBM EBCDIC Finland-Sweden with Euro',
|
|
164
|
-
1144 => 'IBM EBCDIC Italy with Euro',
|
|
165
|
-
1145 => 'IBM EBCDIC Latin America-Spain with Euro',
|
|
166
|
-
1146 => 'IBM EBCDIC United Kingdom with Euro',
|
|
167
|
-
1147 => 'IBM EBCDIC France with Euro',
|
|
168
|
-
1148 => 'IBM EBCDIC International with Euro',
|
|
169
|
-
1149 => 'IBM EBCDIC Icelandic with Euro',
|
|
170
|
-
1200 => 'Unicode UTF-16, little endian',
|
|
171
|
-
1201 => 'Unicode UTF-16, big endian',
|
|
172
|
-
1250 => 'Windows Latin 2 (Central European)',
|
|
173
|
-
1251 => 'Windows Cyrillic',
|
|
174
|
-
1252 => 'Windows Latin 1 (Western European)',
|
|
175
|
-
1253 => 'Windows Greek',
|
|
176
|
-
1254 => 'Windows Turkish',
|
|
177
|
-
1255 => 'Windows Hebrew',
|
|
178
|
-
1256 => 'Windows Arabic',
|
|
179
|
-
1257 => 'Windows Baltic',
|
|
180
|
-
1258 => 'Windows Vietnamese',
|
|
181
|
-
1361 => 'Korean (Johab)',
|
|
182
|
-
10000 => 'Mac Roman (Western European)',
|
|
183
|
-
10001 => 'Mac Japanese',
|
|
184
|
-
10002 => 'Mac Traditional Chinese',
|
|
185
|
-
10003 => 'Mac Korean',
|
|
186
|
-
10004 => 'Mac Arabic',
|
|
187
|
-
10005 => 'Mac Hebrew',
|
|
188
|
-
10006 => 'Mac Greek',
|
|
189
|
-
10007 => 'Mac Cyrillic',
|
|
190
|
-
10008 => 'Mac Simplified Chinese',
|
|
191
|
-
10010 => 'Mac Romanian',
|
|
192
|
-
10017 => 'Mac Ukrainian',
|
|
193
|
-
10021 => 'Mac Thai',
|
|
194
|
-
10029 => 'Mac Latin 2 (Central European)',
|
|
195
|
-
10079 => 'Mac Icelandic',
|
|
196
|
-
10081 => 'Mac Turkish',
|
|
197
|
-
10082 => 'Mac Croatian',
|
|
198
|
-
12000 => 'Unicode UTF-32, little endian',
|
|
199
|
-
12001 => 'Unicode UTF-32, big endian',
|
|
200
|
-
20000 => 'CNS Taiwan',
|
|
201
|
-
20001 => 'TCA Taiwan',
|
|
202
|
-
20002 => 'Eten Taiwan',
|
|
203
|
-
20003 => 'IBM5550 Taiwan',
|
|
204
|
-
20004 => 'TeleText Taiwan',
|
|
205
|
-
20005 => 'Wang Taiwan',
|
|
206
|
-
20105 => 'IA5 (IRV International Alphabet No. 5, 7-bit)',
|
|
207
|
-
20106 => 'IA5 German (7-bit)',
|
|
208
|
-
20107 => 'IA5 Swedish (7-bit)',
|
|
209
|
-
20108 => 'IA5 Norwegian (7-bit)',
|
|
210
|
-
20127 => 'US-ASCII (7-bit)',
|
|
211
|
-
20261 => 'T.61',
|
|
212
|
-
20269 => 'ISO 6937 Non-Spacing Accent',
|
|
213
|
-
20273 => 'IBM EBCDIC Germany',
|
|
214
|
-
20277 => 'IBM EBCDIC Denmark-Norway',
|
|
215
|
-
20278 => 'IBM EBCDIC Finland-Sweden',
|
|
216
|
-
20280 => 'IBM EBCDIC Italy',
|
|
217
|
-
20284 => 'IBM EBCDIC Latin America-Spain',
|
|
218
|
-
20285 => 'IBM EBCDIC United Kingdom',
|
|
219
|
-
20290 => 'IBM EBCDIC Japanese Katakana Extended',
|
|
220
|
-
20297 => 'IBM EBCDIC France',
|
|
221
|
-
20420 => 'IBM EBCDIC Arabic',
|
|
222
|
-
20423 => 'IBM EBCDIC Greek',
|
|
223
|
-
20424 => 'IBM EBCDIC Hebrew',
|
|
224
|
-
20833 => 'IBM EBCDIC Korean Extended',
|
|
225
|
-
20838 => 'IBM EBCDIC Thai',
|
|
226
|
-
20866 => 'Russian/Cyrillic (KOI8-R)',
|
|
227
|
-
20871 => 'IBM EBCDIC Icelandic',
|
|
228
|
-
20880 => 'IBM EBCDIC Cyrillic Russian',
|
|
229
|
-
20905 => 'IBM EBCDIC Turkish',
|
|
230
|
-
20924 => 'IBM EBCDIC Latin 1/Open System with Euro',
|
|
231
|
-
20932 => 'Japanese (JIS 0208-1990 and 0121-1990)',
|
|
232
|
-
20936 => 'Simplified Chinese (GB2312)',
|
|
233
|
-
20949 => 'Korean Wansung',
|
|
234
|
-
21025 => 'IBM EBCDIC Cyrillic Serbian-Bulgarian',
|
|
235
|
-
21027 => 'Extended Alpha Lowercase (deprecated)',
|
|
236
|
-
21866 => 'Ukrainian/Cyrillic (KOI8-U)',
|
|
237
|
-
28591 => 'ISO 8859-1 Latin 1 (Western European)',
|
|
238
|
-
28592 => 'ISO 8859-2 (Central European)',
|
|
239
|
-
28593 => 'ISO 8859-3 Latin 3',
|
|
240
|
-
28594 => 'ISO 8859-4 Baltic',
|
|
241
|
-
28595 => 'ISO 8859-5 Cyrillic',
|
|
242
|
-
28596 => 'ISO 8859-6 Arabic',
|
|
243
|
-
28597 => 'ISO 8859-7 Greek',
|
|
244
|
-
28598 => 'ISO 8859-8 Hebrew (Visual)',
|
|
245
|
-
28599 => 'ISO 8859-9 Turkish',
|
|
246
|
-
28603 => 'ISO 8859-13 Estonian',
|
|
247
|
-
28605 => 'ISO 8859-15 Latin 9',
|
|
248
|
-
29001 => 'Europa 3',
|
|
249
|
-
38598 => 'ISO 8859-8 Hebrew (Logical)',
|
|
250
|
-
50220 => 'ISO 2022 Japanese with no halfwidth Katakana (JIS)',
|
|
251
|
-
50221 => 'ISO 2022 Japanese with halfwidth Katakana (JIS-Allow 1 byte Kana)',
|
|
252
|
-
50222 => 'ISO 2022 Japanese JIS X 0201-1989 (JIS-Allow 1 byte Kana - SO/SI)',
|
|
253
|
-
50225 => 'ISO 2022 Korean',
|
|
254
|
-
50227 => 'ISO 2022 Simplified Chinese',
|
|
255
|
-
50229 => 'ISO 2022 Traditional Chinese',
|
|
256
|
-
50930 => 'EBCDIC Japanese (Katakana) Extended',
|
|
257
|
-
50931 => 'EBCDIC US-Canada and Japanese',
|
|
258
|
-
50933 => 'EBCDIC Korean Extended and Korean',
|
|
259
|
-
50935 => 'EBCDIC Simplified Chinese Extended and Simplified Chinese',
|
|
260
|
-
50936 => 'EBCDIC Simplified Chinese',
|
|
261
|
-
50937 => 'EBCDIC US-Canada and Traditional Chinese',
|
|
262
|
-
50939 => 'EBCDIC Japanese (Latin) Extended and Japanese',
|
|
263
|
-
51932 => 'EUC Japanese',
|
|
264
|
-
51936 => 'EUC Simplified Chinese',
|
|
265
|
-
51949 => 'EUC Korean',
|
|
266
|
-
51950 => 'EUC Traditional Chinese',
|
|
267
|
-
52936 => 'HZ-GB2312 Simplified Chinese',
|
|
268
|
-
54936 => 'Windows XP and later: GB18030 Simplified Chinese (4 byte)',
|
|
269
|
-
57002 => 'ISCII Devanagari',
|
|
270
|
-
57003 => 'ISCII Bengali',
|
|
271
|
-
57004 => 'ISCII Tamil',
|
|
272
|
-
57005 => 'ISCII Telugu',
|
|
273
|
-
57006 => 'ISCII Assamese',
|
|
274
|
-
57007 => 'ISCII Oriya',
|
|
275
|
-
57008 => 'ISCII Kannada',
|
|
276
|
-
57009 => 'ISCII Malayalam',
|
|
277
|
-
57010 => 'ISCII Gujarati',
|
|
278
|
-
57011 => 'ISCII Punjabi',
|
|
279
|
-
65000 => 'Unicode (UTF-7)',
|
|
280
|
-
65001 => 'Unicode (UTF-8)',
|
|
281
|
-
);
|
|
282
|
-
|
|
283
127
|
# test for file extensions which may be variants of the FPX format
|
|
284
128
|
# (have seen one password-protected DOCX file that is FPX-like, so assume
|
|
285
129
|
# that all the rest could be as well)
|
|
@@ -550,7 +394,8 @@ my %fpxFileType = (
|
|
|
550
394
|
0x01 => {
|
|
551
395
|
Name => 'CodePage',
|
|
552
396
|
Groups => { 2 => 'Other' },
|
|
553
|
-
|
|
397
|
+
SeparateTable => 'Microsoft CodePage',
|
|
398
|
+
PrintConv => \%Image::ExifTool::Microsoft::codePage,
|
|
554
399
|
},
|
|
555
400
|
0x02 => 'Title',
|
|
556
401
|
0x03 => 'Subject',
|
|
@@ -31,7 +31,7 @@ use vars qw($VERSION);
|
|
|
31
31
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
32
32
|
use Image::ExifTool::Exif;
|
|
33
33
|
|
|
34
|
-
$VERSION = '1.
|
|
34
|
+
$VERSION = '1.98';
|
|
35
35
|
|
|
36
36
|
sub ProcessFujiDir($$$);
|
|
37
37
|
sub ProcessFaceRec($$$);
|
|
@@ -832,6 +832,13 @@ my %faceCategories = (
|
|
|
832
832
|
},
|
|
833
833
|
0x1447 => { Name => 'FujiModel', Writable => 'string' },
|
|
834
834
|
0x1448 => { Name => 'FujiModel2', Writable => 'string' },
|
|
835
|
+
|
|
836
|
+
# Found in X-M5, X-E5
|
|
837
|
+
# White balance as shot. Same valus as 0xf00e.
|
|
838
|
+
0x144a => { Name => 'WBRed', Writable => 'int16u' },
|
|
839
|
+
0x144b => { Name => 'WBGreen', Writable => 'int16u' },
|
|
840
|
+
0x144c => { Name => 'WBBlue', Writable => 'int16u' },
|
|
841
|
+
|
|
835
842
|
0x144d => { Name => 'RollAngle', Writable => 'rational64s' }, #forum14319
|
|
836
843
|
0x3803 => { #forum10037
|
|
837
844
|
Name => 'VideoRecordingMode',
|
|
@@ -1564,7 +1571,7 @@ my %faceCategories = (
|
|
|
1564
1571
|
6 => { Name => 'FNumber', Format => 'rational64u', PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)' },
|
|
1565
1572
|
# 7 - seen 200, 125, 250, 2000
|
|
1566
1573
|
7 => 'ISO',
|
|
1567
|
-
# 8 - seen 0
|
|
1574
|
+
# 8 - seen 0, 65536
|
|
1568
1575
|
);
|
|
1569
1576
|
|
|
1570
1577
|
#------------------------------------------------------------------------------
|
|
@@ -1673,7 +1680,7 @@ sub ProcessFujiDir($$$)
|
|
|
1673
1680
|
#------------------------------------------------------------------------------
|
|
1674
1681
|
# get information from FujiFilm M-RAW header
|
|
1675
1682
|
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
|
1676
|
-
# Returns: 1 if this was a valid M-RAW
|
|
1683
|
+
# Returns: 1 if this was a valid M-RAW header
|
|
1677
1684
|
sub ProcessMRAW($$$)
|
|
1678
1685
|
{
|
|
1679
1686
|
my ($et, $dirInfo, $tagTablePtr) = @_;
|
|
@@ -1809,6 +1816,7 @@ sub WriteRAF($$)
|
|
|
1809
1816
|
# make sure padding is only zero bytes (can be >100k for HS10)
|
|
1810
1817
|
# (have seen non-null padding in X-Pro1)
|
|
1811
1818
|
if ($buff =~ /[^\0]/) {
|
|
1819
|
+
HexDump(\$buff);
|
|
1812
1820
|
return 1 if $et->Error('Non-null bytes found in padding', 2);
|
|
1813
1821
|
}
|
|
1814
1822
|
}
|
|
@@ -18,6 +18,8 @@
|
|
|
18
18
|
# 2024/04/23 - PH Added ability to read more OpenTracks GPS tags
|
|
19
19
|
# 2024/08/28 - PH Added support for new Google Takeout JSON format
|
|
20
20
|
# 2024/11/26 - PH Also write GPSMeasureMode and GPSDOP
|
|
21
|
+
# 2024/11/05 - PH Added support for Google Maps "Export timeline data"
|
|
22
|
+
# JSON format
|
|
21
23
|
#
|
|
22
24
|
# References: 1) http://www.topografix.com/GPX/1/1/
|
|
23
25
|
# 2) http://www.gpsinformation.org/dale/nmea.htm#GSA
|
|
@@ -1545,9 +1547,9 @@ This module is used by Image::ExifTool
|
|
|
1545
1547
|
|
|
1546
1548
|
This module loads GPS track logs, interpolates to determine position based
|
|
1547
1549
|
on time, and sets new GPS values for geotagging images. Currently supported
|
|
1548
|
-
formats are GPX, NMEA RMC/GGA/GLL, KML, IGC, Garmin XML and TCX,
|
|
1549
|
-
PMGNTRK, Honeywell PTNTHPR, Bramor gEO, Winplus Beacon text,
|
|
1550
|
-
|
|
1550
|
+
formats are GPX, NMEA RMC/GGA/GLL/GSA/ZDA, KML, IGC, Garmin XML and TCX,
|
|
1551
|
+
Magellan PMGNTRK, Honeywell PTNTHPR, Bramor gEO, Winplus Beacon text,
|
|
1552
|
+
GPS/IMU CSV, DJI CSV, ExifTool CSV and 3 different Google JSON formats.
|
|
1551
1553
|
|
|
1552
1554
|
Methods in this module should not be called directly. Instead, the Geotag
|
|
1553
1555
|
feature is accessed by writing the values of the ExifTool Geotag, Geosync
|
|
@@ -17,7 +17,7 @@ use vars qw($VERSION);
|
|
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
18
18
|
use Image::ExifTool::QuickTime;
|
|
19
19
|
|
|
20
|
-
$VERSION = '1.
|
|
20
|
+
$VERSION = '1.14';
|
|
21
21
|
|
|
22
22
|
sub ProcessGoPro($$$);
|
|
23
23
|
sub ProcessString($$$);
|
|
@@ -750,14 +750,26 @@ sub ProcessString($$$)
|
|
|
750
750
|
my @list = ref $$dataPt eq 'ARRAY' ? @{$$dataPt} : ( $$dataPt );
|
|
751
751
|
my ($string, $val);
|
|
752
752
|
$et->VerboseDir('GoPro structure');
|
|
753
|
+
my $docNum = $$et{DOC_NUM};
|
|
754
|
+
my $subDoc = 0;
|
|
753
755
|
foreach $string (@list) {
|
|
754
756
|
my @val = split ' ', $string;
|
|
755
757
|
my $i = 0;
|
|
756
758
|
foreach $val (@val) {
|
|
757
759
|
$et->HandleTag($tagTablePtr, $i, $val);
|
|
758
|
-
$$tagTablePtr{++$i}
|
|
760
|
+
next if $$tagTablePtr{++$i};
|
|
761
|
+
# increment subdoc for records stored as string of values (eg. GPS5)
|
|
762
|
+
$i = 0;
|
|
763
|
+
++$subDoc;
|
|
764
|
+
$$et{DOC_NUM} = "$docNum-$subDoc";
|
|
765
|
+
}
|
|
766
|
+
if ($i) {
|
|
767
|
+
# increment subdoc for records stored as array of strings (eg. GPS9)
|
|
768
|
+
++$subDoc;
|
|
769
|
+
$$et{DOC_NUM} = "$docNum-$subDoc";
|
|
759
770
|
}
|
|
760
771
|
}
|
|
772
|
+
$$et{DOC_NUM} = $docNum;
|
|
761
773
|
return 1;
|
|
762
774
|
}
|
|
763
775
|
|
|
@@ -15,8 +15,9 @@ package Image::ExifTool::LNK;
|
|
|
15
15
|
use strict;
|
|
16
16
|
use vars qw($VERSION);
|
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
18
|
+
use Image::ExifTool::Microsoft;
|
|
18
19
|
|
|
19
|
-
$VERSION = '1.
|
|
20
|
+
$VERSION = '1.11';
|
|
20
21
|
|
|
21
22
|
sub ProcessItemID($$$);
|
|
22
23
|
sub ProcessLinkInfo($$$);
|
|
@@ -441,6 +442,8 @@ sub ProcessLinkInfo($$$);
|
|
|
441
442
|
0x08 => {
|
|
442
443
|
Name => 'CodePage',
|
|
443
444
|
Format => 'int32u',
|
|
445
|
+
SeparateTable => 'Microsoft CodePage',
|
|
446
|
+
PrintConv => \%Image::ExifTool::Microsoft::codePage,
|
|
444
447
|
},
|
|
445
448
|
);
|
|
446
449
|
|
|
@@ -1198,7 +1198,6 @@ $VERSION = '1.07';
|
|
|
1198
1198
|
'Rotation' => {
|
|
1199
1199
|
PrintConv => {
|
|
1200
1200
|
'Horizontal' => '0° (nahoru/vlevo)',
|
|
1201
|
-
'Horizontal (Normal)' => '0° (nahoru/vlevo)',
|
|
1202
1201
|
'Horizontal (normal)' => '0° (nahoru/vlevo)',
|
|
1203
1202
|
'Rotate 180' => '180° (dolů/vpravo)',
|
|
1204
1203
|
'Rotate 270 CW' => '90° po směru HR (vlevo/dolů)',
|
|
@@ -6912,7 +6912,6 @@ $VERSION = '1.38';
|
|
|
6912
6912
|
'Rotation' => {
|
|
6913
6913
|
Description => 'Ausrichtung',
|
|
6914
6914
|
PrintConv => {
|
|
6915
|
-
'Horizontal (Normal)' => 'Horizontal (normal)',
|
|
6916
6915
|
'Rotate 180' => '180° gedreht',
|
|
6917
6916
|
'Rotate 270 CW' => '90° gegen den Uhrzeigersinn',
|
|
6918
6917
|
'Rotate 90 CW' => '90° im Uhrzeigersinn',
|
|
@@ -8874,7 +8874,6 @@ $VERSION = '1.37';
|
|
|
8874
8874
|
'270' => '270°',
|
|
8875
8875
|
'90' => '90°',
|
|
8876
8876
|
'Horizontal' => 'Horizontale',
|
|
8877
|
-
'Horizontal (Normal)' => 'Horizontale (normale)',
|
|
8878
8877
|
'Horizontal (normal)' => 'Horizontale (normale)',
|
|
8879
8878
|
'Rotate 180' => 'Rotation de 180°',
|
|
8880
8879
|
'Rotate 270 CW' => 'Rotation antihoraire de 270°',
|
|
@@ -6424,7 +6424,6 @@ $VERSION = '1.14';
|
|
|
6424
6424
|
Description => 'Rotazione',
|
|
6425
6425
|
PrintConv => {
|
|
6426
6426
|
'Horizontal' => 'Orizzontale',
|
|
6427
|
-
'Horizontal (Normal)' => 'Orizzontale (normale)',
|
|
6428
6427
|
'Horizontal (normal)' => 'Orizzontale (normale)',
|
|
6429
6428
|
'Rotate 180' => 'Ruota di 180°',
|
|
6430
6429
|
'Rotate 270 CW' => 'Ruota di 270° in senso orario',
|
|
@@ -2567,7 +2567,6 @@ $VERSION = '1.13';
|
|
|
2567
2567
|
'Rotation' => {
|
|
2568
2568
|
PrintConv => {
|
|
2569
2569
|
'Horizontal' => '0° (boven/links)',
|
|
2570
|
-
'Horizontal (Normal)' => '0° (boven/links)',
|
|
2571
2570
|
'Horizontal (normal)' => '0° (boven/links)',
|
|
2572
2571
|
'Rotate 180' => '180° (onder/rechts)',
|
|
2573
2572
|
'Rotate 270 CW' => 'Draai 270° met de klok mee',
|
|
@@ -955,7 +955,6 @@ $VERSION = '1.12';
|
|
|
955
955
|
Description => 'Obrót',
|
|
956
956
|
PrintConv => {
|
|
957
957
|
'Horizontal' => '0° (góra/lewo)',
|
|
958
|
-
'Horizontal (Normal)' => '0° (góra/lewo)',
|
|
959
958
|
'Horizontal (normal)' => '0° (góra/lewo)',
|
|
960
959
|
'Rotate 180' => '180° (dół/prawo)',
|
|
961
960
|
'Rotate 270 CW' => '90° CW (lewo/dół)',
|