exiftool_vendored 13.03.0 → 13.06.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 +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
|