exiftool_vendored 12.42.0 → 12.50.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 +189 -6
- data/bin/MANIFEST +12 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +45 -44
- data/bin/config_files/acdsee.config +2 -1
- data/bin/config_files/frameCount.config +56 -0
- data/bin/config_files/tiff_version.config +1 -1
- data/bin/exiftool +113 -95
- data/bin/fmt_files/gpx.fmt +3 -0
- data/bin/fmt_files/gpx_wpt.fmt +3 -0
- data/bin/lib/Image/ExifTool/Apple.pm +16 -3
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +23 -12
- data/bin/lib/Image/ExifTool/Canon.pm +66 -37
- data/bin/lib/Image/ExifTool/CanonRaw.pm +8 -1
- data/bin/lib/Image/ExifTool/CanonVRD.pm +7 -8
- data/bin/lib/Image/ExifTool/DJI.pm +2 -1
- data/bin/lib/Image/ExifTool/DarwinCore.pm +13 -1
- data/bin/lib/Image/ExifTool/EXE.pm +9 -1
- data/bin/lib/Image/ExifTool/Exif.pm +17 -12
- data/bin/lib/Image/ExifTool/FLAC.pm +17 -3
- data/bin/lib/Image/ExifTool/FLIR.pm +4 -3
- data/bin/lib/Image/ExifTool/FlashPix.pm +26 -3
- data/bin/lib/Image/ExifTool/FujiFilm.pm +51 -4
- data/bin/lib/Image/ExifTool/GPS.pm +21 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +25 -5
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +3 -2
- data/bin/lib/Image/ExifTool/ICO.pm +143 -0
- data/bin/lib/Image/ExifTool/ID3.pm +6 -6
- data/bin/lib/Image/ExifTool/IPTC.pm +5 -1
- data/bin/lib/Image/ExifTool/LNK.pm +5 -2
- data/bin/lib/Image/ExifTool/M2TS.pm +98 -8
- data/bin/lib/Image/ExifTool/MIE.pm +9 -3
- data/bin/lib/Image/ExifTool/MISB.pm +494 -0
- data/bin/lib/Image/ExifTool/MakerNotes.pm +3 -1
- data/bin/lib/Image/ExifTool/Matroska.pm +24 -16
- data/bin/lib/Image/ExifTool/Motorola.pm +8 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +288 -122
- data/bin/lib/Image/ExifTool/NikonSettings.pm +5 -3
- data/bin/lib/Image/ExifTool/Olympus.pm +3 -2
- data/bin/lib/Image/ExifTool/Panasonic.pm +21 -4
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +25 -5
- data/bin/lib/Image/ExifTool/Parrot.pm +96 -2
- data/bin/lib/Image/ExifTool/Pentax.pm +7 -2
- data/bin/lib/Image/ExifTool/Photoshop.pm +29 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +163 -13
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +119 -13
- data/bin/lib/Image/ExifTool/README +13 -3
- data/bin/lib/Image/ExifTool/RIFF.pm +106 -9
- data/bin/lib/Image/ExifTool/Samsung.pm +2 -2
- data/bin/lib/Image/ExifTool/Sigma.pm +27 -1
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +37 -13
- data/bin/lib/Image/ExifTool/Sony.pm +71 -43
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +3 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4737 -4517
- data/bin/lib/Image/ExifTool/TagNames.pod +1837 -1417
- data/bin/lib/Image/ExifTool/Text.pm +3 -4
- data/bin/lib/Image/ExifTool/Torrent.pm +2 -3
- data/bin/lib/Image/ExifTool/Validate.pm +3 -3
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +7 -0
- data/bin/lib/Image/ExifTool/WriteExif.pl +100 -23
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +2 -6
- data/bin/lib/Image/ExifTool/WritePhotoshop.pl +5 -5
- data/bin/lib/Image/ExifTool/WriteRIFF.pl +359 -0
- data/bin/lib/Image/ExifTool/Writer.pl +13 -5
- data/bin/lib/Image/ExifTool/XMP.pm +78 -59
- data/bin/lib/Image/ExifTool/XMP2.pl +19 -4
- data/bin/lib/Image/ExifTool.pm +111 -24
- data/bin/lib/Image/ExifTool.pod +83 -69
- data/bin/perl-Image-ExifTool.spec +43 -43
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +9 -4
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
88
88
|
sub ProcessExifInfo($$$);
|
89
89
|
sub SwapWords($);
|
90
90
|
|
91
|
-
$VERSION = '4.
|
91
|
+
$VERSION = '4.63';
|
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)
|
@@ -480,6 +480,7 @@ $VERSION = '4.58';
|
|
480
480
|
255 => 'Sigma 24-105mm f/4 DG OS HSM | A or Other Lens', #50
|
481
481
|
255.1 => 'Sigma 180mm f/2.8 EX DG OS HSM APO Macro', #50
|
482
482
|
255.2 => 'Tamron SP 70-200mm f/2.8 Di VC USD', #exiv issue 1202 (A009)
|
483
|
+
255.3 => 'Yongnuo YN 50mm f/1.8', #50
|
483
484
|
368 => 'Sigma 14-24mm f/2.8 DG HSM | A or other Sigma Lens', #IB (A018)
|
484
485
|
368.1 => 'Sigma 20mm f/1.4 DG HSM | A', #50 (newer firmware)
|
485
486
|
368.2 => 'Sigma 50mm f/1.4 DG HSM | A', #50
|
@@ -493,6 +494,7 @@ $VERSION = '4.58';
|
|
493
494
|
'368.10' => 'Sigma 35mm f/1.4 DG HSM | A', #PH (012)
|
494
495
|
'368.11' => 'Sigma 70mm f/2.8 DG Macro', #IB (A018)
|
495
496
|
'368.12' => 'Sigma 18-35mm f/1.8 DC HSM | A', #50
|
497
|
+
'368.13' => 'Sigma 24-105mm f/4 DG OS HSM | A', #forum3833
|
496
498
|
# Note: LensType 488 (0x1e8) is reported as 232 (0xe8) in 7D CameraSettings
|
497
499
|
488 => 'Canon EF-S 15-85mm f/3.5-5.6 IS USM', #PH
|
498
500
|
489 => 'Canon EF 70-300mm f/4-5.6L IS USM', #Gerald Kapounek
|
@@ -597,21 +599,30 @@ $VERSION = '4.58';
|
|
597
599
|
'61182.19' => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF1.4x',
|
598
600
|
'61182.20' => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF2x',
|
599
601
|
'61182.21' => 'Canon RF 70-200mm F4L IS USM', #42
|
600
|
-
'61182.22' => 'Canon RF
|
601
|
-
'61182.23' => 'Canon RF
|
602
|
-
'61182.24' => 'Canon RF
|
603
|
-
'61182.25' => 'Canon RF
|
604
|
-
'61182.26' => 'Canon RF 100-400mm F5.6-8 IS USM
|
605
|
-
'61182.27' => 'Canon RF
|
606
|
-
'61182.28' => 'Canon RF 400mm
|
607
|
-
'61182.29' => 'Canon RF
|
608
|
-
'61182.30' => 'Canon RF
|
609
|
-
'61182.31' => 'Canon RF
|
610
|
-
|
611
|
-
'61182.
|
612
|
-
'61182.
|
613
|
-
'61182.
|
614
|
-
'61182.
|
602
|
+
'61182.22' => 'Canon RF 100mm F2.8L MACRO IS USM', #42
|
603
|
+
'61182.23' => 'Canon RF 50mm F1.8 STM', #42
|
604
|
+
'61182.24' => 'Canon RF 14-35mm F4L IS USM', #IB
|
605
|
+
'61182.25' => 'Canon RF-S 18-45mm F4.5-6.3 IS STM', #42
|
606
|
+
'61182.26' => 'Canon RF 100-400mm F5.6-8 IS USM', #42
|
607
|
+
'61182.27' => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42
|
608
|
+
'61182.28' => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42
|
609
|
+
'61182.29' => 'Canon RF-S 18-150mm F3.5-6.3 IS STM', #42
|
610
|
+
'61182.30' => 'Canon RF 24mm F1.8 MACRO IS STM', #42
|
611
|
+
'61182.31' => 'Canon RF 16mm F2.8 STM', #42
|
612
|
+
'61182.32' => 'Canon RF 400mm F2.8L IS USM', #IB
|
613
|
+
'61182.33' => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
|
614
|
+
'61182.34' => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
|
615
|
+
'61182.35' => 'Canon RF 600mm F4L IS USM', #GiaZopatti
|
616
|
+
'61182.36' => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
|
617
|
+
'61182.37' => 'Canon RF 800mm F5.6L IS USM', #42
|
618
|
+
'61182.38' => 'Canon RF 800mm F5.6L IS USM + RF1.4x', #42
|
619
|
+
'61182.39' => 'Canon RF 800mm F5.6L IS USM + RF2x', #42
|
620
|
+
'61182.40' => 'Canon RF 1200mm F8L IS USM', #42
|
621
|
+
'61182.41' => 'Canon RF 1200mm F8L IS USM + RF1.4x', #42
|
622
|
+
'61182.42' => 'Canon RF 1200mm F8L IS USM + RF2x', #42
|
623
|
+
'61182.43' => 'Canon RF 135mm F1.8 L IS USM', #42
|
624
|
+
# we need the RFLensType values for the following...
|
625
|
+
'61182.44' => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH (NC)
|
615
626
|
65535 => 'n/a',
|
616
627
|
);
|
617
628
|
|
@@ -968,8 +979,11 @@ $VERSION = '4.58';
|
|
968
979
|
0x80000437 => 'EOS 90D', #IB
|
969
980
|
0x80000450 => 'EOS R3', #42
|
970
981
|
0x80000453 => 'EOS R6', #PH
|
982
|
+
0x80000464 => 'EOS R7', #42
|
983
|
+
0x80000465 => 'EOS R10', #42
|
971
984
|
0x80000467 => 'PowerShot ZOOM',
|
972
985
|
0x80000468 => 'EOS M50 Mark II / Kiss M2', #IB
|
986
|
+
0x80000481 => 'EOS R6 Mark II', #42
|
973
987
|
0x80000520 => 'EOS D2000C', #IB
|
974
988
|
0x80000560 => 'EOS D6000C', #PH (guess)
|
975
989
|
);
|
@@ -1932,7 +1946,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
1932
1946
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData10' },
|
1933
1947
|
},
|
1934
1948
|
{ # (int16u[3973]) - R3 ref IB
|
1935
|
-
Condition => '$count == 3973',
|
1949
|
+
Condition => '$count == 3973 or $count == 3778',
|
1936
1950
|
Name => 'ColorData11',
|
1937
1951
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData11' },
|
1938
1952
|
},
|
@@ -6365,10 +6379,11 @@ my %ciMaxFocal = (
|
|
6365
6379
|
1 => {
|
6366
6380
|
Name => 'TimeZone',
|
6367
6381
|
PrintConv => 'Image::ExifTool::TimeZoneString($val)',
|
6368
|
-
PrintConvInv =>
|
6369
|
-
|
6370
|
-
$val =~
|
6371
|
-
|
6382
|
+
PrintConvInv => q{
|
6383
|
+
$val =~ /Z$/ and return 0;
|
6384
|
+
$val =~ /([-+])(\d{1,2}):?(\d{2})$/ and return $1 . ($2 * 60 + $3);
|
6385
|
+
$val =~ /^(\d{2})(\d{2})$/ and return $1 * 60 + $2;
|
6386
|
+
return undef;
|
6372
6387
|
},
|
6373
6388
|
},
|
6374
6389
|
2 => {
|
@@ -6530,23 +6545,23 @@ my %ciMaxFocal = (
|
|
6530
6545
|
0x02 => 'FacesDetected',
|
6531
6546
|
);
|
6532
6547
|
|
6533
|
-
# G9 white balance information (MakerNotes tag 0x29) (ref IB)
|
6548
|
+
# G9 white balance information (MakerNotes tag 0x29) (ref IB, changed ref forum13640)
|
6534
6549
|
%Image::ExifTool::Canon::WBInfo = (
|
6535
6550
|
%binaryDataAttrs,
|
6536
6551
|
NOTES => 'WB tags for the Canon G9.',
|
6537
6552
|
FORMAT => 'int32u',
|
6538
6553
|
FIRST_ENTRY => 1,
|
6539
6554
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
6540
|
-
0x02 => { Name => '
|
6541
|
-
0x0a => { Name => '
|
6542
|
-
0x12 => { Name => '
|
6543
|
-
0x1a => { Name => '
|
6544
|
-
0x22 => { Name => '
|
6545
|
-
0x2a => { Name => '
|
6546
|
-
0x32 => { Name => '
|
6547
|
-
0x3a => { Name => '
|
6548
|
-
0x42 => { Name => '
|
6549
|
-
0x4a => { Name => '
|
6555
|
+
0x02 => { Name => 'WB_GRBGLevelsAuto', Format => 'int32s[4]' },
|
6556
|
+
0x0a => { Name => 'WB_GRBGLevelsDaylight', Format => 'int32s[4]' },
|
6557
|
+
0x12 => { Name => 'WB_GRBGLevelsCloudy', Format => 'int32s[4]' },
|
6558
|
+
0x1a => { Name => 'WB_GRBGLevelsTungsten', Format => 'int32s[4]' },
|
6559
|
+
0x22 => { Name => 'WB_GRBGLevelsFluorescent', Format => 'int32s[4]' },
|
6560
|
+
0x2a => { Name => 'WB_GRBGLevelsFluorHigh', Format => 'int32s[4]' },
|
6561
|
+
0x32 => { Name => 'WB_GRBGLevelsFlash', Format => 'int32s[4]' },
|
6562
|
+
0x3a => { Name => 'WB_GRBGLevelsUnderwater', Format => 'int32s[4]' },
|
6563
|
+
0x42 => { Name => 'WB_GRBGLevelsCustom1', Format => 'int32s[4]' },
|
6564
|
+
0x4a => { Name => 'WB_GRBGLevelsCustom2', Format => 'int32s[4]' },
|
6550
6565
|
);
|
6551
6566
|
|
6552
6567
|
# yet more face detect information (MakerNotes tag 0x2f) - PH (G12)
|
@@ -6803,17 +6818,28 @@ my %ciMaxFocal = (
|
|
6803
6818
|
276 => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF1.4x',
|
6804
6819
|
277 => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF2x',
|
6805
6820
|
278 => 'Canon RF 70-200mm F4L IS USM', #42
|
6821
|
+
279 => 'Canon RF 100mm F2.8L MACRO IS USM', #42
|
6806
6822
|
280 => 'Canon RF 50mm F1.8 STM', #42
|
6807
6823
|
281 => 'Canon RF 14-35mm F4L IS USM', #42/IB
|
6824
|
+
282 => 'Canon RF-S 18-45mm F4.5-6.3 IS STM', #42
|
6808
6825
|
283 => 'Canon RF 100-400mm F5.6-8 IS USM', #42
|
6809
|
-
284 => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42
|
6810
|
-
285 => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42
|
6826
|
+
284 => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42
|
6827
|
+
285 => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42
|
6828
|
+
286 => 'Canon RF-S 18-150mm F3.5-6.3 IS STM', #42
|
6829
|
+
287 => 'Canon RF 24mm F1.8 MACRO IS STM', #42
|
6811
6830
|
288 => 'Canon RF 16mm F2.8 STM', #42
|
6812
6831
|
289 => 'Canon RF 400mm F2.8L IS USM', #IB
|
6813
6832
|
290 => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
|
6814
6833
|
291 => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
|
6815
6834
|
292 => 'Canon RF 600mm F4L IS USM', #GiaZopatti
|
6816
|
-
|
6835
|
+
295 => 'Canon RF 800mm F5.6L IS USM', #42
|
6836
|
+
296 => 'Canon RF 800mm F5.6L IS USM + RF1.4x', #42
|
6837
|
+
297 => 'Canon RF 800mm F5.6L IS USM + RF2x', #42
|
6838
|
+
298 => 'Canon RF 1200mm F8L IS USM', #42
|
6839
|
+
299 => 'Canon RF 1200mm F8L IS USM + RF1.4x', #42
|
6840
|
+
300 => 'Canon RF 1200mm F8L IS USM + RF2x', #42
|
6841
|
+
302 => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
|
6842
|
+
303 => 'Canon RF 135mm F1.8 L IS USM', #42
|
6817
6843
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
6818
6844
|
},
|
6819
6845
|
},
|
@@ -6858,6 +6884,7 @@ my %ciMaxFocal = (
|
|
6858
6884
|
8 => '4:5',
|
6859
6885
|
12 => '3:2 (APS-H crop)', #IB
|
6860
6886
|
13 => '3:2 (APS-C crop)', #IB
|
6887
|
+
258 => '4:3 crop', #PH (NC)
|
6861
6888
|
},
|
6862
6889
|
},
|
6863
6890
|
# (could use better names for these, or the Crop tags above, or both)
|
@@ -8310,7 +8337,7 @@ my %ciMaxFocal = (
|
|
8310
8337
|
# Color data (MakerNotes tag 0x4001, count=3973, ref IB)
|
8311
8338
|
%Image::ExifTool::Canon::ColorData11 = (
|
8312
8339
|
%binaryDataAttrs,
|
8313
|
-
NOTES => 'These tags are used by the EOS R3',
|
8340
|
+
NOTES => 'These tags are used by the EOS R3, R7 and R6mkII',
|
8314
8341
|
FORMAT => 'int16s',
|
8315
8342
|
FIRST_ENTRY => 0,
|
8316
8343
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
@@ -8322,6 +8349,7 @@ my %ciMaxFocal = (
|
|
8322
8349
|
RawConv => '$$self{ColorDataVersion} = $val',
|
8323
8350
|
PrintConv => {
|
8324
8351
|
34 => '34 (R3)', #IB
|
8352
|
+
48 => '48 (R7, R10, R6 Mark II)', #IB
|
8325
8353
|
},
|
8326
8354
|
},
|
8327
8355
|
0x69 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
|
@@ -9387,8 +9415,9 @@ my %filterConv = (
|
|
9387
9415
|
# numbers from the previous image, so we need special logic
|
9388
9416
|
# to handle the FileIndex wrap properly)
|
9389
9417
|
$val[1] == 10000 and $val[1] = 1, ++$val[0];
|
9390
|
-
return sprintf("%.3d
|
9418
|
+
return sprintf("%.3d%.4d",@val);
|
9391
9419
|
},
|
9420
|
+
PrintConv => '$_=$val;s/(\d+)(\d{4})/$1-$2/;$_',
|
9392
9421
|
},
|
9393
9422
|
);
|
9394
9423
|
|
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
21
21
|
use Image::ExifTool::Exif;
|
22
22
|
use Image::ExifTool::Canon;
|
23
23
|
|
24
|
-
$VERSION = '1.
|
24
|
+
$VERSION = '1.59';
|
25
25
|
|
26
26
|
sub WriteCRW($$);
|
27
27
|
sub ProcessCanonRaw($$$);
|
@@ -625,6 +625,13 @@ sub ProcessCanonRaw($$$)
|
|
625
625
|
$raf->Seek($blockStart+$blockSize-4, 0) or return 0;
|
626
626
|
$raf->Read($buff, 4) == 4 or return 0;
|
627
627
|
my $dirOffset = Get32u(\$buff,0) + $blockStart;
|
628
|
+
# avoid infinite recursion
|
629
|
+
$$et{ProcessedCanonRaw} or $$et{ProcessedCanonRaw} = { };
|
630
|
+
if ($$et{ProcessedCanonRaw}{$dirOffset}) {
|
631
|
+
$et->Warn("Not processing double-referenced $$dirInfo{DirName} directory");
|
632
|
+
return 0;
|
633
|
+
}
|
634
|
+
$$et{ProcessedCanonRaw}{$dirOffset} = 1;
|
628
635
|
$raf->Seek($dirOffset, 0) or return 0;
|
629
636
|
$raf->Read($buff, 2) == 2 or return 0;
|
630
637
|
my $entries = Get16u(\$buff,0); # get number of entries in directory
|
@@ -23,7 +23,7 @@ use vars qw($VERSION);
|
|
23
23
|
use Image::ExifTool qw(:DataAccess :Utils);
|
24
24
|
use Image::ExifTool::Canon;
|
25
25
|
|
26
|
-
$VERSION = '1.
|
26
|
+
$VERSION = '1.34';
|
27
27
|
|
28
28
|
sub ProcessCanonVRD($$;$);
|
29
29
|
sub WriteCanonVRD($$;$);
|
@@ -2046,17 +2046,16 @@ sub ProcessCanonVRD($$;$)
|
|
2046
2046
|
return 0;
|
2047
2047
|
}
|
2048
2048
|
}
|
2049
|
-
# exit quickly if writing and no CanonVRD tags are being edited
|
2050
|
-
if ($outfile and not exists $$et{EDIT_DIRS}{CanonVRD}) {
|
2051
|
-
print $out "$$et{INDENT} [nothing changed]\n" if $verbose;
|
2052
|
-
return 1 if $outfile eq $dataPt;
|
2053
|
-
return Write($outfile, $$dataPt) ? 1 : -1;
|
2054
|
-
}
|
2055
|
-
|
2056
2049
|
my $vrdType = 'VRD';
|
2057
2050
|
|
2058
2051
|
if ($outfile) {
|
2059
2052
|
$verbose and not $created and print $out " Rewriting CanonVRD trailer\n";
|
2053
|
+
# exit quickly if writing and no CanonVRD tags are being edited
|
2054
|
+
unless (exists $$et{EDIT_DIRS}{CanonVRD}) {
|
2055
|
+
print $out "$$et{INDENT} [nothing changed in CanonVRD]\n" if $verbose;
|
2056
|
+
return 1 if $outfile eq $dataPt;
|
2057
|
+
return Write($outfile, $$dataPt) ? 1 : -1;
|
2058
|
+
}
|
2060
2059
|
# delete CanonVRD information if specified
|
2061
2060
|
my $doDel = $$et{DEL_GROUP}{CanonVRD};
|
2062
2061
|
unless ($doDel) {
|
@@ -16,7 +16,7 @@ use Image::ExifTool::Exif;
|
|
16
16
|
use Image::ExifTool::XMP;
|
17
17
|
use Image::ExifTool::GPS;
|
18
18
|
|
19
|
-
$VERSION = '1.
|
19
|
+
$VERSION = '1.06';
|
20
20
|
|
21
21
|
sub ProcessDJIInfo($$$);
|
22
22
|
|
@@ -176,6 +176,7 @@ sub ProcessDJIInfo($$$)
|
|
176
176
|
}
|
177
177
|
while ($$dataPt =~ /\G\[(.*?)\](?=(\[|$))/sg) {
|
178
178
|
my ($tag, $val) = split /:/, $1, 2;
|
179
|
+
next unless defined $tag and defined $val;
|
179
180
|
if ($val =~ /^([\x20-\x7f]+)\0*$/) {
|
180
181
|
$val = $1;
|
181
182
|
} else {
|
@@ -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.07';
|
19
19
|
|
20
20
|
my %dateTimeInfo = (
|
21
21
|
# NOTE: Do NOT put "Groups" here because Groups hash must not be common!
|
@@ -138,6 +138,9 @@ my %event = (
|
|
138
138
|
identificationVerificationStatus => { },
|
139
139
|
identifiedBy => { },
|
140
140
|
typeStatus => { },
|
141
|
+
# new, ref forum13707
|
142
|
+
identifiedByID => { },
|
143
|
+
verbatimIdentification => { },
|
141
144
|
},
|
142
145
|
},
|
143
146
|
LivingSpecimen => { Struct => \%materialSample },
|
@@ -189,6 +192,11 @@ my %event = (
|
|
189
192
|
recordNumber => { },
|
190
193
|
reproductiveCondition => { },
|
191
194
|
sex => { },
|
195
|
+
# new, ref forum13707
|
196
|
+
degreeOfEstablishment => { },
|
197
|
+
georeferenceVerificationStatus => { },
|
198
|
+
pathway => { },
|
199
|
+
recordedByID => { },
|
192
200
|
},
|
193
201
|
},
|
194
202
|
OccurrenceOccurrenceDetails => { Name => 'OccurrenceDetails', Flat => 1 },
|
@@ -242,6 +250,7 @@ my %event = (
|
|
242
250
|
relationshipRemarks => { },
|
243
251
|
resourceID => { },
|
244
252
|
resourceRelationshipID => { },
|
253
|
+
relationshipOfResourceID => { }, # new, ref forum13707
|
245
254
|
},
|
246
255
|
},
|
247
256
|
Taxon => {
|
@@ -255,6 +264,7 @@ my %event = (
|
|
255
264
|
genus => { },
|
256
265
|
higherClassification => { },
|
257
266
|
infraspecificEpithet => { },
|
267
|
+
cultivarEpithet => { }, # new, ref forum13707
|
258
268
|
kingdom => { },
|
259
269
|
nameAccordingTo => { },
|
260
270
|
nameAccordingToID => { },
|
@@ -338,6 +348,8 @@ my %event = (
|
|
338
348
|
verbatimLongitude => { },
|
339
349
|
verbatimSRS => { },
|
340
350
|
waterBody => { },
|
351
|
+
# new, ref forum13707
|
352
|
+
verticalDatum => { },
|
341
353
|
},
|
342
354
|
},
|
343
355
|
);
|
@@ -21,7 +21,7 @@ use strict;
|
|
21
21
|
use vars qw($VERSION);
|
22
22
|
use Image::ExifTool qw(:DataAccess :Utils);
|
23
23
|
|
24
|
-
$VERSION = '1.
|
24
|
+
$VERSION = '1.18';
|
25
25
|
|
26
26
|
sub ProcessPEResources($$);
|
27
27
|
sub ProcessPEVersion($$);
|
@@ -1233,6 +1233,14 @@ sub ProcessEXE($$)
|
|
1233
1233
|
$tagTablePtr = GetTagTable('Image::ExifTool::EXE::MachO');
|
1234
1234
|
if ($1 eq "\xca\xfe\xba\xbe") {
|
1235
1235
|
SetByteOrder('MM');
|
1236
|
+
my $ver = Get32u(\$buff, 4);
|
1237
|
+
# Java bytecode .class files have the same magic number, so we need to look deeper
|
1238
|
+
# (ref https://github.com/file/file/blob/master/magic/Magdir/cafebabe#L6-L15)
|
1239
|
+
if ($ver > 30) {
|
1240
|
+
# this is Java bytecode
|
1241
|
+
$et->SetFileType('Java bytecode', 'application/java-byte-code', 'class');
|
1242
|
+
return 1;
|
1243
|
+
}
|
1236
1244
|
$et->SetFileType('Mach-O fat binary executable', undef, '');
|
1237
1245
|
return 1 if $fast3;
|
1238
1246
|
my $count = Get32u(\$buff, 4); # get architecture count
|
@@ -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.42';
|
60
60
|
|
61
61
|
sub ProcessExif($$$);
|
62
62
|
sub WriteExif($$$);
|
@@ -1084,11 +1084,11 @@ my %opcodeInfo = (
|
|
1084
1084
|
{
|
1085
1085
|
Name => 'ThumbnailOffset',
|
1086
1086
|
Notes => q{
|
1087
|
-
|
1088
|
-
|
1089
|
-
|
1090
|
-
|
1091
|
-
OtherImageStart in everything else
|
1087
|
+
called JPEGInterchangeFormat in the specification, this is ThumbnailOffset
|
1088
|
+
in IFD1 of JPEG and some TIFF-based images, IFD0 of MRW images and AVI and
|
1089
|
+
MOV videos, and the SubIFD in IFD1 of SRW images; PreviewImageStart in
|
1090
|
+
MakerNotes and IFD0 of ARW and SR2 images; JpgFromRawStart in SubIFD of NEF
|
1091
|
+
images and IFD2 of PEF images; and OtherImageStart in everything else
|
1092
1092
|
},
|
1093
1093
|
# thumbnail is found in IFD1 of JPEG and TIFF images, and
|
1094
1094
|
# IFD0 of EXIF information in FujiFilm AVI (RIFF) and MOV videos
|
@@ -1225,6 +1225,7 @@ my %opcodeInfo = (
|
|
1225
1225
|
{
|
1226
1226
|
Name => 'ThumbnailLength',
|
1227
1227
|
Notes => q{
|
1228
|
+
called JPEGInterchangeFormatLength in the specification, this is
|
1228
1229
|
ThumbnailLength in IFD1 of JPEG and some TIFF-based images, IFD0 of MRW
|
1229
1230
|
images and AVI and MOV videos, and the SubIFD in IFD1 of SRW images;
|
1230
1231
|
PreviewImageLength in MakerNotes and IFD0 of ARW and SR2 images;
|
@@ -2080,6 +2081,7 @@ my %opcodeInfo = (
|
|
2080
2081
|
Groups => { 2 => 'Time' },
|
2081
2082
|
Notes => 'time zone for ModifyDate',
|
2082
2083
|
Writable => 'string',
|
2084
|
+
Shift => 'Time',
|
2083
2085
|
PrintConvInv => q{
|
2084
2086
|
return "+00:00" if $val =~ /\d{2}Z$/;
|
2085
2087
|
return sprintf("%s%.2d:%.2d",$1,$2,$3) if $val =~ /([-+])(\d{1,2}):(\d{2})/;
|
@@ -2091,6 +2093,7 @@ my %opcodeInfo = (
|
|
2091
2093
|
Groups => { 2 => 'Time' },
|
2092
2094
|
Notes => 'time zone for DateTimeOriginal',
|
2093
2095
|
Writable => 'string',
|
2096
|
+
Shift => 'Time',
|
2094
2097
|
PrintConvInv => q{
|
2095
2098
|
return "+00:00" if $val =~ /\d{2}Z$/;
|
2096
2099
|
return sprintf("%s%.2d:%.2d",$1,$2,$3) if $val =~ /([-+])(\d{1,2}):(\d{2})/;
|
@@ -2102,6 +2105,7 @@ my %opcodeInfo = (
|
|
2102
2105
|
Groups => { 2 => 'Time' },
|
2103
2106
|
Notes => 'time zone for CreateDate',
|
2104
2107
|
Writable => 'string',
|
2108
|
+
Shift => 'Time',
|
2105
2109
|
PrintConvInv => q{
|
2106
2110
|
return "+00:00" if $val =~ /\d{2}Z$/;
|
2107
2111
|
return sprintf("%s%.2d:%.2d",$1,$2,$3) if $val =~ /([-+])(\d{1,2}):(\d{2})/;
|
@@ -4080,7 +4084,7 @@ my %opcodeInfo = (
|
|
4080
4084
|
WriteGroup => 'SubIFD' #? (NC) Semantic Mask IFD (only for Validate)
|
4081
4085
|
},
|
4082
4086
|
0xcd30 => { # DNG 1.6
|
4083
|
-
Name => '
|
4087
|
+
Name => 'SemanticInstanceID',
|
4084
4088
|
# Writable => 'string',
|
4085
4089
|
WriteGroup => 'SubIFD' #? (NC) Semantic Mask IFD (only for Validate)
|
4086
4090
|
},
|
@@ -4842,10 +4846,10 @@ my %subSecConv = (
|
|
4842
4846
|
Writable => 1,
|
4843
4847
|
Protected => 1,
|
4844
4848
|
WriteAlso => {
|
4845
|
-
GPSLatitude => '$val =~ /(.*?)( ?[NS])?,/ ? $1 : undef',
|
4846
|
-
GPSLatitudeRef => '$val =~ /(-?)(.*?) ?([NS]?),/ ? ($3 || ($1 ? "S" : "N")) : undef',
|
4847
|
-
GPSLongitude => '$val =~ /, ?(.*?)( ?[EW]?)$/ ? $1 : undef',
|
4848
|
-
GPSLongitudeRef => '$val =~ /, ?(-?)(.*?) ?([EW]?)$/ ? ($3 || ($1 ? "W" : "E")) : undef',
|
4849
|
+
GPSLatitude => '(defined $val and $val =~ /(.*?)( ?[NS])?,/) ? $1 : undef',
|
4850
|
+
GPSLatitudeRef => '(defined $val and $val =~ /(-?)(.*?) ?([NS]?),/) ? ($3 || ($1 ? "S" : "N")) : undef',
|
4851
|
+
GPSLongitude => '(defined $val and $val =~ /, ?(.*?)( ?[EW]?)$/) ? $1 : undef',
|
4852
|
+
GPSLongitudeRef => '(defined $val and $val =~ /, ?(-?)(.*?) ?([EW]?)$/) ? ($3 || ($1 ? "W" : "E")) : undef',
|
4849
4853
|
},
|
4850
4854
|
PrintConvInv => q{
|
4851
4855
|
return undef unless $val =~ /(.*? ?[NS]?), ?(.*? ?[EW]?)$/;
|
@@ -6012,7 +6016,8 @@ sub ProcessExif($$$)
|
|
6012
6016
|
my $tagID = Get16u($dataPt, $entry);
|
6013
6017
|
my $format = Get16u($dataPt, $entry+2);
|
6014
6018
|
my $count = Get32u($dataPt, $entry+4);
|
6015
|
-
|
6019
|
+
# (Apple uses the BigTIFF format code 16 in the maker notes of their ProRaw DNG files)
|
6020
|
+
if (($format < 1 or $format > 13) and not ($format == 16 and $$et{Make} eq 'Apple' and $inMakerNotes)) {
|
6016
6021
|
if ($mapFmt and $$mapFmt{$format}) {
|
6017
6022
|
$format = $$mapFmt{$format};
|
6018
6023
|
} else {
|
@@ -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.09';
|
18
18
|
|
19
19
|
sub ProcessBitStream($$$);
|
20
20
|
|
@@ -29,7 +29,19 @@ sub ProcessBitStream($$$);
|
|
29
29
|
SubDirectory => { TagTable => 'Image::ExifTool::FLAC::StreamInfo' },
|
30
30
|
},
|
31
31
|
1 => { Name => 'Padding', Binary => 1, Unknown => 1 },
|
32
|
-
2 => {
|
32
|
+
2 => [{ # (see forum14064)
|
33
|
+
Name => 'Application_riff',
|
34
|
+
Condition => '$$valPt =~ /^riff(?!RIFF)/', # (all "riff" blocks but header)
|
35
|
+
SubDirectory => {
|
36
|
+
TagTable => 'Image::ExifTool::RIFF::Main',
|
37
|
+
ByteOrder => 'LittleEndian',
|
38
|
+
Start => 4,
|
39
|
+
},
|
40
|
+
},{
|
41
|
+
Name => 'ApplicationUnknown',
|
42
|
+
Binary => 1,
|
43
|
+
Unknown => 1,
|
44
|
+
}],
|
33
45
|
3 => { Name => 'SeekTable', Binary => 1, Unknown => 1 },
|
34
46
|
4 => {
|
35
47
|
Name => 'VorbisComment',
|
@@ -255,9 +267,11 @@ sub ProcessFLAC($$)
|
|
255
267
|
print $out "FLAC metadata block, type $tag:\n";
|
256
268
|
$et->VerboseDump(\$buff, DataPos => $raf->Tell() - $size);
|
257
269
|
}
|
258
|
-
$et->HandleTag($tagTablePtr, $tag,
|
270
|
+
$et->HandleTag($tagTablePtr, $tag, $buff,
|
259
271
|
DataPt => \$buff,
|
260
272
|
DataPos => $raf->Tell() - $size,
|
273
|
+
Start => 0,
|
274
|
+
Size => $size,
|
261
275
|
);
|
262
276
|
last if $last; # all done if is set
|
263
277
|
}
|
@@ -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.21';
|
28
28
|
|
29
29
|
sub ProcessFLIR($$;$);
|
30
30
|
sub ProcessFLIRText($$$);
|
@@ -99,7 +99,8 @@ 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, or all frames if the ExtractEmbedded option is used.
|
102
|
+
SEQ file, or all frames if the ExtractEmbedded option is used. Setting
|
103
|
+
ExtractEmbedded to 2 also the raw thermal data from all frames.
|
103
104
|
},
|
104
105
|
"_header" => {
|
105
106
|
Name => 'FFFHeader',
|
@@ -1551,7 +1552,7 @@ sub ProcessFLIR($$;$)
|
|
1551
1552
|
$$et{INDENT}, $i, $recType, $recPos, $recLen;
|
1552
1553
|
|
1553
1554
|
# skip RawData records for embedded documents
|
1554
|
-
if ($recType == 1 and $$et{DOC_NUM}) {
|
1555
|
+
if ($recType == 1 and $$et{DOC_NUM} and $et->Options('ExtractEmbedded') < 2) {
|
1555
1556
|
$raf->Seek($base+$recPos+$recLen) or $success = 0, last;
|
1556
1557
|
next;
|
1557
1558
|
}
|
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
21
21
|
use Image::ExifTool::Exif;
|
22
22
|
use Image::ExifTool::ASF; # for GetGUID()
|
23
23
|
|
24
|
-
$VERSION = '1.
|
24
|
+
$VERSION = '1.41';
|
25
25
|
|
26
26
|
sub ProcessFPX($$);
|
27
27
|
sub ProcessFPXR($$$);
|
@@ -298,6 +298,7 @@ my %fpxFileType = (
|
|
298
298
|
%Image::ExifTool::FlashPix::Main = (
|
299
299
|
PROCESS_PROC => \&ProcessFPXR,
|
300
300
|
GROUPS => { 2 => 'Image' },
|
301
|
+
VARS => { LONG_TAGS => 0 },
|
301
302
|
NOTES => q{
|
302
303
|
The FlashPix file format, introduced in 1996, was developed by Kodak,
|
303
304
|
Hewlett-Packard and Microsoft. Internally the FPX file structure mimics
|
@@ -467,6 +468,25 @@ my %fpxFileType = (
|
|
467
468
|
ByteOrder => 'BigEndian',
|
468
469
|
},
|
469
470
|
},
|
471
|
+
# recognize Autodesk Revit files by looking at BasicFileInfo
|
472
|
+
# (but don't yet support reading their metatdata)
|
473
|
+
BasicFileInfo => {
|
474
|
+
Name => 'BasicFileInfo',
|
475
|
+
Binary => 1,
|
476
|
+
RawConv => q{
|
477
|
+
$val =~ tr/\0//d; # brute force conversion to ASCII
|
478
|
+
if ($val =~ /\.(rfa|rft|rte|rvt)/) {
|
479
|
+
$self->OverrideFileType(uc($1), "application/$1", $1);
|
480
|
+
}
|
481
|
+
return $val;
|
482
|
+
},
|
483
|
+
},
|
484
|
+
IeImg => {
|
485
|
+
Name => 'EmbeddedImage',
|
486
|
+
Notes => 'embedded images in Scene7 vignette VNT files',
|
487
|
+
Groups => { 2 => 'Preview' },
|
488
|
+
Binary => 1,
|
489
|
+
},
|
470
490
|
);
|
471
491
|
|
472
492
|
# Summary Information properties
|
@@ -1318,7 +1338,9 @@ sub ConvertDTTM($)
|
|
1318
1338
|
my $hr = ($val >> 6) & 0x1f;
|
1319
1339
|
my $min = ($val & 0x3f);
|
1320
1340
|
$yr += 1900 if $val;
|
1321
|
-
|
1341
|
+
# ExifTool 12.48 dropped the "Z" on the time here because a test .doc
|
1342
|
+
# file written by Word 2011 on Mac certainly used local time here
|
1343
|
+
return sprintf("%.4d:%.2d:%.2d %.2d:%.2d:00",$yr,$mon,$day,$hr,$min);
|
1322
1344
|
}
|
1323
1345
|
|
1324
1346
|
#------------------------------------------------------------------------------
|
@@ -2242,7 +2264,8 @@ sub ProcessFPX($$)
|
|
2242
2264
|
# remove instance number or class ID from tag if necessary
|
2243
2265
|
$tagInfo = $et->GetTagInfo($tagTablePtr, $1) if
|
2244
2266
|
($tag =~ /(.*) \d{6}$/s and $$tagTablePtr{$1}) or
|
2245
|
-
($tag =~ /(.*)_[0-9a-f]{16}$/s and $$tagTablePtr{$1})
|
2267
|
+
($tag =~ /(.*)_[0-9a-f]{16}$/s and $$tagTablePtr{$1}) or
|
2268
|
+
($tag =~ /(.*)_[0-9]{4}$/s and $$tagTablePtr{$1}); # IeImg instances
|
2246
2269
|
}
|
2247
2270
|
|
2248
2271
|
my $lSib = Get32u(\$dir, $pos + 0x44); # left sibling
|