exiftool-vendored.exe 12.44.0 → 12.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/exiftool_files/Changes +112 -3
- package/bin/exiftool_files/README +45 -44
- package/bin/exiftool_files/config_files/acdsee.config +2 -1
- package/bin/exiftool_files/config_files/frameCount.config +56 -0
- package/bin/exiftool_files/config_files/tiff_version.config +1 -1
- package/bin/exiftool_files/exiftool.pl +77 -66
- package/bin/exiftool_files/fmt_files/gpx.fmt +3 -0
- package/bin/exiftool_files/fmt_files/gpx_wpt.fmt +3 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +6 -2
- package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +17 -9
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +33 -15
- package/bin/exiftool_files/lib/Image/ExifTool/CanonRaw.pm +8 -1
- package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +7 -8
- package/bin/exiftool_files/lib/Image/ExifTool/EXE.pm +9 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +11 -7
- package/bin/exiftool_files/lib/Image/ExifTool/FLAC.pm +17 -3
- package/bin/exiftool_files/lib/Image/ExifTool/FLIR.pm +4 -3
- package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +4 -2
- package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +31 -5
- package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/ICC_Profile.pm +3 -2
- package/bin/exiftool_files/lib/Image/ExifTool/ICO.pm +141 -0
- package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +6 -6
- package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +55 -8
- package/bin/exiftool_files/lib/Image/ExifTool/MIE.pm +9 -3
- package/bin/exiftool_files/lib/Image/ExifTool/MISB.pm +494 -0
- package/bin/exiftool_files/lib/Image/ExifTool/MakerNotes.pm +3 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Matroska.pm +24 -16
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +39 -31
- package/bin/exiftool_files/lib/Image/ExifTool/NikonSettings.pm +5 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +21 -4
- package/bin/exiftool_files/lib/Image/ExifTool/PanasonicRaw.pm +25 -5
- package/bin/exiftool_files/lib/Image/ExifTool/Photoshop.pm +29 -3
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +113 -8
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +44 -6
- package/bin/exiftool_files/lib/Image/ExifTool/README +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +106 -9
- package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Sigma.pm +27 -1
- package/bin/exiftool_files/lib/Image/ExifTool/SigmaRaw.pm +37 -13
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +8 -3
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +188 -7
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +3051 -2732
- package/bin/exiftool_files/lib/Image/ExifTool/Text.pm +3 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Torrent.pm +2 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/WriteCanonRaw.pl +7 -0
- package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +100 -23
- package/bin/exiftool_files/lib/Image/ExifTool/WriteIPTC.pl +2 -6
- package/bin/exiftool_files/lib/Image/ExifTool/WriteRIFF.pl +359 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +10 -3
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +76 -58
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +11 -4
- package/bin/exiftool_files/lib/Image/ExifTool.pm +75 -15
- package/bin/exiftool_files/lib/Image/ExifTool.pod +61 -57
- package/package.json +2 -2
|
@@ -15,7 +15,7 @@ use vars qw($VERSION);
|
|
|
15
15
|
use Image::ExifTool::Exif;
|
|
16
16
|
use Image::ExifTool::PLIST;
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.07';
|
|
19
19
|
|
|
20
20
|
# Apple iPhone metadata (ref PH)
|
|
21
21
|
%Image::ExifTool::Apple::Main = (
|
|
@@ -80,7 +80,7 @@ $VERSION = '1.06';
|
|
|
80
80
|
# 0x000e - int32s: 0,1,4,12 (Orientation? 0=landscape? 4=portrait? ref 1)
|
|
81
81
|
# 0x000f - int32s: 2,3
|
|
82
82
|
# 0x0010 - int32s: 1
|
|
83
|
-
0x0011 => {
|
|
83
|
+
0x0011 => { # (if defined, there is a live photo associated with the video, #forum13565)
|
|
84
84
|
Name => 'MediaGroupUUID', #NealKrawetz private communication
|
|
85
85
|
# (changed in 12.19 from Name => 'ContentIdentifier', #forum8750)
|
|
86
86
|
Writable => 'string',
|
|
@@ -91,6 +91,10 @@ $VERSION = '1.06';
|
|
|
91
91
|
Writable => 'string',
|
|
92
92
|
},
|
|
93
93
|
# 0x0016 - string[29]: "AXZ6pMTOh2L+acSh4Kg630XCScoO\0"
|
|
94
|
+
0x0017 => { #forum13565 (only valid if MediaGroupUUID exists)
|
|
95
|
+
Name => 'LivePhotoVideoIndex',
|
|
96
|
+
Notes => 'divide by RunTimeScale to get time in seconds',
|
|
97
|
+
},
|
|
94
98
|
# 0x0017 - int32s: 0,8192
|
|
95
99
|
# 0x0019 - int32s: 0,2,128
|
|
96
100
|
# 0x001a - string[6]: "q825s\0"
|
|
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
|
|
|
35
35
|
use Image::ExifTool::Validate;
|
|
36
36
|
use Image::ExifTool::MacOS;
|
|
37
37
|
|
|
38
|
-
$VERSION = '3.
|
|
38
|
+
$VERSION = '3.49';
|
|
39
39
|
@ISA = qw(Exporter);
|
|
40
40
|
|
|
41
41
|
sub NumbersFirst($$);
|
|
@@ -501,11 +501,13 @@ been decoded. Use the L<Unknown|../ExifTool.html#Unknown> (-u) option to extrac
|
|
|
501
501
|
},
|
|
502
502
|
GeoTiff => q{
|
|
503
503
|
ExifTool extracts the following tags from GeoTIFF images. See
|
|
504
|
-
L<http://www.remotesensing.org/geotiff/spec/geotiffhome.html>
|
|
505
|
-
complete GeoTIFF specification. Also included in the table below
|
|
506
|
-
ChartTIFF tags (see
|
|
507
|
-
|
|
508
|
-
|
|
504
|
+
L<https://web.archive.org/web/20070820121549/http://www.remotesensing.org/geotiff/spec/geotiffhome.html>
|
|
505
|
+
for the complete GeoTIFF specification. Also included in the table below
|
|
506
|
+
are ChartTIFF tags (see
|
|
507
|
+
L<https://web.archive.org/web/20020828193928/http://www.charttiff.com/whitepapers.shtml>).
|
|
508
|
+
GeoTIFF tags are not writable individually, but they may be copied en mass
|
|
509
|
+
via the block tags GeoTiffDirectory, GeoTiffDoubleParams and
|
|
510
|
+
GeoTiffAsciiParams.
|
|
509
511
|
},
|
|
510
512
|
JFIF => q{
|
|
511
513
|
The following information is extracted from the JPEG JFIF header. See
|
|
@@ -1324,9 +1326,12 @@ TagID: foreach $tagID (@keys) {
|
|
|
1324
1326
|
if ($writable) {
|
|
1325
1327
|
foreach ('PrintConv','ValueConv') {
|
|
1326
1328
|
next unless $$tagInfo{$_};
|
|
1327
|
-
next if $$tagInfo{$_ . 'Inv'};
|
|
1328
|
-
|
|
1329
|
-
|
|
1329
|
+
next if defined $$tagInfo{$_ . 'Inv'};
|
|
1330
|
+
# (undefined inverse conversion overrides hash lookup)
|
|
1331
|
+
unless (exists $$tagInfo{$_ . 'Inv'}) {
|
|
1332
|
+
next if ref($$tagInfo{$_}) =~ /^(HASH|ARRAY)$/;
|
|
1333
|
+
next if $$tagInfo{WriteAlso};
|
|
1334
|
+
}
|
|
1330
1335
|
if ($_ eq 'ValueConv') {
|
|
1331
1336
|
undef $writable;
|
|
1332
1337
|
} else {
|
|
@@ -2570,6 +2575,9 @@ sub WriteTagNames($$)
|
|
|
2570
2575
|
$tip = '';
|
|
2571
2576
|
# use copyright symbol in QuickTime UserData tags
|
|
2572
2577
|
$tagIDstr =~ s/^"\\xa9/"©/;
|
|
2578
|
+
# escape necessary characters in html
|
|
2579
|
+
$tagIDstr =~ s/>/>/g;
|
|
2580
|
+
$tagIDstr =~ s/</</g;
|
|
2573
2581
|
}
|
|
2574
2582
|
# add tooltip for special writable attributes
|
|
2575
2583
|
my $wtip = '';
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.62';
|
|
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.59';
|
|
|
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.59';
|
|
|
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
|
|
@@ -602,18 +604,24 @@ $VERSION = '4.59';
|
|
|
602
604
|
'61182.24' => 'Canon RF 14-35mm F4L IS USM', #IB
|
|
603
605
|
'61182.25' => 'Canon RF-S 18-45mm F4.5-6.3 IS STM', #42
|
|
604
606
|
'61182.26' => 'Canon RF 100-400mm F5.6-8 IS USM', #42
|
|
605
|
-
'61182.27' => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42
|
|
606
|
-
'61182.28' => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #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
|
|
607
609
|
'61182.29' => 'Canon RF-S 18-150mm F3.5-6.3 IS STM', #42
|
|
608
|
-
'61182.30' => 'Canon RF
|
|
609
|
-
'61182.31' => 'Canon RF
|
|
610
|
-
'61182.32' => 'Canon RF 400mm F2.8L IS USM
|
|
611
|
-
'61182.33' => 'Canon RF 400mm F2.8L IS USM +
|
|
612
|
-
'61182.34' => 'Canon RF
|
|
613
|
-
|
|
614
|
-
'61182.
|
|
615
|
-
'61182.
|
|
616
|
-
'61182.
|
|
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
|
+
# we need the RFLensType values for the following...
|
|
624
|
+
'61182.43' => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH (NC)
|
|
617
625
|
65535 => 'n/a',
|
|
618
626
|
);
|
|
619
627
|
|
|
@@ -6812,14 +6820,22 @@ my %ciMaxFocal = (
|
|
|
6812
6820
|
281 => 'Canon RF 14-35mm F4L IS USM', #42/IB
|
|
6813
6821
|
282 => 'Canon RF-S 18-45mm F4.5-6.3 IS STM', #42
|
|
6814
6822
|
283 => 'Canon RF 100-400mm F5.6-8 IS USM', #42
|
|
6815
|
-
284 => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42
|
|
6816
|
-
285 => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42
|
|
6823
|
+
284 => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42
|
|
6824
|
+
285 => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42
|
|
6817
6825
|
286 => 'Canon RF-S 18-150mm F3.5-6.3 IS STM', #42
|
|
6826
|
+
287 => 'Canon RF 24mm F1.8 MACRO IS STM', #42
|
|
6818
6827
|
288 => 'Canon RF 16mm F2.8 STM', #42
|
|
6819
6828
|
289 => 'Canon RF 400mm F2.8L IS USM', #IB
|
|
6820
6829
|
290 => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
|
|
6821
6830
|
291 => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
|
|
6822
6831
|
292 => 'Canon RF 600mm F4L IS USM', #GiaZopatti
|
|
6832
|
+
295 => 'Canon RF 800mm F5.6L IS USM', #42
|
|
6833
|
+
296 => 'Canon RF 800mm F5.6L IS USM + RF1.4x', #42
|
|
6834
|
+
297 => 'Canon RF 800mm F5.6L IS USM + RF2x', #42
|
|
6835
|
+
298 => 'Canon RF 1200mm F8L IS USM', #42
|
|
6836
|
+
299 => 'Canon RF 1200mm F8L IS USM + RF1.4x', #42
|
|
6837
|
+
300 => 'Canon RF 1200mm F8L IS USM + RF2x', #42
|
|
6838
|
+
302 => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
|
|
6823
6839
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
|
6824
6840
|
},
|
|
6825
6841
|
},
|
|
@@ -6864,6 +6880,7 @@ my %ciMaxFocal = (
|
|
|
6864
6880
|
8 => '4:5',
|
|
6865
6881
|
12 => '3:2 (APS-H crop)', #IB
|
|
6866
6882
|
13 => '3:2 (APS-C crop)', #IB
|
|
6883
|
+
258 => '4:3 crop', #PH (NC)
|
|
6867
6884
|
},
|
|
6868
6885
|
},
|
|
6869
6886
|
# (could use better names for these, or the Crop tags above, or both)
|
|
@@ -9393,8 +9410,9 @@ my %filterConv = (
|
|
|
9393
9410
|
# numbers from the previous image, so we need special logic
|
|
9394
9411
|
# to handle the FileIndex wrap properly)
|
|
9395
9412
|
$val[1] == 10000 and $val[1] = 1, ++$val[0];
|
|
9396
|
-
return sprintf("%.3d
|
|
9413
|
+
return sprintf("%.3d%.4d",@val);
|
|
9397
9414
|
},
|
|
9415
|
+
PrintConv => '$_=$val;s/(\d+)(\d{4})/$1-$2/;$_',
|
|
9398
9416
|
},
|
|
9399
9417
|
);
|
|
9400
9418
|
|
|
@@ -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) {
|
|
@@ -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($$$);
|
|
@@ -2080,6 +2080,7 @@ my %opcodeInfo = (
|
|
|
2080
2080
|
Groups => { 2 => 'Time' },
|
|
2081
2081
|
Notes => 'time zone for ModifyDate',
|
|
2082
2082
|
Writable => 'string',
|
|
2083
|
+
Shift => 'Time',
|
|
2083
2084
|
PrintConvInv => q{
|
|
2084
2085
|
return "+00:00" if $val =~ /\d{2}Z$/;
|
|
2085
2086
|
return sprintf("%s%.2d:%.2d",$1,$2,$3) if $val =~ /([-+])(\d{1,2}):(\d{2})/;
|
|
@@ -2091,6 +2092,7 @@ my %opcodeInfo = (
|
|
|
2091
2092
|
Groups => { 2 => 'Time' },
|
|
2092
2093
|
Notes => 'time zone for DateTimeOriginal',
|
|
2093
2094
|
Writable => 'string',
|
|
2095
|
+
Shift => 'Time',
|
|
2094
2096
|
PrintConvInv => q{
|
|
2095
2097
|
return "+00:00" if $val =~ /\d{2}Z$/;
|
|
2096
2098
|
return sprintf("%s%.2d:%.2d",$1,$2,$3) if $val =~ /([-+])(\d{1,2}):(\d{2})/;
|
|
@@ -2102,6 +2104,7 @@ my %opcodeInfo = (
|
|
|
2102
2104
|
Groups => { 2 => 'Time' },
|
|
2103
2105
|
Notes => 'time zone for CreateDate',
|
|
2104
2106
|
Writable => 'string',
|
|
2107
|
+
Shift => 'Time',
|
|
2105
2108
|
PrintConvInv => q{
|
|
2106
2109
|
return "+00:00" if $val =~ /\d{2}Z$/;
|
|
2107
2110
|
return sprintf("%s%.2d:%.2d",$1,$2,$3) if $val =~ /([-+])(\d{1,2}):(\d{2})/;
|
|
@@ -4080,7 +4083,7 @@ my %opcodeInfo = (
|
|
|
4080
4083
|
WriteGroup => 'SubIFD' #? (NC) Semantic Mask IFD (only for Validate)
|
|
4081
4084
|
},
|
|
4082
4085
|
0xcd30 => { # DNG 1.6
|
|
4083
|
-
Name => '
|
|
4086
|
+
Name => 'SemanticInstanceID',
|
|
4084
4087
|
# Writable => 'string',
|
|
4085
4088
|
WriteGroup => 'SubIFD' #? (NC) Semantic Mask IFD (only for Validate)
|
|
4086
4089
|
},
|
|
@@ -4842,10 +4845,10 @@ my %subSecConv = (
|
|
|
4842
4845
|
Writable => 1,
|
|
4843
4846
|
Protected => 1,
|
|
4844
4847
|
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',
|
|
4848
|
+
GPSLatitude => '(defined $val and $val =~ /(.*?)( ?[NS])?,/) ? $1 : undef',
|
|
4849
|
+
GPSLatitudeRef => '(defined $val and $val =~ /(-?)(.*?) ?([NS]?),/) ? ($3 || ($1 ? "S" : "N")) : undef',
|
|
4850
|
+
GPSLongitude => '(defined $val and $val =~ /, ?(.*?)( ?[EW]?)$/) ? $1 : undef',
|
|
4851
|
+
GPSLongitudeRef => '(defined $val and $val =~ /, ?(-?)(.*?) ?([EW]?)$/) ? ($3 || ($1 ? "W" : "E")) : undef',
|
|
4849
4852
|
},
|
|
4850
4853
|
PrintConvInv => q{
|
|
4851
4854
|
return undef unless $val =~ /(.*? ?[NS]?), ?(.*? ?[EW]?)$/;
|
|
@@ -6012,7 +6015,8 @@ sub ProcessExif($$$)
|
|
|
6012
6015
|
my $tagID = Get16u($dataPt, $entry);
|
|
6013
6016
|
my $format = Get16u($dataPt, $entry+2);
|
|
6014
6017
|
my $count = Get32u($dataPt, $entry+4);
|
|
6015
|
-
|
|
6018
|
+
# (Apple uses the BigTIFF format code 16 in the maker notes of their ProRaw DNG files)
|
|
6019
|
+
if (($format < 1 or $format > 13) and not ($format == 16 and $$et{Make} eq 'Apple' and $inMakerNotes)) {
|
|
6016
6020
|
if ($mapFmt and $$mapFmt{$format}) {
|
|
6017
6021
|
$format = $$mapFmt{$format};
|
|
6018
6022
|
} 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($$$);
|
|
@@ -1338,7 +1338,9 @@ sub ConvertDTTM($)
|
|
|
1338
1338
|
my $hr = ($val >> 6) & 0x1f;
|
|
1339
1339
|
my $min = ($val & 0x3f);
|
|
1340
1340
|
$yr += 1900 if $val;
|
|
1341
|
-
|
|
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);
|
|
1342
1344
|
}
|
|
1343
1345
|
|
|
1344
1346
|
#------------------------------------------------------------------------------
|
|
@@ -31,7 +31,7 @@ use vars qw($VERSION);
|
|
|
31
31
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
32
32
|
use Image::ExifTool::Exif;
|
|
33
33
|
|
|
34
|
-
$VERSION = '1.
|
|
34
|
+
$VERSION = '1.84';
|
|
35
35
|
|
|
36
36
|
sub ProcessFujiDir($$$);
|
|
37
37
|
sub ProcessFaceRec($$$);
|
|
@@ -254,6 +254,23 @@ my %faceCategories = (
|
|
|
254
254
|
0x2e0 => '-4 (weakest)', #10 (-4)
|
|
255
255
|
},
|
|
256
256
|
},
|
|
257
|
+
0x100f => { #PR158
|
|
258
|
+
Name => 'Clarity',
|
|
259
|
+
Writable => 'int32s', #PH
|
|
260
|
+
PrintConv => {
|
|
261
|
+
-5000 => '-5',
|
|
262
|
+
-4000 => '-4',
|
|
263
|
+
-3000 => '-3',
|
|
264
|
+
-2000 => '-2',
|
|
265
|
+
-1000 => '-1',
|
|
266
|
+
0 => '0',
|
|
267
|
+
1000 => '1',
|
|
268
|
+
2000 => '2',
|
|
269
|
+
3000 => '3',
|
|
270
|
+
4000 => '4',
|
|
271
|
+
5000 => '5',
|
|
272
|
+
},
|
|
273
|
+
},
|
|
257
274
|
0x1010 => {
|
|
258
275
|
Name => 'FujiFlashMode',
|
|
259
276
|
Writable => 'int16u',
|
|
@@ -444,7 +461,7 @@ my %faceCategories = (
|
|
|
444
461
|
PrintConv => { 0 => 'Off', 1 => 'On' },
|
|
445
462
|
},
|
|
446
463
|
0x1047 => { #12
|
|
447
|
-
Name => '
|
|
464
|
+
Name => 'GrainEffectRoughness',
|
|
448
465
|
Writable => 'int32s',
|
|
449
466
|
PrintConv => {
|
|
450
467
|
0 => 'Off',
|
|
@@ -469,6 +486,15 @@ my %faceCategories = (
|
|
|
469
486
|
PrintConvInv => '$val + 0',
|
|
470
487
|
},
|
|
471
488
|
# 0x104b - BWAdjustment for Green->Magenta (forum10800)
|
|
489
|
+
0x104c => { #PR158
|
|
490
|
+
Name => "GrainEffectSize",
|
|
491
|
+
Writable => 'int16u', #PH
|
|
492
|
+
PrintConv => {
|
|
493
|
+
0 => 'Off',
|
|
494
|
+
16 => 'Small',
|
|
495
|
+
32 => 'Large',
|
|
496
|
+
},
|
|
497
|
+
},
|
|
472
498
|
0x104d => { #forum9634
|
|
473
499
|
Name => 'CropMode',
|
|
474
500
|
Writable => 'int16u',
|
|
@@ -763,8 +789,8 @@ my %faceCategories = (
|
|
|
763
789
|
},
|
|
764
790
|
PrintConvInv => '$val=~/(0x[0-9a-f]+)/i; hex $1',
|
|
765
791
|
},
|
|
766
|
-
0x1447 => { Name => '
|
|
767
|
-
0x1448 => { Name => '
|
|
792
|
+
0x1447 => { Name => 'FujiModel', Writable => 'string' },
|
|
793
|
+
0x1448 => { Name => 'FujiModel2', Writable => 'string' },
|
|
768
794
|
0x3803 => { #forum10037
|
|
769
795
|
Name => 'VideoRecordingMode',
|
|
770
796
|
Groups => { 2 => 'Video' },
|
|
@@ -1046,7 +1072,7 @@ my %faceCategories = (
|
|
|
1046
1072
|
Mask => 0x000000ff,
|
|
1047
1073
|
PrintConv => {
|
|
1048
1074
|
0 => 'Single',
|
|
1049
|
-
1 => 'Continuous Low',
|
|
1075
|
+
1 => 'Continuous Low', # not used by X-H2S? (see forum13777)
|
|
1050
1076
|
2 => 'Continuous High',
|
|
1051
1077
|
},
|
|
1052
1078
|
},
|
|
@@ -369,7 +369,7 @@ my %coordConv = (
|
|
|
369
369
|
},
|
|
370
370
|
WriteAlso => {
|
|
371
371
|
'GPS:GPSLatitude' => '$val',
|
|
372
|
-
'GPS:GPSLatitudeRef' => '$val < 0 ? "S" : "N"',
|
|
372
|
+
'GPS:GPSLatitudeRef' => '(defined $val and $val < 0) ? "S" : "N"',
|
|
373
373
|
},
|
|
374
374
|
ValueConv => '$val[1] =~ /^S/i ? -$val[0] : $val[0]',
|
|
375
375
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
|
|
@@ -386,7 +386,7 @@ my %coordConv = (
|
|
|
386
386
|
},
|
|
387
387
|
WriteAlso => {
|
|
388
388
|
'GPS:GPSLongitude' => '$val',
|
|
389
|
-
'GPS:GPSLongitudeRef' => '$val < 0 ? "W" : "E"',
|
|
389
|
+
'GPS:GPSLongitudeRef' => '(defined $val and $val < 0) ? "W" : "E"',
|
|
390
390
|
},
|
|
391
391
|
Require => {
|
|
392
392
|
0 => 'GPS:GPSLongitude',
|
|
@@ -25,7 +25,7 @@ use strict;
|
|
|
25
25
|
use vars qw($VERSION);
|
|
26
26
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
27
27
|
|
|
28
|
-
$VERSION = '1.
|
|
28
|
+
$VERSION = '1.40';
|
|
29
29
|
|
|
30
30
|
sub ProcessICC($$);
|
|
31
31
|
sub ProcessICC_Profile($$$);
|
|
@@ -627,7 +627,7 @@ my %manuSig = ( #6
|
|
|
627
627
|
swpt => 'SpectralWhitePoint',
|
|
628
628
|
s2cp => 'StandardToCustomPcc',
|
|
629
629
|
smap => 'SurfaceMap',
|
|
630
|
-
# smwp ? (seen in some v5 samples)
|
|
630
|
+
# smwp ? (seen in some v5 samples [was a mistake in sample production])
|
|
631
631
|
|
|
632
632
|
# the following entry represents the ICC profile header, and doesn't
|
|
633
633
|
# exist as a tag in the directory. It is only in this table to provide
|
|
@@ -815,6 +815,7 @@ my %manuSig = ( #6
|
|
|
815
815
|
Name => 'ChromaticityColorant',
|
|
816
816
|
Format => 'int16u',
|
|
817
817
|
PrintConv => {
|
|
818
|
+
0 => 'Unknown',
|
|
818
819
|
1 => 'ITU-R BT.709',
|
|
819
820
|
2 => 'SMPTE RP145-1994',
|
|
820
821
|
3 => 'EBU Tech.3213-E',
|