exiftool_vendored 13.03.0 → 13.06.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/Changes +39 -0
- data/bin/MANIFEST +1 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +42 -32
- data/bin/lib/Image/ExifTool/Canon.pm +7 -1
- data/bin/lib/Image/ExifTool/DJI.pm +90 -28
- data/bin/lib/Image/ExifTool/Exif.pm +8 -4
- data/bin/lib/Image/ExifTool/GPS.pm +33 -29
- data/bin/lib/Image/ExifTool/Geolocation.pm +2 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +43 -9
- data/bin/lib/Image/ExifTool/GoPro.pm +118 -6
- data/bin/lib/Image/ExifTool/JPEG.pm +19 -4
- data/bin/lib/Image/ExifTool/OOXML.pm +7 -7
- data/bin/lib/Image/ExifTool/Photoshop.pm +2 -2
- data/bin/lib/Image/ExifTool/Protobuf.pm +242 -0
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +66 -25
- data/bin/lib/Image/ExifTool/Sony.pm +2 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +2340 -2324
- data/bin/lib/Image/ExifTool/TagNames.pod +86 -8
- data/bin/lib/Image/ExifTool/Writer.pl +1 -1
- data/bin/lib/Image/ExifTool/XMP.pm +11 -1
- data/bin/lib/Image/ExifTool/XMP2.pl +50 -8
- data/bin/lib/Image/ExifTool.pm +61 -33
- data/bin/lib/Image/ExifTool.pod +7 -6
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
|
|
12
12
|
=head1 TAG TABLES
|
13
13
|
|
14
14
|
The tables listed below give the names of all tags recognized by ExifTool.
|
15
|
-
They contain a total of
|
15
|
+
They contain a total of 28212 tags, with 17509 unique tag names.
|
16
16
|
|
17
17
|
B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
|
18
18
|
table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
|
@@ -115,6 +115,7 @@ L<https://www.w3.org/Graphics/JPEG/jfif3.pdf> for the JPEG specification.
|
|
115
115
|
FPXR FlashPix
|
116
116
|
MPF MPF
|
117
117
|
InfiRayVersion InfiRay Version
|
118
|
+
UniformResourceName no
|
118
119
|
PreviewImage no
|
119
120
|
'APP3' Meta Kodak Meta
|
120
121
|
Stim Stim
|
@@ -152,6 +153,7 @@ L<https://www.w3.org/Graphics/JPEG/jfif3.pdf> for the JPEG specification.
|
|
152
153
|
InfiRaySensor InfiRay Sensor
|
153
154
|
SEAL XMP SEAL
|
154
155
|
'APP10' Comment no
|
156
|
+
HDRGainCurve no
|
155
157
|
'APP11' JPEG-HDR JPEG HDR
|
156
158
|
JUMBF Jpeg2000
|
157
159
|
'APP12' PictureInfo APP12 PictureInfo
|
@@ -1370,6 +1372,7 @@ L<http://www.adobe.com/devnet/xmp/> for the official XMP specification.
|
|
1370
1372
|
acdsee XMP acdsee
|
1371
1373
|
acdsee-rs XMP ACDSeeRegions
|
1372
1374
|
album XMP Album
|
1375
|
+
apdi XMP apdi
|
1373
1376
|
apple-fi XMP apple_fi
|
1374
1377
|
ast Nikon ast
|
1375
1378
|
aux XMP aux
|
@@ -1402,6 +1405,7 @@ L<http://www.adobe.com/devnet/xmp/> for the official XMP specification.
|
|
1402
1405
|
GPano XMP GPano
|
1403
1406
|
GSpherical XMP GSpherical
|
1404
1407
|
hdr XMP hdr
|
1408
|
+
HDRGainMap XMP HDRGainMap
|
1405
1409
|
hdrgm XMP hdrgm
|
1406
1410
|
ics XMP ics
|
1407
1411
|
iptcCore XMP iptcCore
|
@@ -1584,6 +1588,18 @@ These tags belong to the ExifTool XMP-album family 1 group.
|
|
1584
1588
|
-------- --------
|
1585
1589
|
Notes string
|
1586
1590
|
|
1591
|
+
=head3 XMP apdi Tags
|
1592
|
+
|
1593
|
+
Used in Apple HDR GainMap images.
|
1594
|
+
|
1595
|
+
These tags belong to the ExifTool XMP-apdi family 1 group.
|
1596
|
+
|
1597
|
+
Tag Name Writable
|
1598
|
+
-------- --------
|
1599
|
+
AuxiliaryImageType string
|
1600
|
+
NativeFormat string
|
1601
|
+
StoredFormat string
|
1602
|
+
|
1587
1603
|
=head3 XMP apple_fi Tags
|
1588
1604
|
|
1589
1605
|
Face information tags written by the Apple iPhone 5 inside the mwg-rs
|
@@ -5030,6 +5046,16 @@ These tags belong to the ExifTool XMP-hdr family 1 group.
|
|
5030
5046
|
CCVWhiteXY string
|
5031
5047
|
SceneReferred boolean
|
5032
5048
|
|
5049
|
+
=head3 XMP HDRGainMap Tags
|
5050
|
+
|
5051
|
+
Used in Apple HDR GainMap images.
|
5052
|
+
|
5053
|
+
These tags belong to the ExifTool XMP-HDRGainMap family 1 group.
|
5054
|
+
|
5055
|
+
Tag Name Writable
|
5056
|
+
-------- --------
|
5057
|
+
HDRGainMapVersion string
|
5058
|
+
|
5033
5059
|
=head3 XMP hdrgm Tags
|
5034
5060
|
|
5035
5061
|
Tags used in Adobe gain map images.
|
@@ -6168,11 +6194,12 @@ These tags belong to the ExifTool XMP-seal family 1 group.
|
|
6168
6194
|
|
6169
6195
|
=head3 XMP SEAL Tags
|
6170
6196
|
|
6171
|
-
These tags are used in SEAL
|
6172
|
-
format, not XMP. ExifTool has
|
6173
|
-
JPG, TIFF, XMP, PNG, WEBP, HEIC,
|
6174
|
-
support in PDF, MKV and WAV. Use
|
6175
|
-
delete SEAL information in supported
|
6197
|
+
These tags are used in SEAL (Secure Evidence Attribution Label) content
|
6198
|
+
authentification, which is actually XML format, not XMP. ExifTool has
|
6199
|
+
read/delete support for SEAL information in JPG, TIFF, XMP, PNG, WEBP, HEIC,
|
6200
|
+
PPM, MOV and MP4 files, and read-only support in PDF, MKV and WAV. Use
|
6201
|
+
C<-seal:all=> on the command line to delete SEAL information in supported
|
6202
|
+
formats. See L<https://github.com/hackerfactor/SEAL> for the specification.
|
6176
6203
|
|
6177
6204
|
Tag ID Tag Name Writable
|
6178
6205
|
------ -------- --------
|
@@ -6180,12 +6207,15 @@ delete SEAL information in supported formats.
|
|
6180
6207
|
'copyright' Copyright no
|
6181
6208
|
'd' Domain no
|
6182
6209
|
'da' DigestAlgorithm no
|
6210
|
+
'id' Identifier no
|
6183
6211
|
'info' SEALComment no
|
6184
6212
|
'ka' KeyAlgorithm no
|
6185
6213
|
'kv' KeyVersion no
|
6186
6214
|
's' Signature no
|
6187
6215
|
'seal' SEALVersion no
|
6188
6216
|
'sf' SignatureFormat no
|
6217
|
+
'sl' SignatureLength no
|
6218
|
+
'uid' UniqueIdentifier no
|
6189
6219
|
|
6190
6220
|
=head3 XMP swf Tags
|
6191
6221
|
|
@@ -8873,7 +8903,7 @@ access to this information.
|
|
8873
8903
|
0x0432 MeasurementScale? no
|
8874
8904
|
0x0433 TimelineInfo? no
|
8875
8905
|
0x0434 SheetDisclosure? no
|
8876
|
-
0x0435
|
8906
|
+
0x0435 ChannelOptions? no
|
8877
8907
|
0x0436 OnionSkins? no
|
8878
8908
|
0x0438 CountInfo? no
|
8879
8909
|
0x043a PrintInfo2? no
|
@@ -12908,6 +12938,35 @@ Thermal parameters extracted from APP4 of some DJI RJPEG files.
|
|
12908
12938
|
8 Emissivity no
|
12909
12939
|
10 ReflectedTemperature no
|
12910
12940
|
|
12941
|
+
=head3 DJI Protobuf Tags
|
12942
|
+
|
12943
|
+
Tags found in protobuf-format DJI meta djmd and dbgi timed metadata. Only a
|
12944
|
+
few tags are currently known, but unknown djmd tags may be extracted by
|
12945
|
+
setting the Unknown option to 1 (or 2 to also extract unknown dbgi debug
|
12946
|
+
tags). Tag ID's are composed of the corresponding .proto file name combined
|
12947
|
+
with the hierarchical protobuf field numbers. The "dvtm_AVATA2.proto" file
|
12948
|
+
is used by the DJI Avanta 2, and "dvtm_ac203.proto" by the OsmoAction4.
|
12949
|
+
|
12950
|
+
Tag ID Tag Name Writable
|
12951
|
+
------ -------- --------
|
12952
|
+
'Protocol' Protocol no
|
12953
|
+
'dvtm_AVATA2_1-1-10' Model no
|
12954
|
+
'dvtm_AVATA2_2-2-3-1' SerialNumber no
|
12955
|
+
'dvtm_AVATA2_2-3-1' FrameWidth no
|
12956
|
+
'dvtm_AVATA2_2-3-2' FrameHeight no
|
12957
|
+
'dvtm_AVATA2_2-3-3' FrameRate no
|
12958
|
+
'dvtm_AVATA2_3-1-2' TimeStamp no
|
12959
|
+
'dvtm_AVATA2_3-4-4-1-2' GPSLatitude no
|
12960
|
+
'dvtm_AVATA2_3-4-4-1-3' GPSLongitude no
|
12961
|
+
'dvtm_ac203_1-1-10' Model no
|
12962
|
+
'dvtm_ac203_2-3-1' FrameWidth no
|
12963
|
+
'dvtm_ac203_2-3-2' FrameHeight no
|
12964
|
+
'dvtm_ac203_2-3-3' FrameRate no
|
12965
|
+
'dvtm_ac203_3-4-2-1-2' GPSLatitude no
|
12966
|
+
'dvtm_ac203_3-4-2-1-3' GPSLongitude no
|
12967
|
+
'dvtm_ac203_3-4-2-2' GPSAltitude no
|
12968
|
+
'dvtm_ac203_3-4-2-6-1' GPSDateTime no
|
12969
|
+
|
12911
12970
|
=head2 FLIR Tags
|
12912
12971
|
|
12913
12972
|
Information extracted from the maker notes of JPEG images from thermal
|
@@ -24715,6 +24774,7 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
|
|
24715
24774
|
'GLPI' GPSPos GoPro GLPI
|
24716
24775
|
'GPRI' GPSRaw? GoPro GPRI
|
24717
24776
|
'GPS5' GPSInfo GoPro GPS5
|
24777
|
+
'GPS9' GPSInfo9 GoPro GPS9
|
24718
24778
|
'GPSA' GPSAltitudeSystem no
|
24719
24779
|
'GPSF' GPSMeasureMode no
|
24720
24780
|
'GPSP' GPSHPositioningError no
|
@@ -24760,11 +24820,14 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
|
|
24760
24820
|
'TMPC' CameraTemperature no
|
24761
24821
|
'TSMP' TotalSamples? no
|
24762
24822
|
'TYPE' StructureType? no
|
24823
|
+
'TZON' TimeZone no
|
24763
24824
|
'UNIF' InputUniformity no
|
24764
24825
|
'UNIT' Units? no
|
24765
24826
|
'VERS' MetadataVersion no
|
24766
24827
|
'VFOV' FieldOfView no
|
24828
|
+
'VFPS' VideoFrameRate no
|
24767
24829
|
'VFRH' VisualFlightRulesHUD no
|
24830
|
+
'VRES' VideoFrameSize no
|
24768
24831
|
'WBAL' ColorTemperatures no
|
24769
24832
|
'WNDM' WindProcessing no
|
24770
24833
|
'WRGB' WhiteBalanceRGB no
|
@@ -24804,6 +24867,19 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
|
|
24804
24867
|
3 GPSSpeed no
|
24805
24868
|
4 GPSSpeed3D no
|
24806
24869
|
|
24870
|
+
=head3 GoPro GPS9 Tags
|
24871
|
+
|
24872
|
+
Index Tag Name Writable
|
24873
|
+
----- -------- --------
|
24874
|
+
0 GPSLatitude no
|
24875
|
+
1 GPSLongitude no
|
24876
|
+
2 GPSAltitude no
|
24877
|
+
3 GPSSpeed no
|
24878
|
+
4 GPSSpeed3D no
|
24879
|
+
6 GPSDateTime no
|
24880
|
+
7 GPSDOP no
|
24881
|
+
8 GPSMeasureMode no
|
24882
|
+
|
24807
24883
|
=head3 GoPro KBAT Tags
|
24808
24884
|
|
24809
24885
|
Battery status information found in GoPro Karma videos.
|
@@ -29943,7 +30019,7 @@ for the official QuickTime specification.
|
|
29943
30019
|
The tags below are extracted from timed metadata in QuickTime and other
|
29944
30020
|
formats of video files when the ExtractEmbedded option is used. Although
|
29945
30021
|
most of these tags are combined into the single table below, ExifTool
|
29946
|
-
currently reads
|
30022
|
+
currently reads 85 different formats of timed GPS metadata from video files.
|
29947
30023
|
|
29948
30024
|
Tag Name Writable
|
29949
30025
|
-------- --------
|
@@ -29954,6 +30030,8 @@ currently reads 78 different formats of timed GPS metadata from video files.
|
|
29954
30030
|
CameraDateTime no
|
29955
30031
|
CameraModel no
|
29956
30032
|
Car no
|
30033
|
+
DJIDebug? DJI Protobuf
|
30034
|
+
DJIMetadata DJI Protobuf
|
29957
30035
|
DateTimeOriginal no
|
29958
30036
|
DateTimeStamp no
|
29959
30037
|
Distance no
|
@@ -2194,7 +2194,7 @@ sub SetSystemTags($$)
|
|
2194
2194
|
} elsif (ref $file) {
|
2195
2195
|
$self->Warn('Writing ZoneIdentifer requires a file name');
|
2196
2196
|
} elsif (defined $self->GetNewValue('ZoneIdentifier', \$zhash)) {
|
2197
|
-
$self->Warn('ZoneIndentifier may only be
|
2197
|
+
$self->Warn('ZoneIndentifier may only be deleted');
|
2198
2198
|
} elsif (not eval { require Win32API::File }) {
|
2199
2199
|
$self->Warn('Install Win32API::File to write ZoneIdentifier');
|
2200
2200
|
} else {
|
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
|
|
50
50
|
use Image::ExifTool::GPS;
|
51
51
|
require Exporter;
|
52
52
|
|
53
|
-
$VERSION = '3.
|
53
|
+
$VERSION = '3.70';
|
54
54
|
@ISA = qw(Exporter);
|
55
55
|
@EXPORT_OK = qw(EscapeXML UnescapeXML);
|
56
56
|
|
@@ -207,6 +207,8 @@ my %xmpNS = (
|
|
207
207
|
# Note: Google uses a prefix of 'Container', but this conflicts with the
|
208
208
|
# Device Container namespace, also by Google. So call this one GContainer
|
209
209
|
GContainer=> 'http://ns.google.com/photos/1.0/container/',
|
210
|
+
HDRGainMap=> 'http://ns.apple.com/HDRGainMap/1.0/',
|
211
|
+
apdi => 'http://ns.apple.com/pixeldatainfo/1.0/',
|
210
212
|
);
|
211
213
|
|
212
214
|
# build reverse namespace lookup
|
@@ -934,6 +936,14 @@ my %sRangeMask = (
|
|
934
936
|
Name => 'xmpDSA',
|
935
937
|
SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::DSA' },
|
936
938
|
},
|
939
|
+
HDRGainMap => {
|
940
|
+
Name => 'HDRGainMap',
|
941
|
+
SubDirectory => { TagTable => 'Image::ExifTool::XMP::HDRGainMap' },
|
942
|
+
},
|
943
|
+
apdi => {
|
944
|
+
Name => 'apdi',
|
945
|
+
SubDirectory => { TagTable => 'Image::ExifTool::XMP::apdi' },
|
946
|
+
},
|
937
947
|
seal => {
|
938
948
|
Name => 'seal',
|
939
949
|
SubDirectory => { TagTable => 'Image::ExifTool::XMP::seal' },
|
@@ -2250,6 +2250,44 @@ my %sACDSeeRegionStruct = (
|
|
2250
2250
|
Gamma => { Writable => 'real', List => 'Seq', Avoid => 1 },
|
2251
2251
|
);
|
2252
2252
|
|
2253
|
+
%Image::ExifTool::XMP::HDRGainMap = (
|
2254
|
+
%xmpTableDefaults,
|
2255
|
+
GROUPS => { 1 => 'XMP-HDRGainMap', 2 => 'Unknown' },
|
2256
|
+
NAMESPACE => 'HDRGainMap',
|
2257
|
+
NOTES => 'Used in Apple HDR GainMap images.',
|
2258
|
+
HDRGainMapVersion => {
|
2259
|
+
PrintConv => 'IsInt($val) ? join(".",unpack("C*", pack "N", $val)) : $val',
|
2260
|
+
PrintConvInv => q{
|
2261
|
+
return $val unless $val =~ /^\d+\.\d+\.\d+\.\d+$/;
|
2262
|
+
return unpack('N', pack('C*', split /\./, $val));
|
2263
|
+
},
|
2264
|
+
},
|
2265
|
+
);
|
2266
|
+
|
2267
|
+
%Image::ExifTool::XMP::apdi = (
|
2268
|
+
%xmpTableDefaults,
|
2269
|
+
GROUPS => { 1 => 'XMP-apdi', 2 => 'Image' },
|
2270
|
+
NAMESPACE => 'apdi',
|
2271
|
+
NOTES => 'Used in Apple HDR GainMap images.',
|
2272
|
+
NativeFormat => {
|
2273
|
+
PrintConv => q{
|
2274
|
+
return $val unless IsInt($val);
|
2275
|
+
my $tmp = pack("N", $val);
|
2276
|
+
$tmp =~ /^\w{4}$/ ? $tmp : $val;
|
2277
|
+
},
|
2278
|
+
PrintConvInv => '$val =~ /^\w{4}$/ ? unpack("N", $val) : $val',
|
2279
|
+
},
|
2280
|
+
AuxiliaryImageType => { },
|
2281
|
+
StoredFormat => {
|
2282
|
+
PrintConv => q{
|
2283
|
+
return $val unless IsInt($val);
|
2284
|
+
my $tmp = pack("N", $val);
|
2285
|
+
$tmp =~ /^\w{4}$/ ? $tmp : $val;
|
2286
|
+
},
|
2287
|
+
PrintConvInv => '$val =~ /^\w{4}$/ ? unpack("N", $val) : $val',
|
2288
|
+
},
|
2289
|
+
);
|
2290
|
+
|
2253
2291
|
# SVG namespace properties (ref 9)
|
2254
2292
|
%Image::ExifTool::XMP::SVG = (
|
2255
2293
|
GROUPS => { 0 => 'SVG', 1 => 'SVG', 2 => 'Image' },
|
@@ -2307,19 +2345,23 @@ my %sACDSeeRegionStruct = (
|
|
2307
2345
|
GROUPS => { 0 => 'XML', 1 => 'SEAL', 2 => 'Document' },
|
2308
2346
|
PROCESS_PROC => \&ProcessSEAL,
|
2309
2347
|
NOTES => q{
|
2310
|
-
These tags are used in SEAL
|
2311
|
-
format, not XMP. ExifTool has
|
2312
|
-
JPG, TIFF, XMP, PNG, WEBP, HEIC,
|
2313
|
-
support in PDF, MKV and WAV. Use
|
2314
|
-
delete SEAL information in supported
|
2348
|
+
These tags are used in SEAL (Secure Evidence Attribution Label) content
|
2349
|
+
authentification, which is actually XML format, not XMP. ExifTool has
|
2350
|
+
read/delete support for SEAL information in JPG, TIFF, XMP, PNG, WEBP, HEIC,
|
2351
|
+
PPM, MOV and MP4 files, and read-only support in PDF, MKV and WAV. Use
|
2352
|
+
C<-seal:all=> on the command line to delete SEAL information in supported
|
2353
|
+
formats. See L<https://github.com/hackerfactor/SEAL> for the specification.
|
2315
2354
|
},
|
2316
2355
|
seal=> 'SEALVersion',
|
2317
|
-
kv => 'KeyVersion',
|
2318
2356
|
ka => 'KeyAlgorithm',
|
2357
|
+
kv => 'KeyVersion',
|
2319
2358
|
da => 'DigestAlgorithm',
|
2320
|
-
sf => 'SignatureFormat',
|
2321
|
-
d => 'Domain',
|
2322
2359
|
b => 'ByteRange',
|
2360
|
+
d => 'Domain',
|
2361
|
+
uid => 'UniqueIdentifier',
|
2362
|
+
id => 'Identifier',
|
2363
|
+
sf => 'SignatureFormat',
|
2364
|
+
sl => 'SignatureLength',
|
2323
2365
|
's' => 'Signature',
|
2324
2366
|
info=> 'SEALComment',
|
2325
2367
|
copyright => { Name => 'Copyright', Groups => { 2 => 'Author' } },
|
data/bin/lib/Image/ExifTool.pm
CHANGED
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
|
|
29
29
|
%jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
|
30
30
|
%static_vars $advFmtSelf);
|
31
31
|
|
32
|
-
$VERSION = '13.
|
32
|
+
$VERSION = '13.06';
|
33
33
|
$RELEASE = '';
|
34
34
|
@ISA = qw(Exporter);
|
35
35
|
%EXPORT_TAGS = (
|
@@ -2583,7 +2583,7 @@ sub Options($$;@)
|
|
2583
2583
|
warn("Can't set $param to undef\n");
|
2584
2584
|
}
|
2585
2585
|
} elsif (lc $param eq 'geodir') {
|
2586
|
-
$Image::ExifTool::Geolocation::geoDir = $newVal;
|
2586
|
+
$Image::ExifTool::Geolocation::geoDir = $newVal;
|
2587
2587
|
} else {
|
2588
2588
|
if ($param eq 'Escape') {
|
2589
2589
|
# set ESCAPE_PROC
|
@@ -2763,10 +2763,16 @@ sub ExtractInfo($;@)
|
|
2763
2763
|
if ($$req{filepath} or
|
2764
2764
|
($reqAll and not $$self{EXCL_TAG_LOOKUP}{filepath}))
|
2765
2765
|
{
|
2766
|
+
my $path;
|
2766
2767
|
local $SIG{'__WARN__'} = \&SetWarning;
|
2767
|
-
if (
|
2768
|
-
|
2769
|
-
|
2768
|
+
if ($^O eq 'MSWin32' and $$options{WindowsLongPath}) {
|
2769
|
+
$path = $self->WindowsLongPath($filename);
|
2770
|
+
} elsif (eval { require Cwd }) {
|
2771
|
+
$path = eval { Cwd::abs_path($filename) };
|
2772
|
+
}
|
2773
|
+
if (defined $path) {
|
2774
|
+
$path =~ tr/\\/\// if $^O eq 'MSWin32'; # return forward slashes
|
2775
|
+
$self->FoundTag('FilePath', $path);
|
2770
2776
|
} elsif ($$req{filepath}) {
|
2771
2777
|
$self->WarnOnce('The Perl Cwd module must be installed to use FilePath');
|
2772
2778
|
}
|
@@ -4404,6 +4410,7 @@ sub DoneExtract($)
|
|
4404
4410
|
local $SIG{'__WARN__'} = \&SetWarning;
|
4405
4411
|
undef $evalWarning;
|
4406
4412
|
$$opts{GeolocMulti} = $$opts{Duplicates};
|
4413
|
+
$self->VPrint(0, "Geolocation arguments: '${arg}'\n");
|
4407
4414
|
my ($cities, $dist) = Image::ExifTool::Geolocation::Geolocate($arg, $opts);
|
4408
4415
|
delete $$opts{GeolocMulti};
|
4409
4416
|
if ($cities and (@$cities < 2 or $dist or not $self->Warn('Multiple Geolocation cities are possible',2))) {
|
@@ -4632,8 +4639,7 @@ sub EncodeFileName($$;$)
|
|
4632
4639
|
}
|
4633
4640
|
}
|
4634
4641
|
}
|
4635
|
-
$
|
4636
|
-
if ($hasSpecialChars or $force) {
|
4642
|
+
if ($hasSpecialChars or $force or $$self{OPTIONS}{WindowsLongPath} or $$self{OPTIONS}{WindowsWideFile}) {
|
4637
4643
|
$enc or $enc = 'UTF8';
|
4638
4644
|
if ($^O eq 'MSWin32') {
|
4639
4645
|
local $SIG{'__WARN__'} = \&SetWarning;
|
@@ -4654,8 +4660,8 @@ sub EncodeFileName($$;$)
|
|
4654
4660
|
|
4655
4661
|
#------------------------------------------------------------------------------
|
4656
4662
|
# Rebuild a path as an absolute long path to be usable in Windows system calls
|
4657
|
-
# Inputs: 0) ExifTool ref, 1) path string
|
4658
|
-
# Returns: normalized long path
|
4663
|
+
# Inputs: 0) ExifTool ref, 1) path string (CharsetFileName)
|
4664
|
+
# Returns: normalized long path (CharsetFileName)
|
4659
4665
|
# Note: this should only be called for Windows systems
|
4660
4666
|
# References:
|
4661
4667
|
# - https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats
|
@@ -4674,12 +4680,25 @@ sub WindowsLongPath($$)
|
|
4674
4680
|
my ($self, $path) = @_;
|
4675
4681
|
my $debug = $$self{OPTIONS}{Debug};
|
4676
4682
|
my $out = $$self{OPTIONS}{TextOut};
|
4683
|
+
my $suffix = '';
|
4684
|
+
my $longPath;
|
4685
|
+
|
4686
|
+
# remove common suffixes to make cache more effective
|
4687
|
+
if ($path =~ s/(_original|_exiftool_tmp|:Zone\.Identifier)$//) {
|
4688
|
+
$suffix = $1;
|
4689
|
+
if (not length $path or $path =~ m([:./\\]$)) {
|
4690
|
+
# don't remove suffix if it could be the whole file name
|
4691
|
+
$path .= $suffix;
|
4692
|
+
$suffix = '';
|
4693
|
+
}
|
4694
|
+
}
|
4695
|
+
return $$self{LONG_PATH_OUT}.$suffix if defined $$self{LONG_PATH_IN} and $$self{LONG_PATH_IN} eq $path;
|
4677
4696
|
|
4678
|
-
$debug and print $out "WindowsLongPath input : $path\n";
|
4697
|
+
$debug and print $out "WindowsLongPath input : $path$suffix\n";
|
4679
4698
|
|
4680
4699
|
for (;;) { # (cheap goto)
|
4681
|
-
$path =~ tr(/)(\\); # convert slashes to backslashes
|
4682
|
-
last if $
|
4700
|
+
($longPath = $path) =~ tr(/)(\\); # convert slashes to backslashes
|
4701
|
+
last if $longPath =~ /^\\\\\?\\/; # already a device path in the format we want
|
4683
4702
|
|
4684
4703
|
unless ($k32GetFullPathName) { # need to import (once) GetFullPathNameW
|
4685
4704
|
last if defined $k32GetFullPathName;
|
@@ -4695,23 +4714,27 @@ sub WindowsLongPath($$)
|
|
4695
4714
|
}
|
4696
4715
|
}
|
4697
4716
|
my $enc = $$self{OPTIONS}{CharsetFileName};
|
4698
|
-
my $encPath = $self->Encode($
|
4717
|
+
my $encPath = $self->Encode($longPath, 'UTF16', 'II', $enc);# need to encode to UTF16
|
4699
4718
|
my $lenReq = $k32GetFullPathName->Call($encPath,0,0,0) + 1; # first pass gets length required, +1 for safety (null?)
|
4700
4719
|
my $fullPath = "\0" x $lenReq x 2; # create buffer to hold full path
|
4701
4720
|
$k32GetFullPathName->Call($encPath, $lenReq, $fullPath, 0); # fullPath is UTF16 now
|
4702
|
-
$
|
4721
|
+
$longPath = $self->Decode($fullPath, 'UTF16', 'II', $enc);
|
4703
4722
|
|
4704
|
-
last if length($
|
4723
|
+
last if length($longPath) <= 247 - length($suffix);
|
4705
4724
|
|
4706
|
-
if ($
|
4707
|
-
$
|
4725
|
+
if ($longPath =~ /^\\\\/) {
|
4726
|
+
$longPath = '\\\\?\\UNC' . substr($longPath, 1);
|
4708
4727
|
} else {
|
4709
|
-
$
|
4728
|
+
$longPath = '\\\\?\\' . $longPath;
|
4710
4729
|
}
|
4711
4730
|
last;
|
4712
4731
|
}
|
4713
|
-
|
4714
|
-
return
|
4732
|
+
# this may be called repeatedly for the same file file (exists, stat, open),
|
4733
|
+
# so cache the last return value (without any of the suffixes that we use)
|
4734
|
+
$$self{LONG_PATH_IN} = $path;
|
4735
|
+
$$self{LONG_PATH_OUT} = $longPath;
|
4736
|
+
$debug and print $out "WindowsLongPath return: $longPath$suffix\n";
|
4737
|
+
return $longPath . $suffix;
|
4715
4738
|
}
|
4716
4739
|
|
4717
4740
|
#------------------------------------------------------------------------------
|
@@ -7432,7 +7455,7 @@ sub ProcessJPEG($$;$)
|
|
7432
7455
|
}
|
7433
7456
|
# handle all other markers
|
7434
7457
|
my $dumpType = '';
|
7435
|
-
my ($desc, $tip, $xtra);
|
7458
|
+
my ($desc, $tip, $xtra, $useJpegMain);
|
7436
7459
|
$length = length $$segDataPt;
|
7437
7460
|
$appBytes += $length + 4 if ($marker & 0xf0) == 0xe0; # total size of APP segments
|
7438
7461
|
if ($verbose) {
|
@@ -7652,7 +7675,7 @@ sub ProcessJPEG($$;$)
|
|
7652
7675
|
$self->Warn("Ignored APP1 segment length $length (unknown header)");
|
7653
7676
|
}
|
7654
7677
|
}
|
7655
|
-
} elsif ($marker == 0xe2) { # APP2 (ICC Profile, FPXR, MPF, InfiRay, PreviewImage)
|
7678
|
+
} elsif ($marker == 0xe2) { # APP2 (ICC Profile, FPXR, MPF, InfiRay, URN, PreviewImage)
|
7656
7679
|
if ($$segDataPt =~ /^ICC_PROFILE\0/ and $length >= 14) {
|
7657
7680
|
$dumpType = 'ICC_Profile';
|
7658
7681
|
# must concatenate profile chunks (note: handle the case where
|
@@ -7725,6 +7748,9 @@ sub ProcessJPEG($$;$)
|
|
7725
7748
|
# Digilife DDC-690/Rollei="BGTH"
|
7726
7749
|
$dumpType = 'Preview Image';
|
7727
7750
|
$preview = substr($$segDataPt, length($1));
|
7751
|
+
} elsif ($$segDataPt =~ /^urn:/) { # (found in Apple HDR images)
|
7752
|
+
$dumpType = 'URN';
|
7753
|
+
$useJpegMain = 1;
|
7728
7754
|
} elsif ($preview) {
|
7729
7755
|
$dumpType = 'Preview Image';
|
7730
7756
|
$preview .= $$segDataPt;
|
@@ -7994,17 +8020,14 @@ sub ProcessJPEG($$;$)
|
|
7994
8020
|
DirStart(\%dirInfo, 5);
|
7995
8021
|
$self->ProcessDirectory(\%dirInfo, GetTagTable("Image::ExifTool::XMP::SEAL"));
|
7996
8022
|
}
|
7997
|
-
} elsif ($marker == 0xea) { # APP10 (PhotoStudio Unicode comments)
|
8023
|
+
} elsif ($marker == 0xea) { # APP10 (PhotoStudio Unicode comments, HDR gain curve)
|
7998
8024
|
if ($$segDataPt =~ /^UNICODE\0/) {
|
7999
8025
|
$dumpType = 'PhotoStudio';
|
8000
8026
|
my $comment = $self->Decode(substr($$segDataPt,8), 'UCS2', 'MM');
|
8001
8027
|
$self->FoundTag('Comment', $comment);
|
8002
|
-
} elsif ($$segDataPt =~ /^AROT\0/
|
8003
|
-
|
8004
|
-
|
8005
|
-
# "Absolute ROTational difference between two frames"
|
8006
|
-
# (see https://www.hackerfactor.com/blog/index.php?/archives/822-Apple-Rot.html)
|
8007
|
-
$xtra = 'segment (N=' . unpack('x6N', $$segDataPt) . ')';
|
8028
|
+
} elsif ($$segDataPt =~ /^AROT\0\0.{4}/s) {
|
8029
|
+
$dumpType = 'AROT', # (HDR gain curve? PH guess)
|
8030
|
+
$useJpegMain = 1;
|
8008
8031
|
}
|
8009
8032
|
} elsif ($marker == 0xeb) { # APP11 (JPEG-HDR, JUMBF)
|
8010
8033
|
if ($$segDataPt =~ /^HDR_RI /) {
|
@@ -8171,6 +8194,10 @@ sub ProcessJPEG($$;$)
|
|
8171
8194
|
$desc = "[JPEG $markerName]"; # (other known JPEG segments)
|
8172
8195
|
}
|
8173
8196
|
if (defined $dumpType) {
|
8197
|
+
if ($useJpegMain) {
|
8198
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::JPEG::Main');
|
8199
|
+
$self->HandleTag($tagTablePtr, $markerName, $$segDataPt);
|
8200
|
+
}
|
8174
8201
|
if (not $dumpType and ($$options{Unknown} or $$options{Validate})) {
|
8175
8202
|
my $str = ($$segDataPt =~ /^([\x20-\x7e]{1,20})\0/) ? " '${1}'" : '';
|
8176
8203
|
$xtra = 'segment' unless $xtra;
|
@@ -8915,6 +8942,7 @@ sub GetTagInfo($$$;$$$)
|
|
8915
8942
|
my ($valPt, $format, $count);
|
8916
8943
|
|
8917
8944
|
my @infoArray = GetTagInfoList($tagTablePtr, $tagID);
|
8945
|
+
my $options = $$self{OPTIONS};
|
8918
8946
|
# evaluate condition
|
8919
8947
|
my $tagInfo;
|
8920
8948
|
foreach $tagInfo (@infoArray) {
|
@@ -8933,9 +8961,9 @@ sub GetTagInfo($$$;$$$)
|
|
8933
8961
|
}
|
8934
8962
|
}
|
8935
8963
|
# don't return Unknown tags unless that option is set (also see forum13716)
|
8936
|
-
if ($$tagInfo{Unknown} and not $$
|
8937
|
-
($$
|
8938
|
-
($$
|
8964
|
+
if ($$tagInfo{Unknown} and not $$options{Unknown} and not
|
8965
|
+
($$options{Verbose} or $$self{HTML_DUMP} or
|
8966
|
+
($$options{Validate} and not $$tagInfo{AddedUnknown})))
|
8939
8967
|
{
|
8940
8968
|
return undef;
|
8941
8969
|
}
|
@@ -8943,7 +8971,7 @@ sub GetTagInfo($$$;$$$)
|
|
8943
8971
|
return $tagInfo;
|
8944
8972
|
}
|
8945
8973
|
# generate information for unknown tags (numerical only) if required
|
8946
|
-
if (not $tagInfo and ($$
|
8974
|
+
if (not $tagInfo and ($$options{Unknown} or $$options{Verbose} or $$self{HTML_DUMP}) and
|
8947
8975
|
$tagID =~ /^\d+$/ and not $$self{NO_UNKNOWN})
|
8948
8976
|
{
|
8949
8977
|
my $printConv;
|
data/bin/lib/Image/ExifTool.pod
CHANGED
@@ -1197,14 +1197,15 @@ on tag values and JPEG segment data respectively.
|
|
1197
1197
|
=item WindowsLongPath
|
1198
1198
|
|
1199
1199
|
Support long path names in Windows. Enabling this option automatically
|
1200
|
-
enables the WindowsWideFile feature.
|
1200
|
+
enables the WindowsWideFile feature. Default is 1.
|
1201
1201
|
|
1202
1202
|
=item WindowsWideFile
|
1203
1203
|
|
1204
1204
|
Force the use of wide-character Windows I/O functions. This may be
|
1205
1205
|
necessary when files are on a network drive and the current directory name
|
1206
|
-
contains Unicode characters.
|
1207
|
-
used only if the specified file path contains Unicode
|
1206
|
+
contains Unicode characters. Without this option the wide-character
|
1207
|
+
functions are used only if the specified file path contains Unicode
|
1208
|
+
characters.
|
1208
1209
|
|
1209
1210
|
=item WriteMode
|
1210
1211
|
|
@@ -2545,9 +2546,9 @@ GoPro, H264, HTML, ICC_Profile, ID3, IPTC, ISO, ITC, JFIF, JPEG, JSON,
|
|
2545
2546
|
JUMBF, Jpeg2000, LNK, Leaf, Lytro, M2TS, MIE, MIFF, MISB, MNG, MOI, MPC,
|
2546
2547
|
MPEG, MPF, MXF, MakerNotes, Matroska, Meta, Ogg, OpenEXR, Opus, PDF, PICT,
|
2547
2548
|
PLIST, PNG, PSP, Palm, PanasonicRaw, Parrot, PhotoCD, PhotoMechanic,
|
2548
|
-
Photoshop, PostScript, PrintIM, QuickTime, RAF, RIFF, RSRC, RTF,
|
2549
|
-
Rawzor, Real, Red, SVG, SigmaRaw, Sony, Stim, Theora, Torrent,
|
2550
|
-
VCard, Vorbis, WTV, XML, XMP, ZIP
|
2549
|
+
Photoshop, PostScript, PrintIM, Protobuf, QuickTime, RAF, RIFF, RSRC, RTF,
|
2550
|
+
Radiance, Rawzor, Real, Red, SVG, SigmaRaw, Sony, Stim, Theora, Torrent,
|
2551
|
+
Trailer, VCard, Vorbis, WTV, XML, XMP, ZIP
|
2551
2552
|
|
2552
2553
|
=item Family 1 (Specific Location):
|
2553
2554
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exiftool_vendored
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 13.
|
4
|
+
version: 13.06.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew McEachen
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-
|
12
|
+
date: 2024-12-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: exiftool
|
@@ -257,6 +257,7 @@ files:
|
|
257
257
|
- bin/lib/Image/ExifTool/Photoshop.pm
|
258
258
|
- bin/lib/Image/ExifTool/PostScript.pm
|
259
259
|
- bin/lib/Image/ExifTool/PrintIM.pm
|
260
|
+
- bin/lib/Image/ExifTool/Protobuf.pm
|
260
261
|
- bin/lib/Image/ExifTool/Qualcomm.pm
|
261
262
|
- bin/lib/Image/ExifTool/QuickTime.pm
|
262
263
|
- bin/lib/Image/ExifTool/QuickTimeStream.pl
|