exiftool-vendored.pl 12.60.0 → 12.65.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/Changes +110 -0
- package/bin/LICENSE +674 -0
- package/bin/MANIFEST +11 -0
- package/bin/META.json +5 -3
- package/bin/META.yml +5 -3
- package/bin/Makefile.PL +7 -1
- package/bin/README +50 -45
- package/bin/config_files/guano.config +161 -0
- package/bin/exiftool +163 -103
- package/bin/lib/Image/ExifTool/7Z.pm +793 -0
- package/bin/lib/Image/ExifTool/Apple.pm +14 -7
- package/bin/lib/Image/ExifTool/BMP.pm +0 -1
- package/bin/lib/Image/ExifTool/BigTIFF.pm +8 -1
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +4 -4
- package/bin/lib/Image/ExifTool/Canon.pm +4 -1
- package/bin/lib/Image/ExifTool/CanonRaw.pm +4 -4
- package/bin/lib/Image/ExifTool/CanonVRD.pm +4 -1
- package/bin/lib/Image/ExifTool/Exif.pm +31 -14
- package/bin/lib/Image/ExifTool/FlashPix.pm +9 -2
- package/bin/lib/Image/ExifTool/FujiFilm.pm +3 -3
- package/bin/lib/Image/ExifTool/GPS.pm +5 -2
- package/bin/lib/Image/ExifTool/Geotag.pm +4 -1
- package/bin/lib/Image/ExifTool/Jpeg2000.pm +243 -20
- package/bin/lib/Image/ExifTool/Lang/fr.pm +1467 -202
- package/bin/lib/Image/ExifTool/MPF.pm +2 -1
- package/bin/lib/Image/ExifTool/Matroska.pm +16 -1
- package/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
- package/bin/lib/Image/ExifTool/Nikon.pm +941 -33
- package/bin/lib/Image/ExifTool/NikonCustom.pm +874 -63
- package/bin/lib/Image/ExifTool/PDF.pm +39 -12
- package/bin/lib/Image/ExifTool/PLIST.pm +8 -1
- package/bin/lib/Image/ExifTool/PNG.pm +6 -6
- package/bin/lib/Image/ExifTool/PhaseOne.pm +5 -5
- package/bin/lib/Image/ExifTool/QuickTime.pm +96 -32
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +68 -37
- package/bin/lib/Image/ExifTool/README +2 -2
- package/bin/lib/Image/ExifTool/RIFF.pm +11 -9
- package/bin/lib/Image/ExifTool/Samsung.pm +227 -227
- package/bin/lib/Image/ExifTool/Shortcuts.pm +2 -1
- package/bin/lib/Image/ExifTool/SigmaRaw.pm +4 -4
- package/bin/lib/Image/ExifTool/Sony.pm +237 -32
- package/bin/lib/Image/ExifTool/TagLookup.pm +4762 -4629
- package/bin/lib/Image/ExifTool/TagNames.pod +737 -20
- package/bin/lib/Image/ExifTool/Validate.pm +17 -1
- package/bin/lib/Image/ExifTool/WPG.pm +296 -0
- package/bin/lib/Image/ExifTool/WriteExif.pl +9 -7
- package/bin/lib/Image/ExifTool/WritePDF.pl +7 -8
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +21 -9
- package/bin/lib/Image/ExifTool/WriteXMP.pl +2 -2
- package/bin/lib/Image/ExifTool/Writer.pl +47 -16
- package/bin/lib/Image/ExifTool/XMP.pm +30 -6
- package/bin/lib/Image/ExifTool/XMP2.pl +32 -0
- package/bin/lib/Image/ExifTool/XMPStruct.pl +96 -28
- package/bin/lib/Image/ExifTool/ZIP.pm +159 -41
- package/bin/lib/Image/ExifTool.pm +280 -164
- package/bin/lib/Image/ExifTool.pod +117 -52
- package/bin/perl-Image-ExifTool.spec +44 -43
- package/bin/pp_build_exe.args +8 -4
- package/package.json +3 -3
|
@@ -16,7 +16,7 @@ use vars qw($VERSION);
|
|
|
16
16
|
use Image::ExifTool::Exif;
|
|
17
17
|
use Image::ExifTool::PLIST;
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.10';
|
|
20
20
|
|
|
21
21
|
sub ConvertPLIST($$);
|
|
22
22
|
|
|
@@ -110,9 +110,13 @@ sub ConvertPLIST($$);
|
|
|
110
110
|
},
|
|
111
111
|
# 0x0010 - int32s: 1 (SphereStatus, ref 2)
|
|
112
112
|
0x0011 => { # (if defined, there is a live photo associated with the video, #forum13565) (AssetIdentifier, ref 2)
|
|
113
|
-
Name => '
|
|
114
|
-
|
|
113
|
+
Name => 'ContentIdentifier',
|
|
114
|
+
Notes => 'called MediaGroupUUID when it appears as an XAttr',
|
|
115
|
+
# - originally called ContentIdentifier, forum8750
|
|
116
|
+
# - changed in 12.19 to MediaGroupUUID, NealKrawetz private communication
|
|
117
|
+
# - changed back to ContentIdentifier since Apple writes this to Keys content.identifier (forum14874)
|
|
115
118
|
Writable => 'string',
|
|
119
|
+
|
|
116
120
|
},
|
|
117
121
|
# 0x0012 - (QRMOutputType, ref 2)
|
|
118
122
|
# 0x0013 - (SphereExternalForceOffset, ref 2)
|
|
@@ -127,7 +131,7 @@ sub ConvertPLIST($$);
|
|
|
127
131
|
Writable => 'string',
|
|
128
132
|
},
|
|
129
133
|
# 0x0016 - string[29]: "AXZ6pMTOh2L+acSh4Kg630XCScoO\0" (PhotosOriginatingSignature, ref 2)
|
|
130
|
-
0x0017 => { #forum13565 (only valid if MediaGroupUUID exists) (StillImageCaptureFlags, ref 2)
|
|
134
|
+
0x0017 => { #forum13565 (only valid if MediaGroupUUID/ContentIdentifier exists) (StillImageCaptureFlags, ref 2)
|
|
131
135
|
Name => 'LivePhotoVideoIndex',
|
|
132
136
|
Notes => 'divide by RunTimeScale to get time in seconds',
|
|
133
137
|
},
|
|
@@ -153,7 +157,7 @@ sub ConvertPLIST($$);
|
|
|
153
157
|
# 0x001e - (OriginatingAppID, ref 2)
|
|
154
158
|
# 0x001f - int32s: 0,1 (PhotosAppFeatureFlags, ref 2)
|
|
155
159
|
0x0020 => { # (ImageCaptureRequestIdentifier, ref 2)
|
|
156
|
-
Name => '
|
|
160
|
+
Name => 'ImageCaptureRequestID',
|
|
157
161
|
Writable => 'string',
|
|
158
162
|
Unknown => 1,
|
|
159
163
|
},
|
|
@@ -182,7 +186,10 @@ sub ConvertPLIST($$);
|
|
|
182
186
|
# 0x0028 - int32s (UBMethod, ref 2)
|
|
183
187
|
# 0x0029 - string (SpatialOverCaptureGroupIdentifier, ref 2)
|
|
184
188
|
# 0x002A - (iCloudServerSoftwareVersionForDynamicallyGeneratedMedia, ref 2)
|
|
185
|
-
|
|
189
|
+
0x002b => {
|
|
190
|
+
Name => 'PhotoIdentifier', #2
|
|
191
|
+
Writable => 'string',
|
|
192
|
+
},
|
|
186
193
|
# 0x002C - (SpatialOverCaptureImageType, ref 2)
|
|
187
194
|
# 0x002D - (CCT, ref 2)
|
|
188
195
|
# 0x002E - (ApsMode, ref 2)
|
|
@@ -308,7 +315,7 @@ sub ConvertPLIST($$)
|
|
|
308
315
|
$val = $$dirInfo{Value};
|
|
309
316
|
if (ref $val eq 'HASH' and not $et->Options('Struct')) {
|
|
310
317
|
require 'Image/ExifTool/XMPStruct.pl';
|
|
311
|
-
$val = Image::ExifTool::XMP::SerializeStruct($val);
|
|
318
|
+
$val = Image::ExifTool::XMP::SerializeStruct($et, $val);
|
|
312
319
|
}
|
|
313
320
|
return $val;
|
|
314
321
|
}
|
|
@@ -15,7 +15,7 @@ use vars qw($VERSION);
|
|
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
16
|
use Image::ExifTool::Exif;
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.08';
|
|
19
19
|
|
|
20
20
|
my $maxOffset = 0x7fffffff; # currently supported maximum data offset/size
|
|
21
21
|
|
|
@@ -216,6 +216,13 @@ sub ProcessBigIFD($$$)
|
|
|
216
216
|
$dirStart = Image::ExifTool::Get64u(\$nextIFD, 0);
|
|
217
217
|
$dirStart or last;
|
|
218
218
|
$offName = $nextOffName;
|
|
219
|
+
# protect against infinite loop
|
|
220
|
+
if ($$et{PROCESSED}{$dirStart}) {
|
|
221
|
+
$et->Warn("$dirName pointer references previous $$et{PROCESSED}{$dirStart} directory");
|
|
222
|
+
last;
|
|
223
|
+
} else {
|
|
224
|
+
$$et{PROCESSED}{$dirStart} = $dirName;
|
|
225
|
+
}
|
|
219
226
|
}
|
|
220
227
|
return 1;
|
|
221
228
|
}
|
|
@@ -582,10 +582,10 @@ number of available PDF tags. See
|
|
|
582
582
|
L<http://www.adobe.com/devnet/pdf/pdf_reference.html> for the official PDF
|
|
583
583
|
specification.
|
|
584
584
|
|
|
585
|
-
ExifTool supports reading and writing PDF documents up to version
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
password-protected PDF files.
|
|
585
|
+
ExifTool supports reading and writing PDF documents up to version 2.0,
|
|
586
|
+
including support for RC4, AES-128 and AES-256 encryption. A
|
|
587
|
+
L<Password|../ExifTool.html#Password> option is provided to allow processing
|
|
588
|
+
of password-protected PDF files.
|
|
589
589
|
|
|
590
590
|
ExifTool may be used to write native PDF and XMP metadata to PDF files. It
|
|
591
591
|
uses an incremental update technique that has the advantages of being both
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.67';
|
|
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)
|
|
@@ -476,6 +476,7 @@ $VERSION = '4.66';
|
|
|
476
476
|
255.1 => 'Sigma 180mm f/2.8 EX DG OS HSM APO Macro', #50
|
|
477
477
|
255.2 => 'Tamron SP 70-200mm f/2.8 Di VC USD', #exiv issue 1202 (A009)
|
|
478
478
|
255.3 => 'Yongnuo YN 50mm f/1.8', #50
|
|
479
|
+
313 => 'Canon RF 28mm F2.8 STM', #42
|
|
479
480
|
368 => 'Sigma 14-24mm f/2.8 DG HSM | A or other Sigma Lens', #IB (A018)
|
|
480
481
|
368.1 => 'Sigma 20mm f/1.4 DG HSM | A', #50 (newer firmware)
|
|
481
482
|
368.2 => 'Sigma 50mm f/1.4 DG HSM | A', #50
|
|
@@ -983,6 +984,7 @@ $VERSION = '4.66';
|
|
|
983
984
|
0x80000480 => 'EOS R50', #42
|
|
984
985
|
0x80000481 => 'EOS R6 Mark II', #42
|
|
985
986
|
0x80000487 => 'EOS R8', #42
|
|
987
|
+
0x80000491 => 'PowerShot V10', #25
|
|
986
988
|
0x80000520 => 'EOS D2000C', #IB
|
|
987
989
|
0x80000560 => 'EOS D6000C', #PH (guess)
|
|
988
990
|
);
|
|
@@ -2092,6 +2094,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
2092
2094
|
TagTable => 'Image::ExifTool::Canon::AFConfig',
|
|
2093
2095
|
}
|
|
2094
2096
|
},
|
|
2097
|
+
# 0x402b - crop information (forum14904)
|
|
2095
2098
|
0x403f => { #25
|
|
2096
2099
|
Name => 'RawBurstModeRoll',
|
|
2097
2100
|
SubDirectory => {
|
|
@@ -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.61';
|
|
25
25
|
|
|
26
26
|
sub WriteCRW($$);
|
|
27
27
|
sub ProcessCanonRaw($$$);
|
|
@@ -698,9 +698,9 @@ sub ProcessCanonRaw($$$)
|
|
|
698
698
|
$format ne 'string' and not $subdir;
|
|
699
699
|
} else {
|
|
700
700
|
$valueDataPos = $ptr;
|
|
701
|
-
# do
|
|
702
|
-
if ($$et{
|
|
703
|
-
$raf->Seek($ptr, 0) and $et->
|
|
701
|
+
# do hash of image data if requested
|
|
702
|
+
if ($$et{ImageDataHash} and $tagID == 0x2005) {
|
|
703
|
+
$raf->Seek($ptr, 0) and $et->ImageDataHash($raf, $size, 'raw');
|
|
704
704
|
}
|
|
705
705
|
if ($size <= 512 or ($verbose > 2 and $size <= 65536)
|
|
706
706
|
or ($tagInfo and ($$tagInfo{SubDirectory}
|
|
@@ -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.36';
|
|
27
27
|
|
|
28
28
|
sub ProcessCanonVRD($$;$);
|
|
29
29
|
sub WriteCanonVRD($$;$);
|
|
@@ -187,6 +187,7 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
|
187
187
|
WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
|
|
188
188
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
|
189
189
|
WRITABLE => 1,
|
|
190
|
+
PERMANENT => 1, # (can't add/delete these individually)
|
|
190
191
|
FIRST_ENTRY => 0,
|
|
191
192
|
GROUPS => { 2 => 'Image' },
|
|
192
193
|
DATAMEMBER => [ 0x002 ], # necessary for writing
|
|
@@ -485,6 +486,7 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
|
485
486
|
WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
|
|
486
487
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
|
487
488
|
WRITABLE => 1,
|
|
489
|
+
PERMANENT => 1, # (can't add/delete these individually)
|
|
488
490
|
FIRST_ENTRY => 0,
|
|
489
491
|
FORMAT => 'int16s',
|
|
490
492
|
DATAMEMBER => [ 0x58, 0xdc, 0xdf, 0xe0 ], # (required for DataMember and var-format tags)
|
|
@@ -999,6 +1001,7 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
|
999
1001
|
PROCESS_PROC => \&ProcessDR4,
|
|
1000
1002
|
WRITE_PROC => \&ProcessDR4,
|
|
1001
1003
|
WRITABLE => 1,
|
|
1004
|
+
PERMANENT => 1, # (can't add/delete these individually)
|
|
1002
1005
|
GROUPS => { 1 => 'CanonDR4', 2 => 'Image' },
|
|
1003
1006
|
VARS => { HEX_ID => 1, SORT_PROC => \&SortDR4 },
|
|
1004
1007
|
NOTES => q{
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
# 30) http://geotiff.maptools.org/spec/geotiffhome.html
|
|
44
44
|
# 31) https://android.googlesource.com/platform/external/dng_sdk/+/refs/heads/master/source/dng_tag_codes.h
|
|
45
45
|
# 32) Jeffry Friedl private communication
|
|
46
|
+
# 33) https://www.cipa.jp/std/documents/download_e.html?DC-008-Translation-2023-E (Exif 3.0)
|
|
46
47
|
# IB) Iliah Borg private communication (LibRaw)
|
|
47
48
|
# JD) Jens Duttke private communication
|
|
48
49
|
#------------------------------------------------------------------------------
|
|
@@ -65,7 +66,7 @@ sub RebuildMakerNotes($$$);
|
|
|
65
66
|
sub EncodeExifText($$);
|
|
66
67
|
sub ValidateIFD($;$);
|
|
67
68
|
sub ValidateImageData($$$;$);
|
|
68
|
-
sub
|
|
69
|
+
sub AddImageDataHash($$$);
|
|
69
70
|
sub ProcessTiffIFD($$$);
|
|
70
71
|
sub PrintParameter($$$);
|
|
71
72
|
sub GetOffList($$$$$);
|
|
@@ -79,6 +80,7 @@ sub BINARY_DATA_LIMIT { return 10 * 1024 * 1024; }
|
|
|
79
80
|
|
|
80
81
|
# byte sizes for the various EXIF format types below
|
|
81
82
|
@formatSize = (undef,1,1,2,4,8,1,1,2,4,8,4,8,4,2,8,8,8,8);
|
|
83
|
+
$formatSize[129] = 1; # (Exif 3.0)
|
|
82
84
|
|
|
83
85
|
@formatName = (
|
|
84
86
|
undef, 'int8u', 'string', 'int16u',
|
|
@@ -87,6 +89,7 @@ sub BINARY_DATA_LIMIT { return 10 * 1024 * 1024; }
|
|
|
87
89
|
'double', 'ifd', 'unicode', 'complex',
|
|
88
90
|
'int64u', 'int64s', 'ifd64', # (new BigTIFF formats)
|
|
89
91
|
);
|
|
92
|
+
$formatName[129] = 'utf8'; # (Exif 3.0)
|
|
90
93
|
|
|
91
94
|
# hash to look up EXIF format numbers by name
|
|
92
95
|
# (format types are all lower case)
|
|
@@ -110,6 +113,7 @@ sub BINARY_DATA_LIMIT { return 10 * 1024 * 1024; }
|
|
|
110
113
|
'int64u' => 16, # LONG8 [BigTIFF]
|
|
111
114
|
'int64s' => 17, # SLONG8 [BigTIFF]
|
|
112
115
|
'ifd64' => 18, # IFD8 (with int64u format) [BigTIFF]
|
|
116
|
+
'utf8' => 129,# UTF-8 (Exif 3.0)
|
|
113
117
|
# Note: unicode and complex types are not yet properly supported by ExifTool.
|
|
114
118
|
# These are types which have been observed in the Adobe DNG SDK code, but
|
|
115
119
|
# aren't fully supported there either. We know the sizes, but that's about it.
|
|
@@ -2823,6 +2827,13 @@ my %opcodeInfo = (
|
|
|
2823
2827
|
0xa433 => { Name => 'LensMake', Writable => 'string' }, #24
|
|
2824
2828
|
0xa434 => { Name => 'LensModel', Writable => 'string' }, #24
|
|
2825
2829
|
0xa435 => { Name => 'LensSerialNumber', Writable => 'string' }, #24
|
|
2830
|
+
0xa436 => { Name => 'Title', Writable => 'string', Avoid => 1 }, #33
|
|
2831
|
+
0xa437 => { Name => 'Photographer', Writable => 'string' }, #33
|
|
2832
|
+
0xa438 => { Name => 'ImageEditor', Writable => 'string' }, #33
|
|
2833
|
+
0xa439 => { Name => 'CameraFirmware', Writable => 'string' }, #33
|
|
2834
|
+
0xa43a => { Name => 'RAWDevelopingSoftware', Writable => 'string' }, #33
|
|
2835
|
+
0xa43b => { Name => 'ImageEditingSoftware', Writable => 'string' }, #33
|
|
2836
|
+
0xa43c => { Name => 'MetadataEditingSoftware', Writable => 'string' }, #33
|
|
2826
2837
|
0xa460 => { #Exif2.32
|
|
2827
2838
|
Name => 'CompositeImage',
|
|
2828
2839
|
Writable => 'int16u',
|
|
@@ -4910,10 +4921,10 @@ my %subSecConv = (
|
|
|
4910
4921
|
Writable => 1,
|
|
4911
4922
|
Protected => 1,
|
|
4912
4923
|
WriteAlso => {
|
|
4913
|
-
GPSLatitude => '(defined $val and $val =~ /(
|
|
4914
|
-
GPSLatitudeRef => '(defined $val and $val =~ /(-?)(.*?)
|
|
4915
|
-
GPSLongitude => '(defined $val and $val =~
|
|
4916
|
-
GPSLongitudeRef => '(defined $val and $val =~
|
|
4924
|
+
GPSLatitude => '(defined $val and $val =~ /(.*) /) ? $1 : undef',
|
|
4925
|
+
GPSLatitudeRef => '(defined $val and $val =~ /(-?)(.*?) /) ? ($1 ? "S" : "N") : undef',
|
|
4926
|
+
GPSLongitude => '(defined $val and $val =~ / (.*)$/) ? $1 : undef',
|
|
4927
|
+
GPSLongitudeRef => '(defined $val and $val =~ / (-?)/) ? ($1 ? "W" : "E") : undef',
|
|
4917
4928
|
},
|
|
4918
4929
|
PrintConvInv => q{
|
|
4919
4930
|
return undef unless $val =~ /(.*? ?[NS]?), ?(.*? ?[EW]?)$/;
|
|
@@ -4921,7 +4932,7 @@ my %subSecConv = (
|
|
|
4921
4932
|
require Image::ExifTool::GPS;
|
|
4922
4933
|
$lat = Image::ExifTool::GPS::ToDegrees($lat, 1, "lat");
|
|
4923
4934
|
$lon = Image::ExifTool::GPS::ToDegrees($lon, 1, "lon");
|
|
4924
|
-
return "$lat
|
|
4935
|
+
return "$lat $lon";
|
|
4925
4936
|
},
|
|
4926
4937
|
Require => {
|
|
4927
4938
|
0 => 'GPSLatitude',
|
|
@@ -5929,12 +5940,12 @@ sub ProcessExif($$$)
|
|
|
5929
5940
|
my ($verbose,$validate,$saveFormat) = @{$$et{OPTIONS}}{qw(Verbose Validate SaveFormat)};
|
|
5930
5941
|
my $htmlDump = $$et{HTML_DUMP};
|
|
5931
5942
|
my $success = 1;
|
|
5932
|
-
my ($tagKey, $dirSize, $makerAddr, $strEnc, %offsetInfo, $offName, $nextOffName, $
|
|
5943
|
+
my ($tagKey, $dirSize, $makerAddr, $strEnc, %offsetInfo, $offName, $nextOffName, $doHash);
|
|
5933
5944
|
my $inMakerNotes = $$tagTablePtr{GROUPS}{0} eq 'MakerNotes';
|
|
5934
5945
|
my $isExif = ($tagTablePtr eq \%Image::ExifTool::Exif::Main);
|
|
5935
5946
|
|
|
5936
|
-
# set flag to calculate image data
|
|
5937
|
-
$
|
|
5947
|
+
# set flag to calculate image data hash if requested
|
|
5948
|
+
$doHash = 1 if $$et{ImageDataHash} and (($$et{FILE_TYPE} eq 'TIFF' and not $base and not $inMakerNotes) or
|
|
5938
5949
|
($$et{FILE_TYPE} eq 'RAF' and $dirName eq 'FujiIFD'));
|
|
5939
5950
|
|
|
5940
5951
|
# set encoding to assume for strings
|
|
@@ -6088,7 +6099,7 @@ sub ProcessExif($$$)
|
|
|
6088
6099
|
my $format = Get16u($dataPt, $entry+2);
|
|
6089
6100
|
my $count = Get32u($dataPt, $entry+4);
|
|
6090
6101
|
# (Apple uses the BigTIFF format code 16 in the maker notes of their ProRaw DNG files)
|
|
6091
|
-
if (($format < 1 or $format > 13) and not ($format == 16 and $$et{Make} eq 'Apple' and $inMakerNotes)) {
|
|
6102
|
+
if (($format < 1 or $format > 13) and $format != 129 and not ($format == 16 and $$et{Make} eq 'Apple' and $inMakerNotes)) {
|
|
6092
6103
|
if ($mapFmt and $$mapFmt{$format}) {
|
|
6093
6104
|
$format = $$mapFmt{$format};
|
|
6094
6105
|
} else {
|
|
@@ -6404,7 +6415,13 @@ sub ProcessExif($$$)
|
|
|
6404
6415
|
# convert according to specified format
|
|
6405
6416
|
$val = ReadValue($valueDataPt,$valuePtr,$formatStr,$count,$readSize,\$rational);
|
|
6406
6417
|
# re-code if necessary
|
|
6407
|
-
|
|
6418
|
+
if (defined $val) {
|
|
6419
|
+
if ($formatStr eq 'utf8') {
|
|
6420
|
+
$val = $et->Decode($val, 'UTF8');
|
|
6421
|
+
} elsif ($strEnc and $formatStr eq 'string') {
|
|
6422
|
+
$val = $et->Decode($val, $strEnc);
|
|
6423
|
+
}
|
|
6424
|
+
}
|
|
6408
6425
|
}
|
|
6409
6426
|
}
|
|
6410
6427
|
|
|
@@ -6781,7 +6798,7 @@ sub ProcessExif($$$)
|
|
|
6781
6798
|
}
|
|
6782
6799
|
$val = join(' ', @vals);
|
|
6783
6800
|
}
|
|
6784
|
-
if ($validate or $
|
|
6801
|
+
if ($validate or $doHash) {
|
|
6785
6802
|
if ($$tagInfo{OffsetPair}) {
|
|
6786
6803
|
$offsetInfo{$tagID} = [ $tagInfo, $val ];
|
|
6787
6804
|
} elsif ($saveForValidate{$tagID} and $isExif) {
|
|
@@ -6800,8 +6817,8 @@ sub ProcessExif($$$)
|
|
|
6800
6817
|
}
|
|
6801
6818
|
|
|
6802
6819
|
if (%offsetInfo) {
|
|
6803
|
-
# calculate image data
|
|
6804
|
-
|
|
6820
|
+
# calculate image data hash if requested
|
|
6821
|
+
AddImageDataHash($et, $dirInfo, \%offsetInfo) if $doHash;
|
|
6805
6822
|
# validate image data offsets for this IFD (note: modifies %offsetInfo)
|
|
6806
6823
|
Image::ExifTool::Validate::ValidateOffsetInfo($et, \%offsetInfo, $dirName, $inMakerNotes) if $validate;
|
|
6807
6824
|
}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
# 4) http://msdn.microsoft.com/en-us/library/aa380374.aspx
|
|
12
12
|
# 5) http://www.cpan.org/modules/by-authors/id/H/HC/HCARVEY/File-MSWord-0.1.zip
|
|
13
13
|
# 6) https://msdn.microsoft.com/en-us/library/cc313153(v=office.12).aspx
|
|
14
|
+
# 7) https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-oshared/3ef02e83-afef-4b6c-9585-c109edd24e07
|
|
14
15
|
#------------------------------------------------------------------------------
|
|
15
16
|
|
|
16
17
|
package Image::ExifTool::FlashPix;
|
|
@@ -21,7 +22,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
21
22
|
use Image::ExifTool::Exif;
|
|
22
23
|
use Image::ExifTool::ASF; # for GetGUID()
|
|
23
24
|
|
|
24
|
-
$VERSION = '1.
|
|
25
|
+
$VERSION = '1.46';
|
|
25
26
|
|
|
26
27
|
sub ProcessFPX($$);
|
|
27
28
|
sub ProcessFPXR($$$);
|
|
@@ -587,6 +588,7 @@ my %fpxFileType = (
|
|
|
587
588
|
However, ExifTool will also extract any other information found in the
|
|
588
589
|
UserDefined properties.
|
|
589
590
|
},
|
|
591
|
+
# 0x01 => 'CodePage', #7
|
|
590
592
|
0x02 => 'Category',
|
|
591
593
|
0x03 => 'PresentationTarget',
|
|
592
594
|
0x04 => 'Bytes',
|
|
@@ -631,12 +633,16 @@ my %fpxFileType = (
|
|
|
631
633
|
Name => 'AppVersion',
|
|
632
634
|
ValueConv => 'sprintf("%d.%.4d",$val >> 16, $val & 0xffff)',
|
|
633
635
|
},
|
|
634
|
-
# 0x18 ? seen -1
|
|
636
|
+
# 0x18 ? seen -1 (DigitalSignature, VtDigSig format, ref 7)
|
|
635
637
|
# 0x19 ? seen 0
|
|
636
638
|
# 0x1a ? seen 0
|
|
637
639
|
# 0x1b ? seen 0
|
|
638
640
|
# 0x1c ? seen 0,1
|
|
639
641
|
# 0x1d ? seen 1
|
|
642
|
+
0x1a => 'ContentType', #7, github#217
|
|
643
|
+
0x1b => 'ContentStatus', #7, github#217
|
|
644
|
+
0x1c => 'Language', #7, github#217
|
|
645
|
+
0x1d => 'DocVersion', #7, github#217
|
|
640
646
|
# 0x1e ? seen 1
|
|
641
647
|
# 0x1f ? seen 1,5
|
|
642
648
|
# 0x20 ? seen 0,5
|
|
@@ -1539,6 +1545,7 @@ sub ReadFPXValue($$$$$;$$)
|
|
|
1539
1545
|
}
|
|
1540
1546
|
$_[2] = $valPos; # return updated value position
|
|
1541
1547
|
|
|
1548
|
+
push @vals, '' if $type eq 0; # (VT_EMPTY)
|
|
1542
1549
|
if (wantarray) {
|
|
1543
1550
|
return @vals;
|
|
1544
1551
|
} elsif (@vals > 1) {
|
|
@@ -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.88';
|
|
35
35
|
|
|
36
36
|
sub ProcessFujiDir($$$);
|
|
37
37
|
sub ProcessFaceRec($$$);
|
|
@@ -1687,8 +1687,8 @@ sub ProcessRAF($$)
|
|
|
1687
1687
|
my $tagTablePtr = GetTagTable('Image::ExifTool::FujiFilm::IFD');
|
|
1688
1688
|
# this is TIFF-format data only for some models, so no warning if it fails
|
|
1689
1689
|
unless ($et->ProcessTIFF(\%dirInfo, $tagTablePtr, \&Image::ExifTool::ProcessTIFF)) {
|
|
1690
|
-
# do
|
|
1691
|
-
$et->
|
|
1690
|
+
# do hash of image data if necessary
|
|
1691
|
+
$et->ImageDataHash($raf, $len, 'raw') if $$et{ImageDataHash} and $raf->Seek($start,0);
|
|
1692
1692
|
}
|
|
1693
1693
|
delete $$et{SET_GROUP1};
|
|
1694
1694
|
$ifdNum = ($ifdNum || 1) + 1;
|
|
@@ -106,8 +106,10 @@ my %coordConv = (
|
|
|
106
106
|
return undef unless $inv and $val =~ /^([-+0-9])/;
|
|
107
107
|
return($1 eq '-' ? 1 : 0);
|
|
108
108
|
},
|
|
109
|
-
0 => 'Above Sea Level',
|
|
110
|
-
1 => 'Below Sea Level',
|
|
109
|
+
0 => 'Above Sea Level', # (ellipsoidal surface, Exif 3.0)
|
|
110
|
+
1 => 'Below Sea Level', # (ellipsoidal surface, Exif 3.0)
|
|
111
|
+
# 2 => 'Above Sea Level', # (Exif 3.0)
|
|
112
|
+
# 3 => 'Below Sea Level', # (Exif 3.0)
|
|
111
113
|
},
|
|
112
114
|
},
|
|
113
115
|
0x0006 => {
|
|
@@ -289,6 +291,7 @@ my %coordConv = (
|
|
|
289
291
|
Name => 'GPSProcessingMethod',
|
|
290
292
|
Writable => 'undef',
|
|
291
293
|
Notes => 'values of "GPS", "CELLID", "WLAN" or "MANUAL" by the EXIF spec.',
|
|
294
|
+
# (or QZZSS, GALILEO, GLONASS, BEIDOU or NAVIC in Exif 3.0)
|
|
292
295
|
RawConv => 'Image::ExifTool::Exif::ConvertExifText($self,$val,1,$tag)',
|
|
293
296
|
RawConvInv => 'Image::ExifTool::Exif::EncodeExifText($self,$val)',
|
|
294
297
|
},
|
|
@@ -29,7 +29,7 @@ use vars qw($VERSION);
|
|
|
29
29
|
use Image::ExifTool qw(:Public);
|
|
30
30
|
use Image::ExifTool::GPS;
|
|
31
31
|
|
|
32
|
-
$VERSION = '1.
|
|
32
|
+
$VERSION = '1.72';
|
|
33
33
|
|
|
34
34
|
sub JITTER() { return 2 } # maximum time jitter
|
|
35
35
|
|
|
@@ -224,6 +224,9 @@ sub LoadTrackLog($$;$)
|
|
|
224
224
|
# determine file format
|
|
225
225
|
if (not $format) {
|
|
226
226
|
s/^\xef\xbb\xbf//; # remove leading BOM if it exists
|
|
227
|
+
if (/^\xff\xfe|\xfe\xff/) {
|
|
228
|
+
return "ExifTool doesn't yet read UTF16-format track logs";
|
|
229
|
+
}
|
|
227
230
|
if (/^<(\?xml|gpx)[\s>]/) { # look for XML or GPX header
|
|
228
231
|
$format = 'XML';
|
|
229
232
|
# check for NMEA sentence
|