exiftool-vendored.exe 12.55.0 → 12.56.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 +19 -1
- package/bin/exiftool_files/README +19 -19
- package/bin/exiftool_files/arg_files/xmp2exif.args +4 -1
- package/bin/exiftool_files/exiftool.pl +26 -26
- package/bin/exiftool_files/fmt_files/kml.fmt +3 -0
- package/bin/exiftool_files/fmt_files/kml_track.fmt +3 -0
- package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +6 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +8 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +31 -2
- package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +69 -8
- package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/InfiRay.pm +227 -0
- package/bin/exiftool_files/lib/Image/ExifTool/JPEG.pm +40 -6
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +158 -380
- package/bin/exiftool_files/lib/Image/ExifTool/OpenEXR.pm +32 -15
- package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +80 -2
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +23 -14
- package/bin/exiftool_files/lib/Image/ExifTool/Real.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +5 -1
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +4536 -4519
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +216 -14
- package/bin/exiftool_files/lib/Image/ExifTool/VCard.pm +19 -5
- package/bin/exiftool_files/lib/Image/ExifTool.pm +55 -14
- package/bin/exiftool_files/lib/Image/ExifTool.pod +51 -50
- package/package.json +2 -2
|
@@ -7,6 +7,24 @@ RSS feed: https://exiftool.org/rss.xml
|
|
|
7
7
|
Note: The most recent production release is Version 12.50. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
Feb. 9, 2023 - Version 12.56
|
|
11
|
+
|
|
12
|
+
- Added support for VNT (both Scene7 Vignette and V-Note document) files
|
|
13
|
+
- Added read support for InfiRay APP2 metadata (thanks Marcos Del Sol Vives)
|
|
14
|
+
- Added some new Sony LensType values (thanks Jos Roost and Francois Piette)
|
|
15
|
+
- Added a new FujiFilm VideoRecordingMode value (thanks Greybeard)
|
|
16
|
+
- Added two new Canon LensTypes and CanonModelIDs (thanks Norbert Wasser)
|
|
17
|
+
- Added ability to extract semantic images from Apple ProRaw DNG files
|
|
18
|
+
- Added read support for the PNG cICP chunk
|
|
19
|
+
- Decode more Nikon tags (thanks Warren Hatch)
|
|
20
|
+
- Extract PreviewImage from Insta360 trailer record 0x200
|
|
21
|
+
- Extract EmbeddedImageRectangle and some other new tags from VNT files
|
|
22
|
+
- Minor improvement to arg_files/xmp2exif.args (thanks StarGeek)
|
|
23
|
+
- Enhanced -ee option to extract metadata from all frames of a multipart EXR
|
|
24
|
+
image
|
|
25
|
+
- Removed EXR Layout tag and incorporated into new Flags tag
|
|
26
|
+
- Patched possible hang problem when reading corrupted .rm audio files
|
|
27
|
+
|
|
10
28
|
Jan. 17, 2023 - Version 12.55
|
|
11
29
|
|
|
12
30
|
- Added support for geotagging from FlightAware KML files
|
|
@@ -14,7 +32,7 @@ Jan. 17, 2023 - Version 12.55
|
|
|
14
32
|
- Decode a few new Nikon tags (thanks Warren Hatch)
|
|
15
33
|
- Decode a new Samsung HEIC tag
|
|
16
34
|
- Decode FujiFilm RollAngle
|
|
17
|
-
- Fixed bug where FlatName property wasn't working properly for some
|
|
35
|
+
- Fixed bug where the FlatName property wasn't working properly for some
|
|
18
36
|
user-defined structure tags
|
|
19
37
|
|
|
20
38
|
Jan. 6, 2023 - Version 12.54
|
|
@@ -39,23 +39,23 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
39
39
|
CHM r | FPF r | MKA r | PFA r | TTF r
|
|
40
40
|
COS r | FPX r | MKS r | PFB r | TXT r
|
|
41
41
|
CR2 r/w | GIF r/w | MKV r | PFM r | VCF r
|
|
42
|
-
CR3 r/w | GPR r/w | MNG r/w | PGF r |
|
|
43
|
-
CRM r/w | GZ r | MOBI r | PGM r/w |
|
|
44
|
-
CRW r/w | HDP r/w | MODD r | PLIST r |
|
|
45
|
-
CS1 r/w | HDR r | MOI r | PICT r |
|
|
46
|
-
CSV r | HEIC r/w | MOS r/w | PMP r |
|
|
47
|
-
CUR r | HEIF r/w | MOV r/w | PNG r/w |
|
|
48
|
-
CZI r | HTML r | MP3 r | PPM r/w |
|
|
49
|
-
DCM r | ICC r/w/c | MP4 r/w | PPT r |
|
|
50
|
-
DCP r/w | ICO r | MPC r | PPTX r |
|
|
51
|
-
DCR r | ICS r | MPG r | PS r/w |
|
|
52
|
-
DFONT r | IDML r | MPO r/w | PSB r/w |
|
|
53
|
-
DIVX r | IIQ r/w | MQV r/w | PSD r/w |
|
|
54
|
-
DJVU r | IND r/w | MRC r | PSP r |
|
|
55
|
-
DLL r | INSP r/w | MRW r/w | QTIF r/w |
|
|
56
|
-
DNG r/w | INSV r | MXF r | R3D r |
|
|
57
|
-
DOC r | INX r | NEF r/w | RA r |
|
|
58
|
-
DOCX r | ISO r | NKSC r/w | RAF r/w |
|
|
42
|
+
CR3 r/w | GPR r/w | MNG r/w | PGF r | VNT r
|
|
43
|
+
CRM r/w | GZ r | MOBI r | PGM r/w | VRD r/w/c
|
|
44
|
+
CRW r/w | HDP r/w | MODD r | PLIST r | VSD r
|
|
45
|
+
CS1 r/w | HDR r | MOI r | PICT r | WAV r
|
|
46
|
+
CSV r | HEIC r/w | MOS r/w | PMP r | WDP r/w
|
|
47
|
+
CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBP r/w
|
|
48
|
+
CZI r | HTML r | MP3 r | PPM r/w | WEBM r
|
|
49
|
+
DCM r | ICC r/w/c | MP4 r/w | PPT r | WMA r
|
|
50
|
+
DCP r/w | ICO r | MPC r | PPTX r | WMV r
|
|
51
|
+
DCR r | ICS r | MPG r | PS r/w | WTV r
|
|
52
|
+
DFONT r | IDML r | MPO r/w | PSB r/w | WV r
|
|
53
|
+
DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
|
|
54
|
+
DJVU r | IND r/w | MRC r | PSP r | XCF r
|
|
55
|
+
DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
|
|
56
|
+
DNG r/w | INSV r | MXF r | R3D r | XLSX r
|
|
57
|
+
DOC r | INX r | NEF r/w | RA r | XMP r/w/c
|
|
58
|
+
DOCX r | ISO r | NKSC r/w | RAF r/w | ZIP r
|
|
59
59
|
|
|
60
60
|
Meta Information
|
|
61
61
|
----------------------+----------------------+---------------------
|
|
@@ -107,8 +107,8 @@ your home directory, then you would type the following commands in a
|
|
|
107
107
|
terminal window to extract and run ExifTool:
|
|
108
108
|
|
|
109
109
|
cd ~/Desktop
|
|
110
|
-
gzip -dc Image-ExifTool-12.
|
|
111
|
-
cd Image-ExifTool-12.
|
|
110
|
+
gzip -dc Image-ExifTool-12.56.tar.gz | tar -xf -
|
|
111
|
+
cd Image-ExifTool-12.56
|
|
112
112
|
./exiftool t/images/ExifTool.jpg
|
|
113
113
|
|
|
114
114
|
Note: These commands extract meta information from one of the test images.
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
# 2018/05/07 - PH Added support for GPSDestXxxRef tags
|
|
16
16
|
# 2021/09/30 - PH Removed erroneous "-" when copying CreatorTool
|
|
17
17
|
# 2022/03/31 - PH IPTC Photometadata Mapping Guidelines 2202.1 update
|
|
18
|
+
# 2023/01/30 - PH Also write Composite:SubSecDateTimeOriginal from
|
|
19
|
+
# XMP-exif:DateTimeOriginal
|
|
18
20
|
#
|
|
19
21
|
# References: http://www.metadataworkinggroup.org/specs/
|
|
20
22
|
# https://iptc.org/std/photometadata/documentation/mappingguidelines/
|
|
@@ -34,8 +36,9 @@
|
|
|
34
36
|
-EXIF:all < XMP-tiff:all
|
|
35
37
|
-EXIF:ImageDescription < XMP-dc:Description
|
|
36
38
|
-EXIF:DateTimeOriginal < XMP-photoshop:DateCreated
|
|
37
|
-
# the following
|
|
39
|
+
# the following SubSec tags also write/delete the corresponding EXIF
|
|
38
40
|
# SubSecTime and OffsetTime tags as appropriate
|
|
41
|
+
-Composite:SubSecDateTimeOriginal < XMP-exif:DateTimeOriginal
|
|
39
42
|
-Composite:SubSecDateTimeOriginal < XMP-photoshop:DateCreated
|
|
40
43
|
-Composite:SubSecCreateDate < XMP-xmp:CreateDate
|
|
41
44
|
-Composite:SubSecModifyDate < XMP-xmp:ModifyDate
|
|
@@ -11,7 +11,7 @@ use strict;
|
|
|
11
11
|
use warnings;
|
|
12
12
|
require 5.004;
|
|
13
13
|
|
|
14
|
-
my $version = '12.
|
|
14
|
+
my $version = '12.56';
|
|
15
15
|
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
17
17
|
my $exePath;
|
|
@@ -739,7 +739,7 @@ for (;;) {
|
|
|
739
739
|
}
|
|
740
740
|
if ($verbose > 1) {
|
|
741
741
|
print "Include directories:\n";
|
|
742
|
-
print " $_\n" foreach @INC;
|
|
742
|
+
ref $_ or print " $_\n" foreach @INC;
|
|
743
743
|
}
|
|
744
744
|
} else {
|
|
745
745
|
print "$version$str$Image::ExifTool::RELEASE\n";
|
|
@@ -4567,23 +4567,23 @@ DESCRIPTION
|
|
|
4567
4567
|
CHM r | FPF r | MKA r | PFA r | TTF r
|
|
4568
4568
|
COS r | FPX r | MKS r | PFB r | TXT r
|
|
4569
4569
|
CR2 r/w | GIF r/w | MKV r | PFM r | VCF r
|
|
4570
|
-
CR3 r/w | GPR r/w | MNG r/w | PGF r |
|
|
4571
|
-
CRM r/w | GZ r | MOBI r | PGM r/w |
|
|
4572
|
-
CRW r/w | HDP r/w | MODD r | PLIST r |
|
|
4573
|
-
CS1 r/w | HDR r | MOI r | PICT r |
|
|
4574
|
-
CSV r | HEIC r/w | MOS r/w | PMP r |
|
|
4575
|
-
CUR r | HEIF r/w | MOV r/w | PNG r/w |
|
|
4576
|
-
CZI r | HTML r | MP3 r | PPM r/w |
|
|
4577
|
-
DCM r | ICC r/w/c | MP4 r/w | PPT r |
|
|
4578
|
-
DCP r/w | ICO r | MPC r | PPTX r |
|
|
4579
|
-
DCR r | ICS r | MPG r | PS r/w |
|
|
4580
|
-
DFONT r | IDML r | MPO r/w | PSB r/w |
|
|
4581
|
-
DIVX r | IIQ r/w | MQV r/w | PSD r/w |
|
|
4582
|
-
DJVU r | IND r/w | MRC r | PSP r |
|
|
4583
|
-
DLL r | INSP r/w | MRW r/w | QTIF r/w |
|
|
4584
|
-
DNG r/w | INSV r | MXF r | R3D r |
|
|
4585
|
-
DOC r | INX r | NEF r/w | RA r |
|
|
4586
|
-
DOCX r | ISO r | NKSC r/w | RAF r/w |
|
|
4570
|
+
CR3 r/w | GPR r/w | MNG r/w | PGF r | VNT r
|
|
4571
|
+
CRM r/w | GZ r | MOBI r | PGM r/w | VRD r/w/c
|
|
4572
|
+
CRW r/w | HDP r/w | MODD r | PLIST r | VSD r
|
|
4573
|
+
CS1 r/w | HDR r | MOI r | PICT r | WAV r
|
|
4574
|
+
CSV r | HEIC r/w | MOS r/w | PMP r | WDP r/w
|
|
4575
|
+
CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBP r/w
|
|
4576
|
+
CZI r | HTML r | MP3 r | PPM r/w | WEBM r
|
|
4577
|
+
DCM r | ICC r/w/c | MP4 r/w | PPT r | WMA r
|
|
4578
|
+
DCP r/w | ICO r | MPC r | PPTX r | WMV r
|
|
4579
|
+
DCR r | ICS r | MPG r | PS r/w | WTV r
|
|
4580
|
+
DFONT r | IDML r | MPO r/w | PSB r/w | WV r
|
|
4581
|
+
DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
|
|
4582
|
+
DJVU r | IND r/w | MRC r | PSP r | XCF r
|
|
4583
|
+
DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
|
|
4584
|
+
DNG r/w | INSV r | MXF r | R3D r | XLSX r
|
|
4585
|
+
DOC r | INX r | NEF r/w | RA r | XMP r/w/c
|
|
4586
|
+
DOCX r | ISO r | NKSC r/w | RAF r/w | ZIP r
|
|
4587
4587
|
|
|
4588
4588
|
Meta Information
|
|
4589
4589
|
----------------------+----------------------+---------------------
|
|
@@ -5230,10 +5230,10 @@ OPTIONS
|
|
|
5230
5230
|
input files to be buffered in memory before the output is written.
|
|
5231
5231
|
This may result in excessive memory usage when processing a very
|
|
5232
5232
|
large number of files with a single command. Also, it makes this
|
|
5233
|
-
option incompatible with the -w
|
|
5234
|
-
number of files, it is recommended to either use the JSON
|
|
5235
|
-
XML (-X) output format, or use -p to generate a
|
|
5236
|
-
file instead of using the -csv option.
|
|
5233
|
+
option incompatible with the -w and -W options. When processing a
|
|
5234
|
+
large number of files, it is recommended to either use the JSON
|
|
5235
|
+
(-j) or XML (-X) output format, or use -p to generate a
|
|
5236
|
+
fixed-column CSV file instead of using the -csv option.
|
|
5237
5237
|
|
|
5238
5238
|
-csvDelim *STR*
|
|
5239
5239
|
Set the delimiter for separating CSV entries for CSV file
|
|
@@ -5501,7 +5501,7 @@ OPTIONS
|
|
|
5501
5501
|
|
|
5502
5502
|
produces output like this:
|
|
5503
5503
|
|
|
5504
|
-
-- Generated by ExifTool 12.
|
|
5504
|
+
-- Generated by ExifTool 12.56 --
|
|
5505
5505
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5506
5506
|
(f/5.6, 1/60s, ISO 100)
|
|
5507
5507
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -6011,8 +6011,8 @@ OPTIONS
|
|
|
6011
6011
|
return value of 1. Case is significant for function names.
|
|
6012
6012
|
|
|
6013
6013
|
End() - end processing after this file
|
|
6014
|
-
EndDir() - end processing of files in
|
|
6015
|
-
compatible with
|
|
6014
|
+
EndDir() - end processing of files in the current directory
|
|
6015
|
+
after this file (not compatible with -fileOrder)
|
|
6016
6016
|
|
|
6017
6017
|
Notes:
|
|
6018
6018
|
|
|
@@ -24,6 +24,9 @@
|
|
|
24
24
|
# extension is used.
|
|
25
25
|
# 5) The -fileOrder option may be used to control the order of the
|
|
26
26
|
# generated placemarks when processing multiple files.
|
|
27
|
+
# 6) The "0" in the coordinates line may be changed to "$gpsaltitude#"
|
|
28
|
+
# and the altitudeMode may be changed to "absolute" to store
|
|
29
|
+
# altitude information if it exists in the track log.
|
|
27
30
|
#------------------------------------------------------------------------------
|
|
28
31
|
#[HEAD]<?xml version="1.0" encoding="UTF-8"?>
|
|
29
32
|
#[HEAD]<kml xmlns="http://earth.google.com/kml/2.0">
|
|
@@ -21,6 +21,9 @@
|
|
|
21
21
|
# 2) The -fileOrder option may be used to control the order of the
|
|
22
22
|
# waypoints when processing multiple still-image files, or the
|
|
23
23
|
# order of the tracks when processing multiple video files.
|
|
24
|
+
# 3) The "0" in the BODY line below may be changed to "$gpsaltitude#"
|
|
25
|
+
# and the altitudeMode may be changed to "absolute" to store
|
|
26
|
+
# altitude information if it exists in the track log.
|
|
24
27
|
#------------------------------------------------------------------------------
|
|
25
28
|
#[HEAD]<?xml version="1.0" encoding="UTF-8"?>
|
|
26
29
|
#[HEAD]<kml xmlns="http://earth.google.com/kml/2.0">
|
|
@@ -314,10 +314,12 @@ C<integer> is a string of digits (possibly beginning with a '+' or '-'),
|
|
|
314
314
|
C<real> is a floating point number, C<rational> is entered as a floating
|
|
315
315
|
point number but stored as two C<integer> strings separated by a '/'
|
|
316
316
|
character, C<date> is a date/time string entered in the format "YYYY:mm:dd
|
|
317
|
-
HH:MM:SS[.ss][+/-HH:MM]"
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
317
|
+
HH:MM:SS[.ss][+/-HH:MM]" but some partial date/time formats are also
|
|
318
|
+
accepted (see L<https://exiftool.org/faq.html#Q5>), C<boolean> is either
|
|
319
|
+
"True" or "False" (but "true" and "false" may be written as a ValueConv
|
|
320
|
+
value for compatibility with non-conforming applications), C<struct>
|
|
321
|
+
indicates a structured tag, and C<lang-alt> is a tag that supports alternate
|
|
322
|
+
languages.
|
|
321
323
|
|
|
322
324
|
When reading, C<struct> tags are extracted only if the L<Struct|../ExifTool.html#Struct> (-struct)
|
|
323
325
|
option is used. Otherwise the corresponding I<Flattened> tags, indicated by
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.65';
|
|
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)
|
|
@@ -621,8 +621,10 @@ $VERSION = '4.64';
|
|
|
621
621
|
'61182.41' => 'Canon RF 1200mm F8L IS USM + RF1.4x', #42
|
|
622
622
|
'61182.42' => 'Canon RF 1200mm F8L IS USM + RF2x', #42
|
|
623
623
|
'61182.43' => 'Canon RF 135mm F1.8 L IS USM', #42
|
|
624
|
+
'61182.44' => 'Canon RF 24-50mm F4.5-6.3 IS STM', #42
|
|
625
|
+
'61182.45' => 'Canon RF-S 55-210mm F5-7.1 IS STM', #42
|
|
624
626
|
# we need the RFLensType values for the following...
|
|
625
|
-
'61182.
|
|
627
|
+
'61182.46' => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH (NC)
|
|
626
628
|
65535 => 'n/a',
|
|
627
629
|
);
|
|
628
630
|
|
|
@@ -983,7 +985,9 @@ $VERSION = '4.64';
|
|
|
983
985
|
0x80000465 => 'EOS R10', #42
|
|
984
986
|
0x80000467 => 'PowerShot ZOOM',
|
|
985
987
|
0x80000468 => 'EOS M50 Mark II / Kiss M2', #IB
|
|
988
|
+
0x80000480 => 'EOS R50', #42
|
|
986
989
|
0x80000481 => 'EOS R6 Mark II', #42
|
|
990
|
+
0x80000487 => 'EOS R8', #42
|
|
987
991
|
0x80000520 => 'EOS D2000C', #IB
|
|
988
992
|
0x80000560 => 'EOS D6000C', #PH (guess)
|
|
989
993
|
);
|
|
@@ -6840,6 +6844,8 @@ my %ciMaxFocal = (
|
|
|
6840
6844
|
300 => 'Canon RF 1200mm F8L IS USM + RF2x', #42
|
|
6841
6845
|
302 => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
|
|
6842
6846
|
303 => 'Canon RF 135mm F1.8 L IS USM', #42
|
|
6847
|
+
304 => 'Canon RF 24-50mm F4.5-6.3 IS STM', #42
|
|
6848
|
+
305 => 'Canon RF-S 55-210mm F5-7.1 IS STM', #42
|
|
6843
6849
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
|
6844
6850
|
},
|
|
6845
6851
|
},
|
|
@@ -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.43';
|
|
60
60
|
|
|
61
61
|
sub ProcessExif($$$);
|
|
62
62
|
sub WriteExif($$$);
|
|
@@ -578,6 +578,13 @@ my %opcodeInfo = (
|
|
|
578
578
|
ValueConv => '$val=join(" ",unpack("N*",pack("V*",split(" ",$val))));\$val',
|
|
579
579
|
ByteOrder => 'LittleEndian',
|
|
580
580
|
},
|
|
581
|
+
{
|
|
582
|
+
Condition => '$$self{Compression} and $$self{Compression} eq "34892"', # DNG Lossy JPEG
|
|
583
|
+
Name => 'OtherImageStart',
|
|
584
|
+
IsOffset => 1,
|
|
585
|
+
OffsetPair => 0x117, # point to associated byte counts
|
|
586
|
+
DataTag => 'OtherImage',
|
|
587
|
+
},
|
|
581
588
|
{
|
|
582
589
|
# (APP1 IFD2 is for Leica JPEG preview)
|
|
583
590
|
Condition => q[
|
|
@@ -664,6 +671,12 @@ my %opcodeInfo = (
|
|
|
664
671
|
ValueConv => '$val=join(" ",unpack("N*",pack("V*",split(" ",$val))));\$val',
|
|
665
672
|
ByteOrder => 'LittleEndian',
|
|
666
673
|
},
|
|
674
|
+
{
|
|
675
|
+
Condition => '$$self{Compression} and $$self{Compression} eq "34892"', # DNG Lossy JPEG
|
|
676
|
+
Name => 'OtherImageLength',
|
|
677
|
+
OffsetPair => 0x111, # point to associated offset
|
|
678
|
+
DataTag => 'OtherImage',
|
|
679
|
+
},
|
|
667
680
|
{
|
|
668
681
|
# (APP1 IFD2 is for Leica JPEG preview)
|
|
669
682
|
Condition => q[
|
|
@@ -4706,12 +4719,28 @@ my %subSecConv = (
|
|
|
4706
4719
|
0 => 'OtherImageStart',
|
|
4707
4720
|
1 => 'OtherImageLength',
|
|
4708
4721
|
},
|
|
4722
|
+
Desire => {
|
|
4723
|
+
2 => 'OtherImageStart (1)',
|
|
4724
|
+
3 => 'OtherImageLength (1)',
|
|
4725
|
+
},
|
|
4709
4726
|
Notes => q{
|
|
4710
4727
|
this tag is writable, and may be used to update existing embedded images,
|
|
4711
4728
|
but not create or delete them
|
|
4712
4729
|
},
|
|
4713
|
-
# retrieve
|
|
4730
|
+
# retrieve all other images
|
|
4714
4731
|
RawConv => q{
|
|
4732
|
+
if ($val[2] and $val[3]) {
|
|
4733
|
+
my $i = 1;
|
|
4734
|
+
for (;;) {
|
|
4735
|
+
my %val = ( 0 => $$val{2}, 1 => $$val{3} );
|
|
4736
|
+
$self->FoundTag($tagInfo, \%val);
|
|
4737
|
+
++$i;
|
|
4738
|
+
$$val{2} = "$$val{0} ($i)";
|
|
4739
|
+
last unless defined $$self{VALUE}{$$val{2}};
|
|
4740
|
+
$$val{3} = "$$val{1} ($i)";
|
|
4741
|
+
last unless defined $$self{VALUE}{$$val{3}};
|
|
4742
|
+
}
|
|
4743
|
+
}
|
|
4715
4744
|
@grps = $self->GetGroup($$val{0});
|
|
4716
4745
|
Image::ExifTool::Exif::ExtractImage($self,$val[0],$val[1],"OtherImage");
|
|
4717
4746
|
},
|
|
@@ -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.42';
|
|
25
25
|
|
|
26
26
|
sub ProcessFPX($$);
|
|
27
27
|
sub ProcessFPXR($$$);
|
|
@@ -483,10 +483,18 @@ my %fpxFileType = (
|
|
|
483
483
|
},
|
|
484
484
|
IeImg => {
|
|
485
485
|
Name => 'EmbeddedImage',
|
|
486
|
-
Notes =>
|
|
486
|
+
Notes => q{
|
|
487
|
+
embedded images in Scene7 vignette VNT files. EmbeddedImageRectangle is
|
|
488
|
+
generated for applicable images, and may be associated with the
|
|
489
|
+
corresponding EmbeddedImage via the family 3 group name
|
|
490
|
+
},
|
|
487
491
|
Groups => { 2 => 'Preview' },
|
|
488
492
|
Binary => 1,
|
|
489
493
|
},
|
|
494
|
+
IeImg_rect => { # (not a real tag -- extracted from Contents of VNT file)
|
|
495
|
+
Name => 'EmbeddedImageRectangle',
|
|
496
|
+
Hidden => 1,
|
|
497
|
+
},
|
|
490
498
|
);
|
|
491
499
|
|
|
492
500
|
# Summary Information properties
|
|
@@ -1059,6 +1067,7 @@ my %fpxFileType = (
|
|
|
1059
1067
|
%Image::ExifTool::FlashPix::Contents = (
|
|
1060
1068
|
PROCESS_PROC => \&ProcessProperties,
|
|
1061
1069
|
GROUPS => { 2 => 'Image' },
|
|
1070
|
+
OriginalFileName => { Name => 'OriginalFileName', Hidden => 1 }, # (not a real tag -- extracted from Contents of VNT file)
|
|
1062
1071
|
);
|
|
1063
1072
|
|
|
1064
1073
|
# CompObj tags
|
|
@@ -1537,11 +1546,43 @@ sub ProcessContents($$$)
|
|
|
1537
1546
|
my $isFLA;
|
|
1538
1547
|
|
|
1539
1548
|
# all of my FLA samples contain "Contents" data, and no other FPX-like samples have
|
|
1540
|
-
# this, but check the data for a familiar pattern to be
|
|
1541
|
-
# Contents of all of my FLA samples start with two bytes
|
|
1542
|
-
# then 0x01) followed by a number of zero bytes
|
|
1543
|
-
# somehow to the value of the first byte),
|
|
1544
|
-
|
|
1549
|
+
# this (except Scene7 VNT viles), but check the data for a familiar pattern to be
|
|
1550
|
+
# sure this is FLA: the Contents of all of my FLA samples start with two bytes
|
|
1551
|
+
# (0x29,0x38,0x3f,0x43 or 0x47, then 0x01) followed by a number of zero bytes
|
|
1552
|
+
# (from 0x18 to 0x26 of them, related somehow to the value of the first byte),
|
|
1553
|
+
# followed by the string "DocumentPage"
|
|
1554
|
+
if ($$dataPt =~ /^..\0+\xff\xff\x01\0\x0d\0CDocumentPage/s) {
|
|
1555
|
+
$isFLA = 1;
|
|
1556
|
+
} elsif ($$dataPt =~ /^\0{4}.(.{1,255})\x60\xa1\x3f\x22\0{5}(.{8})/sg) {
|
|
1557
|
+
# this looks like a VNT file
|
|
1558
|
+
$et->OverrideFileType('VNT', 'image/x-vignette');
|
|
1559
|
+
# hack to set proper file description (extension is the same for V-Note files)
|
|
1560
|
+
$Image::ExifTool::static_vars{OverrideFileDescription}{VNT} = 'Scene7 Vignette',
|
|
1561
|
+
my $name = $1;
|
|
1562
|
+
my ($w, $h) = unpack('V2',$2);
|
|
1563
|
+
$et->FoundTag(ImageWidth => $w);
|
|
1564
|
+
$et->FoundTag(ImageHeight => $h);
|
|
1565
|
+
$et->HandleTag($tagTablePtr, OriginalFileName => $name);
|
|
1566
|
+
if ($$dataPt =~ /\G\x01\0{4}(.{12})/sg) {
|
|
1567
|
+
# (first 4 bytes seem to be number of objects, next 4 bytes are zero, then ICC size)
|
|
1568
|
+
my $size = unpack('x8V', $1);
|
|
1569
|
+
# (not useful?) $et->FoundTag(NumObjects => $num);
|
|
1570
|
+
if ($size and pos($$dataPt) + $size < length($$dataPt)) {
|
|
1571
|
+
my $dat = substr($$dataPt, pos($$dataPt), $size);
|
|
1572
|
+
$et->FoundTag(ICC_Profile => $dat);
|
|
1573
|
+
pos($$dataPt) += $size;
|
|
1574
|
+
}
|
|
1575
|
+
$$et{IeImg_lkup} = { };
|
|
1576
|
+
# - the byte after TargetRole1 is 0x0d or 0x11 for separate images in my samples,
|
|
1577
|
+
# and 0x1c or 0x23 for inline masks
|
|
1578
|
+
while ($$dataPt =~ /\x0bTargetRole1.\x80\0\0\x01.{4}(.{24})/sg) {
|
|
1579
|
+
my ($index, @coords) = unpack('Vx4V4', $1);
|
|
1580
|
+
next if $index == 0xffffffff;
|
|
1581
|
+
$$et{IeImg_lkup}{$index} and $et->WarnOnce('Duplicate image index');
|
|
1582
|
+
$$et{IeImg_lkup}{$index} = "@coords";
|
|
1583
|
+
}
|
|
1584
|
+
}
|
|
1585
|
+
}
|
|
1545
1586
|
|
|
1546
1587
|
# do a brute-force scan of the "Contents" for UTF-16 XMP
|
|
1547
1588
|
# (this may always be little-endian, but allow for either endianness)
|
|
@@ -2337,8 +2378,24 @@ sub ProcessFPX($$)
|
|
|
2337
2378
|
);
|
|
2338
2379
|
my $subTablePtr = GetTagTable($$subdir{TagTable});
|
|
2339
2380
|
$et->ProcessDirectory(\%dirInfo, $subTablePtr, $$subdir{ProcessProc});
|
|
2381
|
+
} elsif (defined $size and $size > length($buff)) {
|
|
2382
|
+
$et->WarnOnce('Truncated object');
|
|
2340
2383
|
} else {
|
|
2341
|
-
$
|
|
2384
|
+
$buff = substr($buff, 0, $size) if defined $size and $size < length($buff);
|
|
2385
|
+
if ($tag =~ /^IeImg_0*(\d+)$/) {
|
|
2386
|
+
# set document number for embedded images and their positions (if available, VNT files)
|
|
2387
|
+
my $num = $1;
|
|
2388
|
+
$$et{DOC_NUM} = ++$$et{DOC_COUNT};
|
|
2389
|
+
$et->FoundTag($tagInfo, $buff);
|
|
2390
|
+
if ($$et{IeImg_lkup} and $$et{IeImg_lkup}{$num}) {
|
|
2391
|
+
# save position of this image
|
|
2392
|
+
$et->HandleTag($tagTablePtr, IeImg_rect => $$et{IeImg_lkup}{$num});
|
|
2393
|
+
delete $$et{IeImg_lkup}{$num};
|
|
2394
|
+
}
|
|
2395
|
+
delete $$et{DOC_NUM};
|
|
2396
|
+
} else {
|
|
2397
|
+
$et->FoundTag($tagInfo, $buff);
|
|
2398
|
+
}
|
|
2342
2399
|
}
|
|
2343
2400
|
# save object index number for all found tags
|
|
2344
2401
|
my $num2 = $$et{NUM_FOUND};
|
|
@@ -2395,6 +2452,10 @@ sub ProcessFPX($$)
|
|
|
2395
2452
|
# process Word document table
|
|
2396
2453
|
ProcessDocumentTable($et);
|
|
2397
2454
|
|
|
2455
|
+
if ($$et{IeImg_lkup} and %{$$et{IeImg_lkup}}) {
|
|
2456
|
+
$et->Warn('Image positions exist without corresponding images');
|
|
2457
|
+
}
|
|
2458
|
+
|
|
2398
2459
|
return 1;
|
|
2399
2460
|
}
|
|
2400
2461
|
|
|
@@ -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.87';
|
|
35
35
|
|
|
36
36
|
sub ProcessFujiDir($$$);
|
|
37
37
|
sub ProcessFaceRec($$$);
|
|
@@ -808,6 +808,7 @@ my %faceCategories = (
|
|
|
808
808
|
0x00 => 'Normal',
|
|
809
809
|
0x10 => 'F-log',
|
|
810
810
|
0x20 => 'HLG',
|
|
811
|
+
0x30 => 'F-log2', #forum14384
|
|
811
812
|
},
|
|
812
813
|
},
|
|
813
814
|
0x3804 => { #forum10037
|