exiftool_vendored 12.33.0 → 12.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 +66 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +65 -37
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +11 -2
- data/bin/lib/Image/ExifTool/Canon.pm +156 -10
- data/bin/lib/Image/ExifTool/Charset.pm +2 -0
- data/bin/lib/Image/ExifTool/DarwinCore.pm +2 -2
- data/bin/lib/Image/ExifTool/Exif.pm +13 -1
- data/bin/lib/Image/ExifTool/FLIR.pm +33 -8
- data/bin/lib/Image/ExifTool/GIF.pm +5 -1
- data/bin/lib/Image/ExifTool/GPS.pm +14 -10
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +96 -4
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +108 -11
- data/bin/lib/Image/ExifTool/Nikon.pm +992 -18
- data/bin/lib/Image/ExifTool/NikonCustom.pm +5 -1
- data/bin/lib/Image/ExifTool/NikonSettings.pm +135 -71
- data/bin/lib/Image/ExifTool/PDF.pm +5 -3
- data/bin/lib/Image/ExifTool/PNG.pm +1 -0
- data/bin/lib/Image/ExifTool/QuickTime.pm +17 -3
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +26 -1
- data/bin/lib/Image/ExifTool/README +4 -0
- data/bin/lib/Image/ExifTool/Sony.pm +29 -11
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +9 -4
- data/bin/lib/Image/ExifTool/TagLookup.pm +6437 -5843
- data/bin/lib/Image/ExifTool/TagNames.pod +1292 -46
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +10 -0
- data/bin/lib/Image/ExifTool/WriteXMP.pl +10 -11
- data/bin/lib/Image/ExifTool/Writer.pl +50 -5
- data/bin/lib/Image/ExifTool/XMP.pm +119 -30
- data/bin/lib/Image/ExifTool/XMP2.pl +3 -2
- data/bin/lib/Image/ExifTool.pm +71 -8
- data/bin/lib/Image/ExifTool.pod +9 -1
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.55';
|
|
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)
|
|
@@ -595,7 +595,10 @@ $VERSION = '4.52';
|
|
|
595
595
|
'61182.21' => 'Canon RF 70-200mm F4L IS USM', #42
|
|
596
596
|
'61182.22' => 'Canon RF 50mm F1.8 STM', #42
|
|
597
597
|
'61182.23' => 'Canon RF 14-35mm F4L IS USM', #IB
|
|
598
|
-
'61182.24' => 'Canon RF
|
|
598
|
+
'61182.24' => 'Canon RF 100-400mm F5.6-8 IS USM', #42
|
|
599
|
+
'61182.25' => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42 (NC)
|
|
600
|
+
'61182.26' => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42 (NC)
|
|
601
|
+
'61182.27' => 'Canon RF 16mm F2.8 STM', #42
|
|
599
602
|
#'61182.xx' => 'Canon RF 100mm F2.8L MACRO IS USM',
|
|
600
603
|
65535 => 'n/a',
|
|
601
604
|
);
|
|
@@ -951,6 +954,7 @@ $VERSION = '4.52';
|
|
|
951
954
|
0x80000435 => 'EOS Rebel T8i / 850D / X10i', #JR/PH
|
|
952
955
|
0x80000436 => 'EOS SL3 / 250D / Kiss X10', #25
|
|
953
956
|
0x80000437 => 'EOS 90D', #IB
|
|
957
|
+
0x80000450 => 'EOS R3', #42
|
|
954
958
|
0x80000453 => 'EOS R6', #PH
|
|
955
959
|
0x80000467 => 'PowerShot ZOOM',
|
|
956
960
|
0x80000468 => 'EOS M50 Mark II / Kiss M2', #IB
|
|
@@ -1915,6 +1919,11 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
1915
1919
|
Name => 'ColorData10',
|
|
1916
1920
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData10' },
|
|
1917
1921
|
},
|
|
1922
|
+
{ # (int16u[3973]) - R3 ref IB
|
|
1923
|
+
Condition => '$count == 3973',
|
|
1924
|
+
Name => 'ColorData11',
|
|
1925
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData11' },
|
|
1926
|
+
},
|
|
1918
1927
|
{
|
|
1919
1928
|
Name => 'ColorDataUnknown',
|
|
1920
1929
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorDataUnknown' },
|
|
@@ -6776,6 +6785,9 @@ my %ciMaxFocal = (
|
|
|
6776
6785
|
278 => 'Canon RF 70-200mm F4L IS USM', #42
|
|
6777
6786
|
280 => 'Canon RF 50mm F1.8 STM', #42
|
|
6778
6787
|
281 => 'Canon RF 14-35mm F4L IS USM', #42/IB
|
|
6788
|
+
283 => 'Canon RF 100-400mm F5.6-8 IS USM', #42
|
|
6789
|
+
284 => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42 (NC)
|
|
6790
|
+
285 => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42 (NC)
|
|
6779
6791
|
288 => 'Canon RF 16mm F2.8 STM', #42
|
|
6780
6792
|
#xxx => 'Canon RF 100mm F2.8L MACRO IS USM',
|
|
6781
6793
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
|
@@ -7713,7 +7725,10 @@ my %ciMaxFocal = (
|
|
|
7713
7725
|
# Color data (MakerNotes tag 0x4001, count=1312,1313,1316) (ref PH)
|
|
7714
7726
|
%Image::ExifTool::Canon::ColorData7 = (
|
|
7715
7727
|
%binaryDataAttrs,
|
|
7716
|
-
NOTES =>
|
|
7728
|
+
NOTES => q{
|
|
7729
|
+
These tags are used by the EOS 1DX, 5DmkIII, 6D, 7DmkII, 100D, 650D, 700D,
|
|
7730
|
+
8000D, M and M2.
|
|
7731
|
+
},
|
|
7717
7732
|
FORMAT => 'int16s',
|
|
7718
7733
|
FIRST_ENTRY => 0,
|
|
7719
7734
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -7724,8 +7739,8 @@ my %ciMaxFocal = (
|
|
|
7724
7739
|
DataMember => 'ColorDataVersion',
|
|
7725
7740
|
RawConv => '$$self{ColorDataVersion} = $val',
|
|
7726
7741
|
PrintConv => {
|
|
7727
|
-
10 => '10 (1DX/5DmkIII/6D/70D/100D/650D/700D/M)',
|
|
7728
|
-
11 => '11 (7DmkII/750D/760D)',
|
|
7742
|
+
10 => '10 (1DX/5DmkIII/6D/70D/100D/650D/700D/M/M2)',
|
|
7743
|
+
11 => '11 (7DmkII/750D/760D/8000D)',
|
|
7729
7744
|
},
|
|
7730
7745
|
},
|
|
7731
7746
|
# not really sure about the AsShot, Auto and Measured values any more - PH
|
|
@@ -7860,6 +7875,10 @@ my %ciMaxFocal = (
|
|
|
7860
7875
|
# Color data (MakerNotes tag 0x4001, count=1560,etc) (ref IB)
|
|
7861
7876
|
%Image::ExifTool::Canon::ColorData8 = (
|
|
7862
7877
|
%binaryDataAttrs,
|
|
7878
|
+
NOTES => q{
|
|
7879
|
+
These tags are used by the EOS 1DXmkII, 5DS, 5DSR, 5DmkIV, 6DmkII, 77D, 80D,
|
|
7880
|
+
200D, 800D, 1300D, 2000D, 4000D and 9000D.
|
|
7881
|
+
},
|
|
7863
7882
|
FORMAT => 'int16s',
|
|
7864
7883
|
FIRST_ENTRY => 0,
|
|
7865
7884
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -7870,10 +7889,10 @@ my %ciMaxFocal = (
|
|
|
7870
7889
|
DataMember => 'ColorDataVersion',
|
|
7871
7890
|
RawConv => '$$self{ColorDataVersion} = $val',
|
|
7872
7891
|
PrintConv => {
|
|
7873
|
-
12 => '12 (5DS/5DSR)',
|
|
7874
|
-
13 => '13 (80D)', #PH
|
|
7892
|
+
12 => '12 (1DXmkII/5DS/5DSR)',
|
|
7893
|
+
13 => '13 (80D/5DmkIV)', #PH
|
|
7875
7894
|
14 => '14 (1300D/2000D/4000D)', #IB
|
|
7876
|
-
15 => '15 (6DmkII/77D/200D/800D)', #IB
|
|
7895
|
+
15 => '15 (6DmkII/77D/200D/800D,9000D)', #IB
|
|
7877
7896
|
},
|
|
7878
7897
|
},
|
|
7879
7898
|
0x3f => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
|
|
@@ -8020,6 +8039,7 @@ my %ciMaxFocal = (
|
|
|
8020
8039
|
# Color data (MakerNotes tag 0x4001, count=1820,etc) (ref PH)
|
|
8021
8040
|
%Image::ExifTool::Canon::ColorData9 = (
|
|
8022
8041
|
%binaryDataAttrs,
|
|
8042
|
+
NOTES => 'These tags are used by the M6mkII, M50, M200, EOS R, RP, 90D, 250D and 850D',
|
|
8023
8043
|
FORMAT => 'int16s',
|
|
8024
8044
|
FIRST_ENTRY => 0,
|
|
8025
8045
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -8032,8 +8052,8 @@ my %ciMaxFocal = (
|
|
|
8032
8052
|
PrintConv => {
|
|
8033
8053
|
16 => '16 (M50)',
|
|
8034
8054
|
17 => '17 (EOS R)', # (and PowerShot SX740HS)
|
|
8035
|
-
18 => '18 (EOS RP)', # (and PowerShot SX70HS)
|
|
8036
|
-
19 => '19 (90D/M6mkII/M200)',# (and PowerShot G7XmkIII)
|
|
8055
|
+
18 => '18 (EOS RP/250D)', # (and PowerShot SX70HS)
|
|
8056
|
+
19 => '19 (90D/850D/M6mkII/M200)',# (and PowerShot G7XmkIII)
|
|
8037
8057
|
},
|
|
8038
8058
|
},
|
|
8039
8059
|
0x47 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
|
|
@@ -8144,6 +8164,7 @@ my %ciMaxFocal = (
|
|
|
8144
8164
|
# (same as ColorData9 but shifted up by 0x0e, ref PH)
|
|
8145
8165
|
%Image::ExifTool::Canon::ColorData10 = (
|
|
8146
8166
|
%binaryDataAttrs,
|
|
8167
|
+
NOTES => 'These tags are used by the R5, R5 and EOS 1DXmkIII.',
|
|
8147
8168
|
FORMAT => 'int16s',
|
|
8148
8169
|
FIRST_ENTRY => 0,
|
|
8149
8170
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
@@ -8262,6 +8283,125 @@ my %ciMaxFocal = (
|
|
|
8262
8283
|
},
|
|
8263
8284
|
);
|
|
8264
8285
|
|
|
8286
|
+
# Color data (MakerNotes tag 0x4001, count=3973, ref IB)
|
|
8287
|
+
%Image::ExifTool::Canon::ColorData11 = (
|
|
8288
|
+
%binaryDataAttrs,
|
|
8289
|
+
NOTES => 'These tags are used by the EOS R3',
|
|
8290
|
+
FORMAT => 'int16s',
|
|
8291
|
+
FIRST_ENTRY => 0,
|
|
8292
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
8293
|
+
DATAMEMBER => [ 0 ],
|
|
8294
|
+
IS_SUBDIR => [ 0x12c ],
|
|
8295
|
+
0x00 => {
|
|
8296
|
+
Name => 'ColorDataVersion',
|
|
8297
|
+
DataMember => 'ColorDataVersion',
|
|
8298
|
+
RawConv => '$$self{ColorDataVersion} = $val',
|
|
8299
|
+
PrintConv => {
|
|
8300
|
+
34 => '34 (R3)', #IB
|
|
8301
|
+
},
|
|
8302
|
+
},
|
|
8303
|
+
0x69 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
|
|
8304
|
+
0x6d => 'ColorTempAsShot',
|
|
8305
|
+
0x6e => { Name => 'WB_RGGBLevelsAuto', Format => 'int16s[4]' },
|
|
8306
|
+
0x72 => 'ColorTempAuto',
|
|
8307
|
+
0x73 => { Name => 'WB_RGGBLevelsMeasured', Format => 'int16s[4]' },
|
|
8308
|
+
0x77 => 'ColorTempMeasured',
|
|
8309
|
+
0x78 => { Name => 'WB_RGGBLevelsUnknown', Format => 'int16s[4]', Unknown => 1 },
|
|
8310
|
+
0x7c => { Name => 'ColorTempUnknown', Unknown => 1 },
|
|
8311
|
+
0x7d => { Name => 'WB_RGGBLevelsUnknown2', Format => 'int16s[4]', Unknown => 1 },
|
|
8312
|
+
0x81 => { Name => 'ColorTempUnknown2', Unknown => 1 },
|
|
8313
|
+
0x82 => { Name => 'WB_RGGBLevelsUnknown3', Format => 'int16s[4]', Unknown => 1 },
|
|
8314
|
+
0x86 => { Name => 'ColorTempUnknown3', Unknown => 1 },
|
|
8315
|
+
0x87 => { Name => 'WB_RGGBLevelsUnknown4', Format => 'int16s[4]', Unknown => 1 },
|
|
8316
|
+
0x8b => { Name => 'ColorTempUnknown4', Unknown => 1 },
|
|
8317
|
+
0x8c => { Name => 'WB_RGGBLevelsUnknown5', Format => 'int16s[4]', Unknown => 1 },
|
|
8318
|
+
0x90 => { Name => 'ColorTempUnknown5', Unknown => 1 },
|
|
8319
|
+
0x91 => { Name => 'WB_RGGBLevelsUnknown6', Format => 'int16s[4]', Unknown => 1 },
|
|
8320
|
+
0x95 => { Name => 'ColorTempUnknown6', Unknown => 1 },
|
|
8321
|
+
0x96 => { Name => 'WB_RGGBLevelsUnknown7', Format => 'int16s[4]', Unknown => 1 },
|
|
8322
|
+
0x9a => { Name => 'ColorTempUnknown7', Unknown => 1 },
|
|
8323
|
+
0x9b => { Name => 'WB_RGGBLevelsUnknown8', Format => 'int16s[4]', Unknown => 1 },
|
|
8324
|
+
0x9f => { Name => 'ColorTempUnknown8', Unknown => 1 },
|
|
8325
|
+
0xa0 => { Name => 'WB_RGGBLevelsUnknown9', Format => 'int16s[4]', Unknown => 1 },
|
|
8326
|
+
0xa4 => { Name => 'ColorTempUnknown9', Unknown => 1 },
|
|
8327
|
+
0xa5 => { Name => 'WB_RGGBLevelsUnknown10', Format => 'int16s[4]', Unknown => 1 },
|
|
8328
|
+
0xa9 => { Name => 'ColorTempUnknown10', Unknown => 1 },
|
|
8329
|
+
0xaa => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 },
|
|
8330
|
+
0xae => { Name => 'ColorTempUnknown11', Unknown => 1 },
|
|
8331
|
+
0xaf => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 },
|
|
8332
|
+
0xb3 => { Name => 'ColorTempUnknown11', Unknown => 1 },
|
|
8333
|
+
0xb4 => { Name => 'WB_RGGBLevelsUnknown12', Format => 'int16s[4]', Unknown => 1 },
|
|
8334
|
+
0xb8 => { Name => 'ColorTempUnknown12', Unknown => 1 },
|
|
8335
|
+
0xb9 => { Name => 'WB_RGGBLevelsUnknown13', Format => 'int16s[4]', Unknown => 1 },
|
|
8336
|
+
0xbd => { Name => 'ColorTempUnknown13', Unknown => 1 },
|
|
8337
|
+
0xbe => { Name => 'WB_RGGBLevelsUnknown14', Format => 'int16s[4]', Unknown => 1 },
|
|
8338
|
+
0xc2 => { Name => 'ColorTempUnknown14', Unknown => 1 },
|
|
8339
|
+
0xc3 => { Name => 'WB_RGGBLevelsUnknown15', Format => 'int16s[4]', Unknown => 1 },
|
|
8340
|
+
0xc7 => { Name => 'ColorTempUnknown15', Unknown => 1 },
|
|
8341
|
+
0xc8 => { Name => 'WB_RGGBLevelsUnknown16', Format => 'int16s[4]', Unknown => 1 },
|
|
8342
|
+
0xcc => { Name => 'ColorTempUnknown16', Unknown => 1 },
|
|
8343
|
+
0xcd => { Name => 'WB_RGGBLevelsDaylight', Format => 'int16s[4]' },
|
|
8344
|
+
0xd1 => 'ColorTempDaylight',
|
|
8345
|
+
0xd2 => { Name => 'WB_RGGBLevelsShade', Format => 'int16s[4]' },
|
|
8346
|
+
0xd6 => 'ColorTempShade',
|
|
8347
|
+
0xd7 => { Name => 'WB_RGGBLevelsCloudy', Format => 'int16s[4]' },
|
|
8348
|
+
0xdb => 'ColorTempCloudy',
|
|
8349
|
+
0xdc => { Name => 'WB_RGGBLevelsTungsten', Format => 'int16s[4]' },
|
|
8350
|
+
0xe0 => 'ColorTempTungsten',
|
|
8351
|
+
0xe1 => { Name => 'WB_RGGBLevelsFluorescent',Format => 'int16s[4]' },
|
|
8352
|
+
0xe5 => 'ColorTempFluorescent',
|
|
8353
|
+
0xe6 => { Name => 'WB_RGGBLevelsKelvin', Format => 'int16s[4]' },
|
|
8354
|
+
0xea => 'ColorTempKelvin',
|
|
8355
|
+
0xeb => { Name => 'WB_RGGBLevelsFlash', Format => 'int16s[4]' },
|
|
8356
|
+
0xef => 'ColorTempFlash',
|
|
8357
|
+
0xf0 => { Name => 'WB_RGGBLevelsUnknown17', Format => 'int16s[4]', Unknown => 1 },
|
|
8358
|
+
0xf4 => { Name => 'ColorTempUnknown17', Unknown => 1 },
|
|
8359
|
+
0xf5 => { Name => 'WB_RGGBLevelsUnknown18', Format => 'int16s[4]', Unknown => 1 },
|
|
8360
|
+
0xf9 => { Name => 'ColorTempUnknown18', Unknown => 1 },
|
|
8361
|
+
0xfa => { Name => 'WB_RGGBLevelsUnknown19', Format => 'int16s[4]', Unknown => 1 },
|
|
8362
|
+
0xfe => { Name => 'ColorTempUnknown19', Unknown => 1 },
|
|
8363
|
+
0xff => { Name => 'WB_RGGBLevelsUnknown20', Format => 'int16s[4]', Unknown => 1 },
|
|
8364
|
+
0x103 => { Name => 'ColorTempUnknown20', Unknown => 1 },
|
|
8365
|
+
0x104 => { Name => 'WB_RGGBLevelsUnknown21', Format => 'int16s[4]', Unknown => 1 },
|
|
8366
|
+
0x108 => { Name => 'ColorTempUnknown21', Unknown => 1 },
|
|
8367
|
+
0x109 => { Name => 'WB_RGGBLevelsUnknown22', Format => 'int16s[4]', Unknown => 1 },
|
|
8368
|
+
0x10d => { Name => 'ColorTempUnknown22', Unknown => 1 },
|
|
8369
|
+
0x10e => { Name => 'WB_RGGBLevelsUnknown23', Format => 'int16s[4]', Unknown => 1 },
|
|
8370
|
+
0x112 => { Name => 'ColorTempUnknown23', Unknown => 1 },
|
|
8371
|
+
0x113 => { Name => 'WB_RGGBLevelsUnknown24', Format => 'int16s[4]', Unknown => 1 },
|
|
8372
|
+
0x117 => { Name => 'ColorTempUnknown24', Unknown => 1 },
|
|
8373
|
+
0x118 => { Name => 'WB_RGGBLevelsUnknown25', Format => 'int16s[4]', Unknown => 1 },
|
|
8374
|
+
0x11c => { Name => 'ColorTempUnknown25', Unknown => 1 },
|
|
8375
|
+
0x11d => { Name => 'WB_RGGBLevelsUnknown26', Format => 'int16s[4]', Unknown => 1 },
|
|
8376
|
+
0x121 => { Name => 'ColorTempUnknown26', Unknown => 1 },
|
|
8377
|
+
0x122 => { Name => 'WB_RGGBLevelsUnknown27', Format => 'int16s[4]', Unknown => 1 },
|
|
8378
|
+
0x126 => { Name => 'ColorTempUnknown27', Unknown => 1 },
|
|
8379
|
+
0x12c => {
|
|
8380
|
+
Name => 'ColorCalib',
|
|
8381
|
+
Format => 'undef[120]',
|
|
8382
|
+
Unknown => 1,
|
|
8383
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorCalib' }
|
|
8384
|
+
},
|
|
8385
|
+
0x16b => {
|
|
8386
|
+
Name => 'PerChannelBlackLevel',
|
|
8387
|
+
Format => 'int16u[4]',
|
|
8388
|
+
},
|
|
8389
|
+
# 0x27c - PerChannelBlackLevel again
|
|
8390
|
+
0x280 => {
|
|
8391
|
+
Name => 'NormalWhiteLevel',
|
|
8392
|
+
Format => 'int16u',
|
|
8393
|
+
RawConv => '$val || undef',
|
|
8394
|
+
},
|
|
8395
|
+
0x281 => {
|
|
8396
|
+
Name => 'SpecularWhiteLevel',
|
|
8397
|
+
Format => 'int16u',
|
|
8398
|
+
},
|
|
8399
|
+
0x282 => {
|
|
8400
|
+
Name => 'LinearityUpperMargin',
|
|
8401
|
+
Format => 'int16u',
|
|
8402
|
+
},
|
|
8403
|
+
);
|
|
8404
|
+
|
|
8265
8405
|
# Unknown color data (MakerNotes tag 0x4001)
|
|
8266
8406
|
%Image::ExifTool::Canon::ColorDataUnknown = (
|
|
8267
8407
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
@@ -8752,6 +8892,7 @@ my %filterConv = (
|
|
|
8752
8892
|
# --> ignored when reading, but offsets are updated when writing
|
|
8753
8893
|
CMT1 => { # (CR3 files)
|
|
8754
8894
|
Name => 'IFD0',
|
|
8895
|
+
PreservePadding => 1,
|
|
8755
8896
|
SubDirectory => {
|
|
8756
8897
|
TagTable => 'Image::ExifTool::Exif::Main',
|
|
8757
8898
|
ProcessProc => \&Image::ExifTool::ProcessTIFF,
|
|
@@ -8760,6 +8901,7 @@ my %filterConv = (
|
|
|
8760
8901
|
},
|
|
8761
8902
|
CMT2 => { # (CR3 files)
|
|
8762
8903
|
Name => 'ExifIFD',
|
|
8904
|
+
PreservePadding => 1,
|
|
8763
8905
|
SubDirectory => {
|
|
8764
8906
|
TagTable => 'Image::ExifTool::Exif::Main',
|
|
8765
8907
|
ProcessProc => \&Image::ExifTool::ProcessTIFF,
|
|
@@ -8768,6 +8910,7 @@ my %filterConv = (
|
|
|
8768
8910
|
},
|
|
8769
8911
|
CMT3 => { # (CR3 files)
|
|
8770
8912
|
Name => 'MakerNoteCanon',
|
|
8913
|
+
PreservePadding => 1,
|
|
8771
8914
|
SubDirectory => {
|
|
8772
8915
|
TagTable => 'Image::ExifTool::Canon::Main',
|
|
8773
8916
|
ProcessProc => \&ProcessCMT3,
|
|
@@ -8776,6 +8919,7 @@ my %filterConv = (
|
|
|
8776
8919
|
},
|
|
8777
8920
|
CMT4 => { # (CR3 files)
|
|
8778
8921
|
Name => 'GPSInfo',
|
|
8922
|
+
PreservePadding => 1,
|
|
8779
8923
|
SubDirectory => {
|
|
8780
8924
|
TagTable => 'Image::ExifTool::GPS::Main',
|
|
8781
8925
|
ProcessProc => \&Image::ExifTool::ProcessTIFF,
|
|
@@ -8786,6 +8930,7 @@ my %filterConv = (
|
|
|
8786
8930
|
THMB => {
|
|
8787
8931
|
Name => 'ThumbnailImage',
|
|
8788
8932
|
Groups => { 2 => 'Preview' },
|
|
8933
|
+
PreservePadding => 1,
|
|
8789
8934
|
RawConv => 'substr($val, 16)',
|
|
8790
8935
|
Binary => 1,
|
|
8791
8936
|
},
|
|
@@ -8800,6 +8945,7 @@ my %filterConv = (
|
|
|
8800
8945
|
WRITE_PROC => 'Image::ExifTool::QuickTime::WriteQuickTime',
|
|
8801
8946
|
CNOP => {
|
|
8802
8947
|
Name => 'CanonVRD',
|
|
8948
|
+
PreservePadding => 1,
|
|
8803
8949
|
SubDirectory => {
|
|
8804
8950
|
TagTable => 'Image::ExifTool::CanonVRD::Main',
|
|
8805
8951
|
WriteProc => 'Image::ExifTool::CanonVRD::WriteCanonDR4',
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
# Revisions: 2009/08/28 - P. Harvey created
|
|
7
7
|
# 2010/01/20 - P. Harvey complete re-write
|
|
8
8
|
# 2010/07/16 - P. Harvey added UTF-16 support
|
|
9
|
+
#
|
|
10
|
+
# Notes: Charset lookups are generated using my convertCharset script
|
|
9
11
|
#------------------------------------------------------------------------------
|
|
10
12
|
|
|
11
13
|
package Image::ExifTool::Charset;
|
|
@@ -15,7 +15,7 @@ use strict;
|
|
|
15
15
|
use vars qw($VERSION);
|
|
16
16
|
use Image::ExifTool::XMP;
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.06';
|
|
19
19
|
|
|
20
20
|
my %dateTimeInfo = (
|
|
21
21
|
# NOTE: Do NOT put "Groups" here because Groups hash must not be common!
|
|
@@ -38,7 +38,7 @@ my %event = (
|
|
|
38
38
|
earliestDate => { %dateTimeInfo, Groups => { 2 => 'Time' } },
|
|
39
39
|
endDayOfYear => { Writable => 'integer', Groups => { 2 => 'Time' } },
|
|
40
40
|
eventDate => { %dateTimeInfo, Groups => { 2 => 'Time' } },
|
|
41
|
-
eventID => { },
|
|
41
|
+
eventID => { Avoid => 1, Notes => 'avoided in favor of XMP-iptcExt:EventID' },
|
|
42
42
|
eventRemarks => { Writable => 'lang-alt' },
|
|
43
43
|
eventTime => {
|
|
44
44
|
Groups => { 2 => 'Time' },
|
|
@@ -56,7 +56,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
|
|
|
56
56
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
57
57
|
use Image::ExifTool::MakerNotes;
|
|
58
58
|
|
|
59
|
-
$VERSION = '4.
|
|
59
|
+
$VERSION = '4.38';
|
|
60
60
|
|
|
61
61
|
sub ProcessExif($$$);
|
|
62
62
|
sub WriteExif($$$);
|
|
@@ -4816,11 +4816,23 @@ my %subSecConv = (
|
|
|
4816
4816
|
},
|
|
4817
4817
|
GPSPosition => {
|
|
4818
4818
|
Groups => { 2 => 'Location' },
|
|
4819
|
+
Writable => 1,
|
|
4820
|
+
WriteAlso => {
|
|
4821
|
+
GPSLatitude => '$val =~ /(.*?)( ?[NS])?,/ ? $1 : undef',
|
|
4822
|
+
GPSLatitudeRef => '$val =~ /(-?)(.*?) ?([NS]?),/ ? ($3 || ($1 ? "S" : "N")) : undef',
|
|
4823
|
+
GPSLongitude => '$val =~ /, ?(.*?)( ?[EW]?)$/ ? $1 : undef',
|
|
4824
|
+
GPSLongitudeRef => '$val =~ /, ?(-?)(.*?) ?([EW]?)$/ ? ($3 || ($1 ? "W" : "E")) : undef',
|
|
4825
|
+
},
|
|
4819
4826
|
Require => {
|
|
4820
4827
|
0 => 'GPSLatitude',
|
|
4821
4828
|
1 => 'GPSLongitude',
|
|
4822
4829
|
},
|
|
4823
4830
|
Priority => 0,
|
|
4831
|
+
Notes => q{
|
|
4832
|
+
when written, writes GPSLatitude, GPSLatitudeRef, GPSLongitude and
|
|
4833
|
+
GPSLongitudeRef. This tag may be written using the same coordinate
|
|
4834
|
+
format as provided by Google Maps when right-clicking on a location
|
|
4835
|
+
},
|
|
4824
4836
|
ValueConv => '(length($val[0]) or length($val[1])) ? "$val[0] $val[1]" : undef',
|
|
4825
4837
|
PrintConv => '"$prt[0], $prt[1]"',
|
|
4826
4838
|
},
|
|
@@ -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.19';
|
|
28
28
|
|
|
29
29
|
sub ProcessFLIR($$;$);
|
|
30
30
|
sub ProcessFLIRText($$$);
|
|
@@ -99,7 +99,7 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
|
|
|
99
99
|
NOTES => q{
|
|
100
100
|
Information extracted from FLIR FFF images and the APP1 FLIR segment of JPEG
|
|
101
101
|
images. These tags may also be extracted from the first frame of an FLIR
|
|
102
|
-
SEQ file.
|
|
102
|
+
SEQ file, or all frames if the ExtractEmbedded option is used.
|
|
103
103
|
},
|
|
104
104
|
"_header" => {
|
|
105
105
|
Name => 'FFFHeader',
|
|
@@ -1457,6 +1457,7 @@ sub ProcessFLIR($$;$)
|
|
|
1457
1457
|
my $raf = $$dirInfo{RAF} || new File::RandomAccess($$dirInfo{DataPt});
|
|
1458
1458
|
my $verbose = $et->Options('Verbose');
|
|
1459
1459
|
my $out = $et->Options('TextOut');
|
|
1460
|
+
my $base = $raf->Tell();
|
|
1460
1461
|
my ($i, $hdr, $buff, $rec);
|
|
1461
1462
|
|
|
1462
1463
|
# read and verify FFF header
|
|
@@ -1485,15 +1486,18 @@ sub ProcessFLIR($$;$)
|
|
|
1485
1486
|
my $ver = Get32u(\$hdr, 0x14);
|
|
1486
1487
|
last if $ver >= 100 and $ver < 200; # (have seen 100 and 101 - PH)
|
|
1487
1488
|
ToggleByteOrder();
|
|
1488
|
-
|
|
1489
|
+
next unless $i;
|
|
1490
|
+
return 0 if $$et{DOC_NUM};
|
|
1491
|
+
$et->Warn("Unsupported FLIR $type version");
|
|
1492
|
+
return 1;
|
|
1489
1493
|
}
|
|
1490
1494
|
|
|
1491
1495
|
# read the FLIR record directory
|
|
1492
1496
|
my $pos = Get32u(\$hdr, 0x18);
|
|
1493
1497
|
my $num = Get32u(\$hdr, 0x1c);
|
|
1494
|
-
unless ($raf->Seek($pos) and $raf->Read($buff, $num * 0x20) == $num * 0x20) {
|
|
1498
|
+
unless ($raf->Seek($base+$pos) and $raf->Read($buff, $num * 0x20) == $num * 0x20) {
|
|
1495
1499
|
$et->Warn('Truncated FLIR FFF directory');
|
|
1496
|
-
return 1;
|
|
1500
|
+
return $$et{DOC_NUM} ? 0 : 1;
|
|
1497
1501
|
}
|
|
1498
1502
|
|
|
1499
1503
|
unless ($tagTablePtr) {
|
|
@@ -1504,6 +1508,7 @@ sub ProcessFLIR($$;$)
|
|
|
1504
1508
|
# process the header data
|
|
1505
1509
|
$et->HandleTag($tagTablePtr, '_header', $hdr);
|
|
1506
1510
|
|
|
1511
|
+
my $success = 1;
|
|
1507
1512
|
my $oldIndent = $$et{INDENT};
|
|
1508
1513
|
$$et{INDENT} .= '| ';
|
|
1509
1514
|
$et->VerboseDir($type, $num);
|
|
@@ -1533,12 +1538,22 @@ sub ProcessFLIR($$;$)
|
|
|
1533
1538
|
$verbose and printf $out "%s%d) FLIR Record 0x%.2x, offset 0x%.4x, length 0x%.4x\n",
|
|
1534
1539
|
$$et{INDENT}, $i, $recType, $recPos, $recLen;
|
|
1535
1540
|
|
|
1536
|
-
|
|
1537
|
-
|
|
1541
|
+
# skip RawData records for embedded documents
|
|
1542
|
+
if ($recType == 1 and $$et{DOC_NUM}) {
|
|
1543
|
+
$raf->Seek($base+$recPos+$recLen) or $success = 0, last;
|
|
1544
|
+
next;
|
|
1545
|
+
}
|
|
1546
|
+
unless ($raf->Seek($base+$recPos) and $raf->Read($rec, $recLen) == $recLen) {
|
|
1547
|
+
if ($$et{DOC_NUM}) {
|
|
1548
|
+
$success = 0; # abort processing more documents
|
|
1549
|
+
} else {
|
|
1550
|
+
$et->Warn('Invalid FLIR record');
|
|
1551
|
+
}
|
|
1538
1552
|
last;
|
|
1539
1553
|
}
|
|
1540
1554
|
if ($$tagTablePtr{$recType}) {
|
|
1541
1555
|
$et->HandleTag($tagTablePtr, $recType, undef,
|
|
1556
|
+
Base => $base,
|
|
1542
1557
|
DataPt => \$rec,
|
|
1543
1558
|
DataPos => $recPos,
|
|
1544
1559
|
Start => 0,
|
|
@@ -1550,7 +1565,17 @@ sub ProcessFLIR($$;$)
|
|
|
1550
1565
|
}
|
|
1551
1566
|
delete $$et{SET_GROUP0};
|
|
1552
1567
|
$$et{INDENT} = $oldIndent;
|
|
1553
|
-
|
|
1568
|
+
|
|
1569
|
+
# extract information from subsequent frames in SEQ file if ExtractEmbedded is used
|
|
1570
|
+
if ($$dirInfo{RAF} and $et->Options('ExtractEmbedded') and not $$et{DOC_NUM}) {
|
|
1571
|
+
for (;;) {
|
|
1572
|
+
$$et{DOC_NUM} = $$et{DOC_COUNT} + 1;
|
|
1573
|
+
last unless ProcessFLIR($et, $dirInfo, $tagTablePtr);
|
|
1574
|
+
# (DOC_COUNT will be incremented automatically if we extracted any tags)
|
|
1575
|
+
}
|
|
1576
|
+
delete $$et{DOC_NUM};
|
|
1577
|
+
}
|
|
1578
|
+
return $success;
|
|
1554
1579
|
}
|
|
1555
1580
|
|
|
1556
1581
|
#------------------------------------------------------------------------------
|
|
@@ -20,7 +20,7 @@ use strict;
|
|
|
20
20
|
use vars qw($VERSION);
|
|
21
21
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
22
22
|
|
|
23
|
-
$VERSION = '1.
|
|
23
|
+
$VERSION = '1.19';
|
|
24
24
|
|
|
25
25
|
# road map of directory locations in GIF images
|
|
26
26
|
my %gifMap = (
|
|
@@ -54,6 +54,7 @@ my %gifMap = (
|
|
|
54
54
|
Extensions => { # (for documentation only)
|
|
55
55
|
SubDirectory => { TagTable => 'Image::ExifTool::GIF::Extensions' },
|
|
56
56
|
},
|
|
57
|
+
TransparentColor => { },
|
|
57
58
|
);
|
|
58
59
|
|
|
59
60
|
# GIF89a application extensions:
|
|
@@ -475,6 +476,9 @@ Block:
|
|
|
475
476
|
my $delay = Get16u(\$buff, 1);
|
|
476
477
|
$delayTime += $delay;
|
|
477
478
|
$verbose and printf $out "Graphic Control: delay=%.2f\n", $delay / 100;
|
|
479
|
+
# get transparent colour
|
|
480
|
+
my $bits = Get8u(\$buff, 0);
|
|
481
|
+
$et->HandleTag($tagTablePtr, 'TransparentColor', Get8u(\$buff,3)) if $bits & 0x01;
|
|
478
482
|
$raf->Seek(-$length, 1) or last;
|
|
479
483
|
|
|
480
484
|
} elsif ($a == 0x01 and $length == 12) { # plain text extension
|
|
@@ -137,22 +137,26 @@ my %coordConv = (
|
|
|
137
137
|
my ($v, $et) = @_;
|
|
138
138
|
$v = $et->TimeNow() if lc($v) eq 'now';
|
|
139
139
|
my @tz;
|
|
140
|
-
if ($v =~ s/([-+])(
|
|
140
|
+
if ($v =~ s/([-+])(\d{1,2}):?(\d{2})\s*(DST)?$//i) { # remove timezone
|
|
141
141
|
my $s = $1 eq '-' ? 1 : -1; # opposite sign to convert back to UTC
|
|
142
142
|
my $t = $2;
|
|
143
|
-
@tz = ($s*$
|
|
143
|
+
@tz = ($s*$2, $s*$3);
|
|
144
144
|
}
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
# (note: we must allow '.' as a time separator, eg. '10.30.00', with is tricky due to decimal seconds)
|
|
146
|
+
# YYYYmmddHHMMSS[.ss] format
|
|
147
|
+
my @a = ($v =~ /^[^\d]*\d{4}[^\d]*\d{1,2}[^\d]*\d{1,2}[^\d]*(\d{1,2})[^\d]*(\d{2})[^\d]*(\d{2}(?:\.\d+)?)[^\d]*$/);
|
|
148
|
+
# HHMMSS[.ss] format
|
|
149
|
+
@a or @a = ($v =~ /^[^\d]*(\d{1,2})[^\d]*(\d{2})[^\d]*(\d{2}(?:\.\d+)?)[^\d]*$/);
|
|
150
|
+
@a or warn('Invalid time (use HH:MM:SS[.ss][+/-HH:MM|Z])'), return undef;
|
|
147
151
|
if (@tz) {
|
|
148
152
|
# adjust to UTC
|
|
149
|
-
$a[
|
|
150
|
-
$a[
|
|
151
|
-
while ($a[
|
|
152
|
-
while ($a[
|
|
153
|
-
$a[
|
|
153
|
+
$a[1] += $tz[1];
|
|
154
|
+
$a[0] += $tz[0];
|
|
155
|
+
while ($a[1] >= 60) { $a[1] -= 60; ++$a[0] }
|
|
156
|
+
while ($a[1] < 0) { $a[1] += 60; --$a[0] }
|
|
157
|
+
$a[0] = ($a[0] + 24) % 24;
|
|
154
158
|
}
|
|
155
|
-
return
|
|
159
|
+
return join(':', @a);
|
|
156
160
|
},
|
|
157
161
|
},
|
|
158
162
|
0x0008 => {
|