exiftool_vendored 10.58.0 → 10.65.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of exiftool_vendored might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/bin/Changes +100 -1
- data/bin/MANIFEST +2 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +39 -38
- data/bin/arg_files/exif2iptc.args +3 -0
- data/bin/arg_files/iptc2exif.args +3 -0
- data/bin/config_files/example.config +16 -14
- data/bin/config_files/photoshop_paths.config +10 -0
- data/bin/exiftool +71 -65
- data/bin/lib/Image/ExifTool/APE.pm +5 -0
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +31 -15
- data/bin/lib/Image/ExifTool/Canon.pm +18 -4
- data/bin/lib/Image/ExifTool/CanonCustom.pm +3 -0
- data/bin/lib/Image/ExifTool/Charset/DOSLatin1.pm +49 -0
- data/bin/lib/Image/ExifTool/Charset/DOSLatinUS.pm +49 -0
- data/bin/lib/Image/ExifTool/Charset.pm +8 -5
- data/bin/lib/Image/ExifTool/Exif.pm +37 -18
- data/bin/lib/Image/ExifTool/FLAC.pm +47 -37
- data/bin/lib/Image/ExifTool/FLIR.pm +3 -3
- data/bin/lib/Image/ExifTool/FujiFilm.pm +5 -2
- data/bin/lib/Image/ExifTool/GPS.pm +6 -6
- data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
- data/bin/lib/Image/ExifTool/H264.pm +2 -0
- data/bin/lib/Image/ExifTool/ID3.pm +8 -3
- data/bin/lib/Image/ExifTool/IPTC.pm +1 -1
- data/bin/lib/Image/ExifTool/Import.pm +4 -1
- data/bin/lib/Image/ExifTool/InDesign.pm +11 -7
- data/bin/lib/Image/ExifTool/Kodak.pm +4 -1
- data/bin/lib/Image/ExifTool/Lang/de.pm +31 -31
- data/bin/lib/Image/ExifTool/MWG.pm +12 -4
- data/bin/lib/Image/ExifTool/MakerNotes.pm +3 -3
- data/bin/lib/Image/ExifTool/Matroska.pm +2 -1
- data/bin/lib/Image/ExifTool/Microsoft.pm +3 -3
- data/bin/lib/Image/ExifTool/Minolta.pm +71 -61
- data/bin/lib/Image/ExifTool/Nikon.pm +286 -43
- data/bin/lib/Image/ExifTool/NikonCustom.pm +1049 -0
- data/bin/lib/Image/ExifTool/Olympus.pm +4 -1
- data/bin/lib/Image/ExifTool/PNG.pm +4 -7
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +24 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +20 -6
- data/bin/lib/Image/ExifTool/Photoshop.pm +24 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +545 -14
- data/bin/lib/Image/ExifTool/README +16 -9
- data/bin/lib/Image/ExifTool/RIFF.pm +8 -1
- data/bin/lib/Image/ExifTool/Samsung.pm +5 -4
- data/bin/lib/Image/ExifTool/Sigma.pm +9 -1
- data/bin/lib/Image/ExifTool/Sony.pm +327 -153
- data/bin/lib/Image/ExifTool/TagLookup.pm +3273 -3220
- data/bin/lib/Image/ExifTool/TagNames.pod +317 -38
- data/bin/lib/Image/ExifTool/Validate.pm +15 -1
- data/bin/lib/Image/ExifTool/WriteExif.pl +5 -0
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +23 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +8 -2
- data/bin/lib/Image/ExifTool/WriteXMP.pl +7 -0
- data/bin/lib/Image/ExifTool/Writer.pl +96 -18
- data/bin/lib/Image/ExifTool/XMP.pm +20 -11
- data/bin/lib/Image/ExifTool/XMP2.pl +634 -583
- data/bin/lib/Image/ExifTool.pm +124 -17
- data/bin/lib/Image/ExifTool.pod +86 -82
- data/bin/perl-Image-ExifTool.spec +38 -37
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +4 -2
@@ -34,7 +34,7 @@ use Image::ExifTool::Nikon;
|
|
34
34
|
use Image::ExifTool::Validate;
|
35
35
|
use Image::ExifTool::MacOS;
|
36
36
|
|
37
|
-
$VERSION = '3.
|
37
|
+
$VERSION = '3.12';
|
38
38
|
@ISA = qw(Exporter);
|
39
39
|
|
40
40
|
sub NumbersFirst($$);
|
@@ -240,6 +240,11 @@ The EXIF meta information is organized into different Image File Directories
|
|
240
240
|
ExifTool family 1 group names. When writing EXIF information, the default
|
241
241
|
B<Group> listed below is used unless another group is specified.
|
242
242
|
|
243
|
+
Mandatory tags (indicated by a colon after the B<Writable> type) may be
|
244
|
+
added automatically with default values when creating a new IFD, and the IFD
|
245
|
+
is removed automatically when deleting tags if only default-valued mandatory
|
246
|
+
tags remain.
|
247
|
+
|
243
248
|
The table below lists all EXIF tags. Also listed are TIFF, DNG, HDP and
|
244
249
|
other tags which are not part of the EXIF specification, but may co-exist
|
245
250
|
with EXIF tags in some images. Tags which are part of the EXIF 2.31
|
@@ -367,12 +372,12 @@ This specification dictates a length for ASCII (C<string> or C<digits>) and
|
|
367
372
|
binary (C<undef>) values. These lengths are given in square brackets after
|
368
373
|
the B<Writable> format name. For tags where a range of lengths is allowed,
|
369
374
|
the minimum and maximum lengths are separated by a comma within the
|
370
|
-
brackets.
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
375
|
+
brackets. When writing, ExifTool issues a minor warning and truncates the
|
376
|
+
value if it is longer than allowed by the IPTC specification. Minor errors
|
377
|
+
may be ignored with the IgnoreMinorErrors (-m) option, allowing longer
|
378
|
+
values to be written, but beware that values like this may cause problems
|
379
|
+
for some other IPTC readers. ExifTool will happily read IPTC values of any
|
380
|
+
length.
|
376
381
|
|
377
382
|
Separate IPTC date and time tags may be written with a combined date/time
|
378
383
|
value and ExifTool automagically takes the appropriate part of the date/time
|
@@ -521,10 +526,10 @@ RealMedia (RM, RV and RMVB), 2) RealAudio (RA), and 3) Real Metafile (RAM
|
|
521
526
|
and RPM).
|
522
527
|
},
|
523
528
|
Extra => q{
|
524
|
-
The extra tags
|
525
|
-
ExifTool that is not directly associated with another tag
|
526
|
-
B<Group> column lists the family 1 group name when reading.
|
527
|
-
in this column are write-only.
|
529
|
+
The extra tags provide extra features or extra information extracted or
|
530
|
+
generated by ExifTool that is not directly associated with another tag
|
531
|
+
group. The B<Group> column lists the family 1 group name when reading.
|
532
|
+
Tags with a "-" in this column are write-only.
|
528
533
|
|
529
534
|
Tags in the family 1 "System" group are referred to as "pseudo" tags because
|
530
535
|
they don't represent real metadata in the file. Instead, this information
|
@@ -936,12 +941,14 @@ TagID: foreach $tagID (@keys) {
|
|
936
941
|
# remove leading/trailing spaces on each line
|
937
942
|
$note =~ s/(^[ \t]+|[ \t]+$)//mg;
|
938
943
|
push @values, "($note)";
|
939
|
-
}
|
944
|
+
}
|
945
|
+
if ($isXMP and lc $tagID ne lc $name) {
|
940
946
|
# add note about different XMP Tag ID
|
941
|
-
|
942
|
-
|
947
|
+
my $note = $$tagInfo{RootTagInfo} ? $tagID : "called $tagID by the spec";
|
948
|
+
if ($$tagInfo{Notes}) {
|
949
|
+
$values[-1] =~ s/^\(/($note; /;
|
943
950
|
} else {
|
944
|
-
push @values,"(
|
951
|
+
push @values, "($note)";
|
945
952
|
}
|
946
953
|
}
|
947
954
|
my $writeGroup;
|
@@ -1380,6 +1387,15 @@ TagID: foreach $tagID (@keys) {
|
|
1380
1387
|
}
|
1381
1388
|
}
|
1382
1389
|
$writable .= '+' if $$tagInfo{List};
|
1390
|
+
push @vals, "($$tagInfo{Notes})" if $$tagInfo{Notes};
|
1391
|
+
# handle PrintConv lookups in Structure elements
|
1392
|
+
my $printConv = $$tagInfo{PrintConv};
|
1393
|
+
if (ref $printConv eq 'HASH') {
|
1394
|
+
foreach (sort keys %$printConv) {
|
1395
|
+
next if /^(OTHER|BITMASK)$/;
|
1396
|
+
push @vals, "$_ = $$printConv{$_}";
|
1397
|
+
}
|
1398
|
+
}
|
1383
1399
|
push @$info, [
|
1384
1400
|
$tag,
|
1385
1401
|
[ $$tagInfo{Name} || ucfirst($tag) ],
|
@@ -85,7 +85,7 @@ sub ProcessSerialData($$$);
|
|
85
85
|
sub ProcessFilters($$$);
|
86
86
|
sub SwapWords($);
|
87
87
|
|
88
|
-
$VERSION = '3.
|
88
|
+
$VERSION = '3.82';
|
89
89
|
|
90
90
|
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
|
91
91
|
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
|
@@ -144,6 +144,7 @@ $VERSION = '3.77';
|
|
144
144
|
# 27 => 'Carl Zeiss Distagon T* 28mm f/2 ZF', #PH (must be with an adapter, because the ZF version is a Nikon mount)
|
145
145
|
# 27 => 'EMF adapter for Canon EOS digital cameras', #50 (reports MaxFocalLength of 65535)
|
146
146
|
# 27 => optix adapter
|
147
|
+
# 27 => Venus Optics Laowa 12mm f2.8 Zero-D or 105mm f2 (T3.2) Smooth Trans Focus (ref IB)
|
147
148
|
28 => 'Canon EF 80-200mm f/4.5-5.6 or Tamron Lens', #32
|
148
149
|
28.1 => 'Tamron SP AF 28-105mm f/2.8 LD Aspherical IF', #15
|
149
150
|
28.2 => 'Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical [IF] Macro', #4
|
@@ -198,8 +199,11 @@ $VERSION = '3.77';
|
|
198
199
|
53 => 'Canon EF-S 18-55mm f/3.5-5.6 III', #Jon Charnas
|
199
200
|
54 => 'Canon EF-S 55-250mm f/4-5.6 IS II', #47
|
200
201
|
60 => 'Irix 11mm f/4', #50
|
202
|
+
80 => 'Canon TS-E 50mm f/2.8L Macro', #42
|
203
|
+
81 => 'Canon TS-E 90mm f/2.8L Macro', #42
|
204
|
+
82 => 'Canon TS-E 135mm f/4L Macro', #42
|
201
205
|
94 => 'Canon TS-E 17mm f/4L', #42
|
202
|
-
95 => 'Canon TS-E
|
206
|
+
95 => 'Canon TS-E 24mm f/3.5L II', #43
|
203
207
|
124 => 'Canon MP-E 65mm f/2.8 1-5x Macro Photo', #9
|
204
208
|
125 => 'Canon TS-E 24mm f/3.5L',
|
205
209
|
126 => 'Canon TS-E 45mm f/2.8', #15
|
@@ -412,11 +416,13 @@ $VERSION = '3.77';
|
|
412
416
|
490 => 'Canon EF 8-15mm f/4L Fisheye USM', #Klaus Reinfeld (PH added "Fisheye")
|
413
417
|
491 => 'Canon EF 300mm f/2.8L IS II USM or Tamron Lens', #42
|
414
418
|
491.1 => 'Tamron SP 70-200mm F/2.8 Di VC USD G2 (A025)', #IB
|
419
|
+
491.2 => 'Tamron 18-400mm F/3.5-6.3 Di II VC HLD (B028)', #IB
|
415
420
|
492 => 'Canon EF 400mm f/2.8L IS II USM', #PH
|
416
421
|
493 => 'Canon EF 500mm f/4L IS II USM or EF 24-105mm f4L IS USM', #PH
|
417
422
|
493.1 => 'Canon EF 24-105mm f/4L IS USM', #PH (should recheck this)
|
418
423
|
494 => 'Canon EF 600mm f/4.0L IS II USM', #PH
|
419
|
-
495 => 'Canon EF 24-70mm f/2.8L II USM', #PH
|
424
|
+
495 => 'Canon EF 24-70mm f/2.8L II USM or Sigma Lens', #PH
|
425
|
+
495.1 => 'Sigma 24-70mm F2.8 DG OS HSM | A', #IB (017)
|
420
426
|
496 => 'Canon EF 200-400mm f/4L IS USM', #PH
|
421
427
|
499 => 'Canon EF 200-400mm f/4L IS USM + 1.4x', #50
|
422
428
|
502 => 'Canon EF 28mm f/2.8 IS USM', #PH
|
@@ -456,7 +462,12 @@ $VERSION = '3.77';
|
|
456
462
|
36910 => 'Canon EF 70-300mm f/4-5.6 IS II USM', #42
|
457
463
|
36912 => 'Canon EF-S 18-135mm f/3.5-5.6 IS USM', #42
|
458
464
|
# (CN-E lenses - 0xf0xx)
|
465
|
+
61491 => 'Canon CN-E 14mm T3.1 L F', #PH
|
466
|
+
61492 => 'Canon CN-E 24mm T1.5 L F', #PH
|
467
|
+
# 61493 - missing CN-E 50mm T1.3 L F ?
|
459
468
|
61494 => 'Canon CN-E 85mm T1.3 L F', #PH
|
469
|
+
61495 => 'Canon CN-E 135mm T2.2 L F', #PH
|
470
|
+
61496 => 'Canon CN-E 35mm T1.5 L F', #PH
|
460
471
|
65535 => 'n/a',
|
461
472
|
);
|
462
473
|
|
@@ -682,6 +693,7 @@ $VERSION = '3.77';
|
|
682
693
|
0x3940000 => 'EOS M5', #IB
|
683
694
|
0x3950000 => 'PowerShot G5 X',
|
684
695
|
0x3970000 => 'PowerShot G7 X Mark II',
|
696
|
+
0x3980000 => 'EOS M100', #42
|
685
697
|
0x3990000 => 'PowerShot ELPH 360 HS / IXUS 285 HS / IXY 650',
|
686
698
|
0x4010000 => 'PowerShot SX540 HS',
|
687
699
|
0x4020000 => 'PowerShot SX420 IS',
|
@@ -692,9 +704,10 @@ $VERSION = '3.77';
|
|
692
704
|
0x4060000 => 'PowerShot SX620 HS',
|
693
705
|
0x4070000 => 'EOS M6',
|
694
706
|
0x4100000 => 'PowerShot G9 X Mark II',
|
695
|
-
0x4150000 => 'PowerShot ELPH 185 / IXUS 185 / IXY 200',
|
707
|
+
0x4150000 => 'PowerShot ELPH 185 / IXUS 185 / IXY 200',
|
696
708
|
0x4160000 => 'PowerShot SX430 IS',
|
697
709
|
0x4170000 => 'PowerShot SX730 HS',
|
710
|
+
0x4180000 => 'PowerShot G1 X Mark III', #IB
|
698
711
|
0x6040000 => 'PowerShot S100 / Digital IXUS / IXY Digital',
|
699
712
|
|
700
713
|
# (see http://cweb.canon.jp/e-support/faq/answer/digitalcamera/10447-1.html for PowerShot/IXUS/IXY names)
|
@@ -727,6 +740,7 @@ $VERSION = '3.77';
|
|
727
740
|
0x4007da8f => 'HF M30/M31/M36/M300/M306', # (LEGRIA/VIXIA)
|
728
741
|
0x4007da90 => 'HF S20/S21/S200', # (LEGRIA/VIXIA)
|
729
742
|
0x4007da92 => 'FS31/FS36/FS37/FS300/FS305/FS306/FS307',
|
743
|
+
0x4007dca0 => 'EOS C300',
|
730
744
|
0x4007dda9 => 'HF G25', # (LEGRIA)
|
731
745
|
0x4007dfb4 => 'XC10',
|
732
746
|
|
@@ -2505,6 +2505,9 @@ sub ProcessCanonCustom2($$$)
|
|
2505
2505
|
$pos = $recEnd;
|
2506
2506
|
}
|
2507
2507
|
if ($pos != $end) {
|
2508
|
+
# Note: a firmware bug in the EOS M5 and M6 stores an incorrect
|
2509
|
+
# size for the 2nd CanonCustom2 record, so this message is expected
|
2510
|
+
# for these models...
|
2508
2511
|
$et->Warn('Possibly corrupted CanonCustom2 data');
|
2509
2512
|
return 0;
|
2510
2513
|
}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#------------------------------------------------------------------------------
|
2
|
+
# File: DOSLatin1.pm
|
3
|
+
#
|
4
|
+
# Description: cp850 to Unicode
|
5
|
+
#
|
6
|
+
# Revisions: 2017/10/31- P. Harvey created
|
7
|
+
#
|
8
|
+
# References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP850.TXT
|
9
|
+
#
|
10
|
+
# Notes: The table omits 1-byte characters with the same values as Unicode
|
11
|
+
#------------------------------------------------------------------------------
|
12
|
+
use strict;
|
13
|
+
|
14
|
+
%Image::ExifTool::Charset::DOSLatin1 = (
|
15
|
+
0x80 => 0x00c7, 0x81 => 0x00fc, 0x82 => 0x00e9, 0x83 => 0x00e2,
|
16
|
+
0x84 => 0x00e4, 0x85 => 0x00e0, 0x86 => 0x00e5, 0x87 => 0x00e7,
|
17
|
+
0x88 => 0x00ea, 0x89 => 0x00eb, 0x8a => 0x00e8, 0x8b => 0x00ef,
|
18
|
+
0x8c => 0x00ee, 0x8d => 0x00ec, 0x8e => 0x00c4, 0x8f => 0x00c5,
|
19
|
+
0x90 => 0x00c9, 0x91 => 0x00e6, 0x92 => 0x00c6, 0x93 => 0x00f4,
|
20
|
+
0x94 => 0x00f6, 0x95 => 0x00f2, 0x96 => 0x00fb, 0x97 => 0x00f9,
|
21
|
+
0x98 => 0x00ff, 0x99 => 0x00d6, 0x9a => 0x00dc, 0x9b => 0x00f8,
|
22
|
+
0x9c => 0x00a3, 0x9d => 0x00d8, 0x9e => 0x00d7, 0x9f => 0x0192,
|
23
|
+
0xa0 => 0x00e1, 0xa1 => 0x00ed, 0xa2 => 0x00f3, 0xa3 => 0x00fa,
|
24
|
+
0xa4 => 0x00f1, 0xa5 => 0x00d1, 0xa6 => 0x00aa, 0xa7 => 0x00ba,
|
25
|
+
0xa8 => 0x00bf, 0xa9 => 0x00ae, 0xaa => 0x00ac, 0xab => 0x00bd,
|
26
|
+
0xac => 0x00bc, 0xad => 0x00a1, 0xae => 0x00ab, 0xaf => 0x00bb,
|
27
|
+
0xb0 => 0x2591, 0xb1 => 0x2592, 0xb2 => 0x2593, 0xb3 => 0x2502,
|
28
|
+
0xb4 => 0x2524, 0xb5 => 0x00c1, 0xb6 => 0x00c2, 0xb7 => 0x00c0,
|
29
|
+
0xb8 => 0x00a9, 0xb9 => 0x2563, 0xba => 0x2551, 0xbb => 0x2557,
|
30
|
+
0xbc => 0x255d, 0xbd => 0x00a2, 0xbe => 0x00a5, 0xbf => 0x2510,
|
31
|
+
0xc0 => 0x2514, 0xc1 => 0x2534, 0xc2 => 0x252c, 0xc3 => 0x251c,
|
32
|
+
0xc4 => 0x2500, 0xc5 => 0x253c, 0xc6 => 0x00e3, 0xc7 => 0x00c3,
|
33
|
+
0xc8 => 0x255a, 0xc9 => 0x2554, 0xca => 0x2569, 0xcb => 0x2566,
|
34
|
+
0xcc => 0x2560, 0xcd => 0x2550, 0xce => 0x256c, 0xcf => 0x00a4,
|
35
|
+
0xd0 => 0x00f0, 0xd1 => 0x00d0, 0xd2 => 0x00ca, 0xd3 => 0x00cb,
|
36
|
+
0xd4 => 0x00c8, 0xd5 => 0x0131, 0xd6 => 0x00cd, 0xd7 => 0x00ce,
|
37
|
+
0xd8 => 0x00cf, 0xd9 => 0x2518, 0xda => 0x250c, 0xdb => 0x2588,
|
38
|
+
0xdc => 0x2584, 0xdd => 0x00a6, 0xde => 0x00cc, 0xdf => 0x2580,
|
39
|
+
0xe0 => 0x00d3, 0xe1 => 0x00df, 0xe2 => 0x00d4, 0xe3 => 0x00d2,
|
40
|
+
0xe4 => 0x00f5, 0xe5 => 0x00d5, 0xe6 => 0x00b5, 0xe7 => 0x00fe,
|
41
|
+
0xe8 => 0x00de, 0xe9 => 0x00da, 0xea => 0x00db, 0xeb => 0x00d9,
|
42
|
+
0xec => 0x00fd, 0xed => 0x00dd, 0xee => 0x00af, 0xef => 0x00b4,
|
43
|
+
0xf0 => 0x00ad, 0xf1 => 0x00b1, 0xf2 => 0x2017, 0xf3 => 0x00be,
|
44
|
+
0xf4 => 0x00b6, 0xf5 => 0x00a7, 0xf6 => 0x00f7, 0xf7 => 0x00b8,
|
45
|
+
0xf8 => 0x00b0, 0xf9 => 0x00a8, 0xfa => 0x00b7, 0xfb => 0x00b9,
|
46
|
+
0xfc => 0x00b3, 0xfd => 0x00b2, 0xfe => 0x25a0, 0xff => 0x00a0,
|
47
|
+
);
|
48
|
+
|
49
|
+
1; # end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#------------------------------------------------------------------------------
|
2
|
+
# File: DOSLatinUS.pm
|
3
|
+
#
|
4
|
+
# Description: cp437 to Unicode
|
5
|
+
#
|
6
|
+
# Revisions: 2017/10/31- P. Harvey created
|
7
|
+
#
|
8
|
+
# References: 1) http://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/PC/CP437.TXT
|
9
|
+
#
|
10
|
+
# Notes: The table omits 1-byte characters with the same values as Unicode
|
11
|
+
#------------------------------------------------------------------------------
|
12
|
+
use strict;
|
13
|
+
|
14
|
+
%Image::ExifTool::Charset::DOSLatinUS = (
|
15
|
+
0x80 => 0x00c7, 0x81 => 0x00fc, 0x82 => 0x00e9, 0x83 => 0x00e2,
|
16
|
+
0x84 => 0x00e4, 0x85 => 0x00e0, 0x86 => 0x00e5, 0x87 => 0x00e7,
|
17
|
+
0x88 => 0x00ea, 0x89 => 0x00eb, 0x8a => 0x00e8, 0x8b => 0x00ef,
|
18
|
+
0x8c => 0x00ee, 0x8d => 0x00ec, 0x8e => 0x00c4, 0x8f => 0x00c5,
|
19
|
+
0x90 => 0x00c9, 0x91 => 0x00e6, 0x92 => 0x00c6, 0x93 => 0x00f4,
|
20
|
+
0x94 => 0x00f6, 0x95 => 0x00f2, 0x96 => 0x00fb, 0x97 => 0x00f9,
|
21
|
+
0x98 => 0x00ff, 0x99 => 0x00d6, 0x9a => 0x00dc, 0x9b => 0x00a2,
|
22
|
+
0x9c => 0x00a3, 0x9d => 0x00a5, 0x9e => 0x20a7, 0x9f => 0x0192,
|
23
|
+
0xa0 => 0x00e1, 0xa1 => 0x00ed, 0xa2 => 0x00f3, 0xa3 => 0x00fa,
|
24
|
+
0xa4 => 0x00f1, 0xa5 => 0x00d1, 0xa6 => 0x00aa, 0xa7 => 0x00ba,
|
25
|
+
0xa8 => 0x00bf, 0xa9 => 0x2310, 0xaa => 0x00ac, 0xab => 0x00bd,
|
26
|
+
0xac => 0x00bc, 0xad => 0x00a1, 0xae => 0x00ab, 0xaf => 0x00bb,
|
27
|
+
0xb0 => 0x2591, 0xb1 => 0x2592, 0xb2 => 0x2593, 0xb3 => 0x2502,
|
28
|
+
0xb4 => 0x2524, 0xb5 => 0x2561, 0xb6 => 0x2562, 0xb7 => 0x2556,
|
29
|
+
0xb8 => 0x2555, 0xb9 => 0x2563, 0xba => 0x2551, 0xbb => 0x2557,
|
30
|
+
0xbc => 0x255d, 0xbd => 0x255c, 0xbe => 0x255b, 0xbf => 0x2510,
|
31
|
+
0xc0 => 0x2514, 0xc1 => 0x2534, 0xc2 => 0x252c, 0xc3 => 0x251c,
|
32
|
+
0xc4 => 0x2500, 0xc5 => 0x253c, 0xc6 => 0x255e, 0xc7 => 0x255f,
|
33
|
+
0xc8 => 0x255a, 0xc9 => 0x2554, 0xca => 0x2569, 0xcb => 0x2566,
|
34
|
+
0xcc => 0x2560, 0xcd => 0x2550, 0xce => 0x256c, 0xcf => 0x2567,
|
35
|
+
0xd0 => 0x2568, 0xd1 => 0x2564, 0xd2 => 0x2565, 0xd3 => 0x2559,
|
36
|
+
0xd4 => 0x2558, 0xd5 => 0x2552, 0xd6 => 0x2553, 0xd7 => 0x256b,
|
37
|
+
0xd8 => 0x256a, 0xd9 => 0x2518, 0xda => 0x250c, 0xdb => 0x2588,
|
38
|
+
0xdc => 0x2584, 0xdd => 0x258c, 0xde => 0x2590, 0xdf => 0x2580,
|
39
|
+
0xe0 => 0x03b1, 0xe1 => 0x00df, 0xe2 => 0x0393, 0xe3 => 0x03c0,
|
40
|
+
0xe4 => 0x03a3, 0xe5 => 0x03c3, 0xe6 => 0x00b5, 0xe7 => 0x03c4,
|
41
|
+
0xe8 => 0x03a6, 0xe9 => 0x0398, 0xea => 0x03a9, 0xeb => 0x03b4,
|
42
|
+
0xec => 0x221e, 0xed => 0x03c6, 0xee => 0x03b5, 0xef => 0x2229,
|
43
|
+
0xf0 => 0x2261, 0xf1 => 0x00b1, 0xf2 => 0x2265, 0xf3 => 0x2264,
|
44
|
+
0xf4 => 0x2320, 0xf5 => 0x2321, 0xf6 => 0x00f7, 0xf7 => 0x2248,
|
45
|
+
0xf8 => 0x00b0, 0xf9 => 0x2219, 0xfa => 0x00b7, 0xfb => 0x221a,
|
46
|
+
0xfc => 0x207f, 0xfd => 0x00b2, 0xfe => 0x25a0, 0xff => 0x00a0,
|
47
|
+
);
|
48
|
+
|
49
|
+
1; # end
|
@@ -14,7 +14,7 @@ use strict;
|
|
14
14
|
use vars qw($VERSION %csType);
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
16
16
|
|
17
|
-
$VERSION = '1.
|
17
|
+
$VERSION = '1.11';
|
18
18
|
|
19
19
|
my %charsetTable; # character set tables we've loaded
|
20
20
|
|
@@ -57,6 +57,8 @@ my %unicode2byte = (
|
|
57
57
|
Hebrew => 0x101,
|
58
58
|
Latin => 0x101,
|
59
59
|
Latin2 => 0x101,
|
60
|
+
DOSLatinUS => 0x101,
|
61
|
+
DOSLatin1 => 0x101,
|
60
62
|
MacCroatian => 0x101,
|
61
63
|
MacCyrillic => 0x101,
|
62
64
|
MacGreek => 0x101,
|
@@ -405,10 +407,11 @@ This module contains routines used by ExifTool to translate special
|
|
405
407
|
character sets. Currently, the following character sets are supported:
|
406
408
|
|
407
409
|
UTF8, UTF16, UCS2, UCS4, Arabic, Baltic, Cyrillic, Greek, Hebrew, JIS,
|
408
|
-
Latin, Latin2,
|
409
|
-
MacCyrillic, MacGreek, MacHebrew, MacIceland,
|
410
|
-
MacLatin2, MacRSymbol, MacRoman, MacRomanian,
|
411
|
-
PDFDoc, RSymbol, ShiftJIS, Symbol, Thai, Turkish,
|
410
|
+
Latin, Latin2, DOSLatinUS, DOSLatin1, MacArabic, MacChineseCN,
|
411
|
+
MacChineseTW, MacCroatian, MacCyrillic, MacGreek, MacHebrew, MacIceland,
|
412
|
+
MacJapanese, MacKorean, MacLatin2, MacRSymbol, MacRoman, MacRomanian,
|
413
|
+
MacThai, MacTurkish, PDFDoc, RSymbol, ShiftJIS, Symbol, Thai, Turkish,
|
414
|
+
Vietnam
|
412
415
|
|
413
416
|
However, only some of these character sets are available to the user via
|
414
417
|
ExifTool options -- the multi-byte character sets are used only internally
|
@@ -53,7 +53,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
|
|
53
53
|
use Image::ExifTool qw(:DataAccess :Utils);
|
54
54
|
use Image::ExifTool::MakerNotes;
|
55
55
|
|
56
|
-
$VERSION = '3.
|
56
|
+
$VERSION = '3.95';
|
57
57
|
|
58
58
|
sub ProcessExif($$$);
|
59
59
|
sub WriteExif($$$);
|
@@ -1866,6 +1866,7 @@ my %sampleFormat = (
|
|
1866
1866
|
Start => '$val',
|
1867
1867
|
},
|
1868
1868
|
},
|
1869
|
+
# 0x89ab - seen "11 100 130 16 0 0 0 0" in IFD0 of TIFF image from IR scanner (forum8470)
|
1869
1870
|
0x9000 => {
|
1870
1871
|
Name => 'ExifVersion',
|
1871
1872
|
Writable => 'undef',
|
@@ -2114,14 +2115,14 @@ my %sampleFormat = (
|
|
2114
2115
|
0x9217 => { #12
|
2115
2116
|
Name => 'SensingMethod',
|
2116
2117
|
Groups => { 2 => 'Camera' },
|
2117
|
-
Notes => 'values 1 and 6 are not standard EXIF',
|
2118
2118
|
PrintConv => {
|
2119
|
-
1
|
2119
|
+
# (values 1 and 6 are not used by corresponding EXIF tag 0xa217)
|
2120
|
+
1 => 'Monochrome area',
|
2120
2121
|
2 => 'One-chip color area',
|
2121
2122
|
3 => 'Two-chip color area',
|
2122
2123
|
4 => 'Three-chip color area',
|
2123
2124
|
5 => 'Color sequential area',
|
2124
|
-
6 => 'Monochrome linear',
|
2125
|
+
6 => 'Monochrome linear',
|
2125
2126
|
7 => 'Trilinear',
|
2126
2127
|
8 => 'Color sequential linear',
|
2127
2128
|
},
|
@@ -2437,11 +2438,20 @@ my %sampleFormat = (
|
|
2437
2438
|
0xa401 => {
|
2438
2439
|
Name => 'CustomRendered',
|
2439
2440
|
Writable => 'int16u',
|
2441
|
+
Notes => q{
|
2442
|
+
only 0 and 1 are standard EXIF, but other values are used by Apple iOS
|
2443
|
+
devices
|
2444
|
+
},
|
2440
2445
|
PrintConv => {
|
2441
2446
|
0 => 'Normal',
|
2442
2447
|
1 => 'Custom',
|
2443
|
-
#
|
2444
|
-
#
|
2448
|
+
# 2 - also seen (Apple iOS)
|
2449
|
+
3 => 'HDR', # non-standard (Apple iOS)
|
2450
|
+
# 4 - also seen (Apple iOS) - normal image from iOS Camera app (ref http://regex.info/blog/lightroom-goodies/metadata-presets)
|
2451
|
+
6 => 'Panorama', # non-standard (Apple iOS, horizontal or vertical)
|
2452
|
+
# 7 - also seen (Apple iOS)
|
2453
|
+
8 => 'Portrait', # non-standard (Apple iOS, blurred background)
|
2454
|
+
# 9 - also seen (Apple iOS) (HDR Portrait?)
|
2445
2455
|
},
|
2446
2456
|
},
|
2447
2457
|
0xa402 => {
|
@@ -4242,7 +4252,9 @@ my %subSecConv = (
|
|
4242
4252
|
Writable => 1,
|
4243
4253
|
WriteGroup => 'All',
|
4244
4254
|
WriteCheck => '$self->CheckImage(\$val)',
|
4245
|
-
#
|
4255
|
+
# Note: ExifTool 10.38 had disabled the ability to delete this -- why?
|
4256
|
+
# --> added the DelCheck in 10.61 to re-enable this
|
4257
|
+
DelCheck => '$val = ""; return undef', # can't delete, so set to empty string
|
4246
4258
|
WriteAlso => {
|
4247
4259
|
JpgFromRawStart => 'defined $val ? 0xfeedfeed : undef',
|
4248
4260
|
JpgFromRawLength => 'defined $val ? 0xfeedfeed : undef',
|
@@ -5093,6 +5105,7 @@ sub ExifTime($)
|
|
5093
5105
|
#------------------------------------------------------------------------------
|
5094
5106
|
# Generate TIFF file from scratch (in current byte order)
|
5095
5107
|
# Inputs: 0) hash of IFD entries (TagID => Value; multiple values space-delimited)
|
5108
|
+
# 1) raw image data reference
|
5096
5109
|
# Returns: TIFF image data, or undef on error
|
5097
5110
|
sub GenerateTIFF($$)
|
5098
5111
|
{
|
@@ -5397,7 +5410,9 @@ sub ProcessExif($$$)
|
|
5397
5410
|
$$et{Compression} = $$et{SubfileType} = '';
|
5398
5411
|
|
5399
5412
|
# loop through all entries in an EXIF directory (IFD)
|
5400
|
-
my ($index, $valEnd, $offList, $offHash);
|
5413
|
+
my ($index, $valEnd, $offList, $offHash, $mapFmt);
|
5414
|
+
$mapFmt = $$tagTablePtr{VARS}{MAP_FORMAT} if $$tagTablePtr{VARS};
|
5415
|
+
|
5401
5416
|
my ($warnCount, $lastID) = (0, -1);
|
5402
5417
|
for ($index=0; $index<$numEntries; ++$index) {
|
5403
5418
|
if ($warnCount > 10) {
|
@@ -5408,16 +5423,20 @@ sub ProcessExif($$$)
|
|
5408
5423
|
my $format = Get16u($dataPt, $entry+2);
|
5409
5424
|
my $count = Get32u($dataPt, $entry+4);
|
5410
5425
|
if ($format < 1 or $format > 13) {
|
5411
|
-
|
5412
|
-
|
5413
|
-
|
5414
|
-
|
5415
|
-
|
5416
|
-
|
5426
|
+
if ($mapFmt and $$mapFmt{$format}) {
|
5427
|
+
$format = $$mapFmt{$format};
|
5428
|
+
} else {
|
5429
|
+
$et->HDump($entry+$dataPos+$base,12,"[invalid IFD entry]",
|
5430
|
+
"Bad format type: $format", 1);
|
5431
|
+
# warn unless the IFD was just padded with zeros
|
5432
|
+
if ($format or $validate) {
|
5433
|
+
$et->Warn("Bad format ($format) for $name entry $index", $inMakerNotes);
|
5434
|
+
++$warnCount;
|
5435
|
+
}
|
5436
|
+
# assume corrupted IFD if this is our first entry (except Sony ILCE-7M2 firmware 1.21)
|
5437
|
+
return 0 unless $index or $$et{Model} eq 'ILCE-7M2';
|
5438
|
+
next;
|
5417
5439
|
}
|
5418
|
-
# assume corrupted IFD if this is our first entry (except Sony ILCE-7M2 firmware 1.21)
|
5419
|
-
return 0 unless $index or $$et{Model} eq 'ILCE-7M2';
|
5420
|
-
next;
|
5421
5440
|
}
|
5422
5441
|
my $formatStr = $formatName[$format]; # get name of this format
|
5423
5442
|
my $valueDataPt = $dataPt;
|
@@ -5855,7 +5874,7 @@ sub ProcessExif($$$)
|
|
5855
5874
|
last;
|
5856
5875
|
} elsif ($subdirStart + 2 <= $subdirDataLen) {
|
5857
5876
|
# attempt to determine the byte ordering by checking
|
5858
|
-
#
|
5877
|
+
# the number of directory entries. This is an int16u
|
5859
5878
|
# that should be a reasonable value.
|
5860
5879
|
my $num = Get16u($subdirDataPt, $subdirStart);
|
5861
5880
|
if ($num & 0xff00 and ($num>>8) > ($num&0xff)) {
|
@@ -14,7 +14,7 @@ use strict;
|
|
14
14
|
use vars qw($VERSION);
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
16
16
|
|
17
|
-
$VERSION = '1.
|
17
|
+
$VERSION = '1.08';
|
18
18
|
|
19
19
|
sub ProcessBitStream($$$);
|
20
20
|
|
@@ -62,6 +62,11 @@ sub ProcessBitStream($$$);
|
|
62
62
|
ValueConv => '$val + 1',
|
63
63
|
},
|
64
64
|
'Bit108-143' => 'TotalSamples',
|
65
|
+
'Bit144-271' => { #Tim Eliseo
|
66
|
+
Name => 'MD5Signature',
|
67
|
+
Format => 'undef',
|
68
|
+
ValueConv => 'unpack("H*",$val)',
|
69
|
+
},
|
65
70
|
);
|
66
71
|
|
67
72
|
%Image::ExifTool::FLAC::Picture = (
|
@@ -158,47 +163,52 @@ sub ProcessBitStream($$$)
|
|
158
163
|
my ($i1, $i2) = (int($b1 / 8), int($b2 / 8)); # start/end byte numbers
|
159
164
|
my ($f1, $f2) = ($b1 % 8, $b2 % 8); # start/end bit numbers within each byte
|
160
165
|
last if $i2 >= $dirLen;
|
161
|
-
my $val
|
162
|
-
|
163
|
-
|
164
|
-
if ($
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
166
|
+
my ($val, $extra);
|
167
|
+
# if Format is unspecified, convert the specified number of bits to an unsigned integer,
|
168
|
+
# otherwise allow HandleTag to convert whole bytes the normal way (via undefined $val)
|
169
|
+
if (ref $$tagTablePtr{$tag} ne 'HASH' or not $$tagTablePtr{$tag}{Format}) {
|
170
|
+
my ($i, $mask);
|
171
|
+
$val = 0;
|
172
|
+
$extra = ', Mask=0x' if $verbose and ($f1 != 0 or $f2 != 7);
|
173
|
+
if ($byteOrder eq 'MM') {
|
174
|
+
# loop from high byte to low byte
|
175
|
+
for ($i=$i1; $i<=$i2; ++$i) {
|
176
|
+
$mask = 0xff;
|
177
|
+
if ($i == $i1 and $f1) {
|
178
|
+
# mask off high bits in first word (0 is high bit)
|
179
|
+
foreach ((8-$f1) .. 7) { $mask ^= (1 << $_) }
|
180
|
+
}
|
181
|
+
if ($i == $i2 and $f2 < 7) {
|
182
|
+
# mask off low bits in last word (7 is low bit)
|
183
|
+
foreach (0 .. (6-$f2)) { $mask ^= (1 << $_) }
|
184
|
+
}
|
185
|
+
$val = $val * 256 + ($mask & Get8u($dataPt, $i + $dirStart));
|
186
|
+
$extra .= sprintf('%.2x', $mask) if $extra;
|
171
187
|
}
|
172
|
-
|
173
|
-
|
174
|
-
|
188
|
+
} else {
|
189
|
+
# (FLAC is big-endian, but support little-endian bit streams
|
190
|
+
# so this routine can be used by other modules)
|
191
|
+
# loop from high byte to low byte
|
192
|
+
for ($i=$i2; $i>=$i1; --$i) {
|
193
|
+
$mask = 0xff;
|
194
|
+
if ($i == $i1 and $f1) {
|
195
|
+
# mask off low bits in first word (0 is low bit)
|
196
|
+
foreach (0 .. ($f1-1)) { $mask ^= (1 << $_) }
|
197
|
+
}
|
198
|
+
if ($i == $i2 and $f2 < 7) {
|
199
|
+
# mask off high bits in last word (7 is high bit)
|
200
|
+
foreach (($f2+1) .. 7) { $mask ^= (1 << $_) }
|
201
|
+
}
|
202
|
+
$val = $val * 256 + ($mask & Get8u($dataPt, $i + $dirStart));
|
203
|
+
$extra .= sprintf('%.2x', $mask) if $extra;
|
175
204
|
}
|
176
|
-
$val = $val * 256 + ($mask & Get8u($dataPt, $i + $dirStart));
|
177
|
-
$extra .= sprintf('%.2x', $mask) if $extra;
|
178
205
|
}
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
for ($i=$i2; $i>=$i1; --$i) {
|
184
|
-
$mask = 0xff;
|
185
|
-
if ($i == $i1 and $f1) {
|
186
|
-
# mask off low bits in first word (0 is low bit)
|
187
|
-
foreach (0 .. ($f1-1)) { $mask ^= (1 << $_) }
|
188
|
-
}
|
189
|
-
if ($i == $i2 and $f2 < 7) {
|
190
|
-
# mask off high bits in last word (7 is high bit)
|
191
|
-
foreach (($f2+1) .. 7) { $mask ^= (1 << $_) }
|
192
|
-
}
|
193
|
-
$val = $val * 256 + ($mask & Get8u($dataPt, $i + $dirStart));
|
194
|
-
$extra .= sprintf('%.2x', $mask) if $extra;
|
206
|
+
# shift word down until low bit is in position 0
|
207
|
+
until ($mask & 0x01) {
|
208
|
+
$val /= 2;
|
209
|
+
$mask >>= 1;
|
195
210
|
}
|
196
211
|
}
|
197
|
-
# shift word down until low bit is in position 0
|
198
|
-
until ($mask & 0x01) {
|
199
|
-
$val /= 2;
|
200
|
-
$mask >>= 1;
|
201
|
-
}
|
202
212
|
$et->HandleTag($tagTablePtr, $tag, $val,
|
203
213
|
DataPt => $dataPt,
|
204
214
|
DataPos => $dataPos,
|
@@ -24,7 +24,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
24
24
|
use Image::ExifTool::Exif;
|
25
25
|
use Image::ExifTool::GPS;
|
26
26
|
|
27
|
-
$VERSION = '1.
|
27
|
+
$VERSION = '1.16';
|
28
28
|
|
29
29
|
sub ProcessFLIR($$;$);
|
30
30
|
sub ProcessFLIRText($$$);
|
@@ -461,6 +461,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
|
|
461
461
|
0x390 => { Name => 'FocusStepCount', Format => 'int16u' },
|
462
462
|
0x45c => { Name => 'FocusDistance', Format => 'float', PrintConv => 'sprintf("%.1f m",$val)' },
|
463
463
|
# 0x43c - string: either "Live" or the file name
|
464
|
+
0x464 => { Name => 'FrameRate', Format => 'int16u' }, #SebastianHani
|
464
465
|
);
|
465
466
|
|
466
467
|
# FLIR measurement tools record (ref 6)
|
@@ -1222,8 +1223,7 @@ sub GetImageType($$$)
|
|
1222
1223
|
} elsif (length $val != $w * $h * 2) {
|
1223
1224
|
$et->Warn("Unrecognized FLIR $tag data format");
|
1224
1225
|
} elsif (GetByteOrder() eq 'II') {
|
1225
|
-
|
1226
|
-
$val = Image::ExifTool::Sony::MakeTiffHeader($w,$h,1,16) . $val;
|
1226
|
+
$val = Image::ExifTool::MakeTiffHeader($w,$h,1,16) . $val;
|
1227
1227
|
$type = 'TIFF';
|
1228
1228
|
} else {
|
1229
1229
|
$et->Warn("Don't yet support big-endian TIFF $tag");
|
@@ -29,7 +29,7 @@ use vars qw($VERSION);
|
|
29
29
|
use Image::ExifTool qw(:DataAccess :Utils);
|
30
30
|
use Image::ExifTool::Exif;
|
31
31
|
|
32
|
-
$VERSION = '1.
|
32
|
+
$VERSION = '1.60';
|
33
33
|
|
34
34
|
sub ProcessFujiDir($$$);
|
35
35
|
sub ProcessFaceRec($$$);
|
@@ -44,6 +44,8 @@ my %testedRAF = (
|
|
44
44
|
'0106' => 'S5Pro Ver1.06',
|
45
45
|
'0111' => 'S5Pro Ver1.11',
|
46
46
|
'0114' => 'S9600 Ver1.00',
|
47
|
+
'0132' => 'X-T2 Ver1.32',
|
48
|
+
'0144' => 'X100T Ver1.44',
|
47
49
|
'0159' => 'S2Pro Ver1.00',
|
48
50
|
'0200' => 'X10 Ver2.00',
|
49
51
|
'0212' => 'S3Pro Ver2.12',
|
@@ -56,6 +58,7 @@ my %testedRAF = (
|
|
56
58
|
'0300' => 'X-E2',
|
57
59
|
'0712' => 'S5000 Ver3.00',
|
58
60
|
'0716' => 'S5000 Ver3.00', # (yes, 2 RAF versions with the same Software version)
|
61
|
+
'0Dgi' => 'X-A10 Ver1.01 and X-A3 Ver1.02', # (yes, non-digits in the firmware number)
|
59
62
|
);
|
60
63
|
|
61
64
|
my %faceCategories = (
|
@@ -1113,7 +1116,7 @@ sub WriteRAF($$)
|
|
1113
1116
|
$raf->Read($hdr,0x94) == 0x94 or return 0;
|
1114
1117
|
$hdr =~ /^FUJIFILM/ or return 0;
|
1115
1118
|
my $ver = substr($hdr, 0x3c, 4);
|
1116
|
-
$ver =~ /^\d{4}$/
|
1119
|
+
$ver =~ /^\d{4}$/ or $testedRAF{$ver} or return 0;
|
1117
1120
|
|
1118
1121
|
# get the position and size of embedded JPEG
|
1119
1122
|
my ($jpos, $jlen) = unpack('x84NN', $hdr);
|