exiftool_vendored 12.33.0 → 12.37.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +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 => {
|