exiftool-vendored.pl 12.54.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/Changes +34 -4
- package/bin/MANIFEST +5 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +19 -19
- package/bin/arg_files/xmp2exif.args +4 -1
- package/bin/exiftool +28 -28
- package/bin/fmt_files/kml.fmt +3 -0
- package/bin/fmt_files/kml_track.fmt +6 -3
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -5
- package/bin/lib/Image/ExifTool/Canon.pm +8 -2
- package/bin/lib/Image/ExifTool/Exif.pm +31 -2
- package/bin/lib/Image/ExifTool/FlashPix.pm +69 -8
- package/bin/lib/Image/ExifTool/FujiFilm.pm +3 -1
- package/bin/lib/Image/ExifTool/Geotag.pm +13 -4
- package/bin/lib/Image/ExifTool/InfiRay.pm +227 -0
- package/bin/lib/Image/ExifTool/JPEG.pm +40 -6
- package/bin/lib/Image/ExifTool/Matroska.pm +4 -4
- package/bin/lib/Image/ExifTool/Nikon.pm +187 -384
- package/bin/lib/Image/ExifTool/OpenEXR.pm +32 -15
- package/bin/lib/Image/ExifTool/PNG.pm +80 -2
- package/bin/lib/Image/ExifTool/QuickTime.pm +19 -4
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +127 -39
- package/bin/lib/Image/ExifTool/README +3 -0
- package/bin/lib/Image/ExifTool/Real.pm +2 -2
- package/bin/lib/Image/ExifTool/Sony.pm +5 -1
- package/bin/lib/Image/ExifTool/TagLookup.pm +4544 -4525
- package/bin/lib/Image/ExifTool/TagNames.pod +229 -21
- package/bin/lib/Image/ExifTool/VCard.pm +19 -5
- package/bin/lib/Image/ExifTool.pm +56 -15
- package/bin/lib/Image/ExifTool.pod +51 -50
- package/bin/perl-Image-ExifTool.spec +18 -18
- package/bin/pp_build_exe.args +7 -6
- package/package.json +3 -3
package/bin/Changes
CHANGED
|
@@ -7,13 +7,43 @@ 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
|
+
|
|
28
|
+
Jan. 17, 2023 - Version 12.55
|
|
29
|
+
|
|
30
|
+
- Added support for geotagging from FlightAware KML files
|
|
31
|
+
- Decode two more types of timed GPS from MOV/MP4 videos (66 types now)
|
|
32
|
+
- Decode a few new Nikon tags (thanks Warren Hatch)
|
|
33
|
+
- Decode a new Samsung HEIC tag
|
|
34
|
+
- Decode FujiFilm RollAngle
|
|
35
|
+
- Fixed bug where the FlatName property wasn't working properly for some
|
|
36
|
+
user-defined structure tags
|
|
37
|
+
|
|
10
38
|
Jan. 6, 2023 - Version 12.54
|
|
11
39
|
|
|
12
|
-
- Increased precision of Sony FocusDistance2 conversion
|
|
13
40
|
- Decode a number of new Apple tags (thanks Frank Rupprecht)
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
|
|
41
|
+
- Increased precision of Sony FocusDistance2 conversion
|
|
42
|
+
- Fixed problem where GPSAltitude wasn't being set when geotagging from KML
|
|
43
|
+
files
|
|
44
|
+
- Fixed bug writing HEIC/AVIF files which have a zero-sized mdat (ie. media
|
|
45
|
+
data extends to end of file) which could cause an incorrect mdat size to be
|
|
46
|
+
written
|
|
17
47
|
|
|
18
48
|
Jan. 4, 2023 - Version 12.53
|
|
19
49
|
|
package/bin/MANIFEST
CHANGED
|
@@ -90,6 +90,7 @@ html/TagNames/ID3.html
|
|
|
90
90
|
html/TagNames/IPTC.html
|
|
91
91
|
html/TagNames/ISO.html
|
|
92
92
|
html/TagNames/ITC.html
|
|
93
|
+
html/TagNames/InfiRay.html
|
|
93
94
|
html/TagNames/JFIF.html
|
|
94
95
|
html/TagNames/JPEG.html
|
|
95
96
|
html/TagNames/JSON.html
|
|
@@ -301,6 +302,7 @@ lib/Image/ExifTool/ISO.pm
|
|
|
301
302
|
lib/Image/ExifTool/ITC.pm
|
|
302
303
|
lib/Image/ExifTool/Import.pm
|
|
303
304
|
lib/Image/ExifTool/InDesign.pm
|
|
305
|
+
lib/Image/ExifTool/InfiRay.pm
|
|
304
306
|
lib/Image/ExifTool/JPEG.pm
|
|
305
307
|
lib/Image/ExifTool/JPEGDigest.pm
|
|
306
308
|
lib/Image/ExifTool/JSON.pm
|
|
@@ -616,6 +618,8 @@ t/InDesign.t
|
|
|
616
618
|
t/InDesign_2.out
|
|
617
619
|
t/InDesign_3.out
|
|
618
620
|
t/InDesign_4.out
|
|
621
|
+
t/InfiRay.t
|
|
622
|
+
t/InfiRay_2.out
|
|
619
623
|
t/JSON.t
|
|
620
624
|
t/JSON_2.out
|
|
621
625
|
t/JVC.t
|
|
@@ -1034,6 +1038,7 @@ t/images/IPTC.jpg
|
|
|
1034
1038
|
t/images/ISO.iso
|
|
1035
1039
|
t/images/ITC.itc
|
|
1036
1040
|
t/images/InDesign.indd
|
|
1041
|
+
t/images/InfiRay.jpg
|
|
1037
1042
|
t/images/JSON.json
|
|
1038
1043
|
t/images/JVC.jpg
|
|
1039
1044
|
t/images/JVC2.jpg
|
package/bin/META.json
CHANGED
package/bin/META.yml
CHANGED
package/bin/README
CHANGED
|
@@ -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
|
package/bin/exiftool
CHANGED
|
@@ -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
|
BEGIN {
|
|
@@ -725,7 +725,7 @@ for (;;) {
|
|
|
725
725
|
}
|
|
726
726
|
if ($verbose > 1) {
|
|
727
727
|
print "Include directories:\n";
|
|
728
|
-
print " $_\n" foreach @INC;
|
|
728
|
+
ref $_ or print " $_\n" foreach @INC;
|
|
729
729
|
}
|
|
730
730
|
} else {
|
|
731
731
|
print "$version$str$Image::ExifTool::RELEASE\n";
|
|
@@ -4558,23 +4558,23 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
4558
4558
|
CHM r | FPF r | MKA r | PFA r | TTF r
|
|
4559
4559
|
COS r | FPX r | MKS r | PFB r | TXT r
|
|
4560
4560
|
CR2 r/w | GIF r/w | MKV r | PFM r | VCF r
|
|
4561
|
-
CR3 r/w | GPR r/w | MNG r/w | PGF r |
|
|
4562
|
-
CRM r/w | GZ r | MOBI r | PGM r/w |
|
|
4563
|
-
CRW r/w | HDP r/w | MODD r | PLIST r |
|
|
4564
|
-
CS1 r/w | HDR r | MOI r | PICT r |
|
|
4565
|
-
CSV r | HEIC r/w | MOS r/w | PMP r |
|
|
4566
|
-
CUR r | HEIF r/w | MOV r/w | PNG r/w |
|
|
4567
|
-
CZI r | HTML r | MP3 r | PPM r/w |
|
|
4568
|
-
DCM r | ICC r/w/c | MP4 r/w | PPT r |
|
|
4569
|
-
DCP r/w | ICO r | MPC r | PPTX r |
|
|
4570
|
-
DCR r | ICS r | MPG r | PS r/w |
|
|
4571
|
-
DFONT r | IDML r | MPO r/w | PSB r/w |
|
|
4572
|
-
DIVX r | IIQ r/w | MQV r/w | PSD r/w |
|
|
4573
|
-
DJVU r | IND r/w | MRC r | PSP r |
|
|
4574
|
-
DLL r | INSP r/w | MRW r/w | QTIF r/w |
|
|
4575
|
-
DNG r/w | INSV r | MXF r | R3D r |
|
|
4576
|
-
DOC r | INX r | NEF r/w | RA r |
|
|
4577
|
-
DOCX r | ISO r | NKSC r/w | RAF r/w |
|
|
4561
|
+
CR3 r/w | GPR r/w | MNG r/w | PGF r | VNT r
|
|
4562
|
+
CRM r/w | GZ r | MOBI r | PGM r/w | VRD r/w/c
|
|
4563
|
+
CRW r/w | HDP r/w | MODD r | PLIST r | VSD r
|
|
4564
|
+
CS1 r/w | HDR r | MOI r | PICT r | WAV r
|
|
4565
|
+
CSV r | HEIC r/w | MOS r/w | PMP r | WDP r/w
|
|
4566
|
+
CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBP r/w
|
|
4567
|
+
CZI r | HTML r | MP3 r | PPM r/w | WEBM r
|
|
4568
|
+
DCM r | ICC r/w/c | MP4 r/w | PPT r | WMA r
|
|
4569
|
+
DCP r/w | ICO r | MPC r | PPTX r | WMV r
|
|
4570
|
+
DCR r | ICS r | MPG r | PS r/w | WTV r
|
|
4571
|
+
DFONT r | IDML r | MPO r/w | PSB r/w | WV r
|
|
4572
|
+
DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
|
|
4573
|
+
DJVU r | IND r/w | MRC r | PSP r | XCF r
|
|
4574
|
+
DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
|
|
4575
|
+
DNG r/w | INSV r | MXF r | R3D r | XLSX r
|
|
4576
|
+
DOC r | INX r | NEF r/w | RA r | XMP r/w/c
|
|
4577
|
+
DOCX r | ISO r | NKSC r/w | RAF r/w | ZIP r
|
|
4578
4578
|
|
|
4579
4579
|
Meta Information
|
|
4580
4580
|
----------------------+----------------------+---------------------
|
|
@@ -5206,9 +5206,9 @@ Note that this option is fundamentally different than all other output
|
|
|
5206
5206
|
format options because it requires information from all input files to be
|
|
5207
5207
|
buffered in memory before the output is written. This may result in
|
|
5208
5208
|
excessive memory usage when processing a very large number of files with a
|
|
5209
|
-
single command. Also, it makes this option incompatible with the B<-w>
|
|
5210
|
-
|
|
5211
|
-
either use the JSON (B<-j>) or XML (B<-X>) output format, or use B<-p> to
|
|
5209
|
+
single command. Also, it makes this option incompatible with the B<-w> and
|
|
5210
|
+
B<-W> options. When processing a large number of files, it is recommended
|
|
5211
|
+
to either use the JSON (B<-j>) or XML (B<-X>) output format, or use B<-p> to
|
|
5212
5212
|
generate a fixed-column CSV file instead of using the B<-csv> option.
|
|
5213
5213
|
|
|
5214
5214
|
=item B<-csvDelim> I<STR>
|
|
@@ -5477,7 +5477,7 @@ with this command:
|
|
|
5477
5477
|
|
|
5478
5478
|
produces output like this:
|
|
5479
5479
|
|
|
5480
|
-
-- Generated by ExifTool 12.
|
|
5480
|
+
-- Generated by ExifTool 12.56 --
|
|
5481
5481
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5482
5482
|
(f/5.6, 1/60s, ISO 100)
|
|
5483
5483
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -5981,8 +5981,8 @@ of the file processing. Both functions have a return value of 1. Case is
|
|
|
5981
5981
|
significant for function names.
|
|
5982
5982
|
|
|
5983
5983
|
End() - end processing after this file
|
|
5984
|
-
EndDir() - end processing of files in
|
|
5985
|
-
compatible with
|
|
5984
|
+
EndDir() - end processing of files in the current directory
|
|
5985
|
+
after this file (not compatible with -fileOrder)
|
|
5986
5986
|
|
|
5987
5987
|
Notes:
|
|
5988
5988
|
|
|
@@ -6326,9 +6326,9 @@ seconds behind GPS:
|
|
|
6326
6326
|
|
|
6327
6327
|
exiftool -geosync=+1:20 -geotag a.log DIR
|
|
6328
6328
|
|
|
6329
|
-
Advanced C<Geosync> features allow a linear time drift correction
|
|
6330
|
-
synchronization from previously geotagged images. See "geotag.html" in
|
|
6331
|
-
full ExifTool distribution for more information.
|
|
6329
|
+
Advanced C<Geosync> features allow a piecewise linear time drift correction
|
|
6330
|
+
and synchronization from previously geotagged images. See "geotag.html" in
|
|
6331
|
+
the full ExifTool distribution for more information.
|
|
6332
6332
|
|
|
6333
6333
|
Multiple B<-geotag> options may be used to concatenate GPS track log data.
|
|
6334
6334
|
Also, a single B<-geotag> option may be used to load multiple track log
|
package/bin/fmt_files/kml.fmt
CHANGED
|
@@ -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">
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#------------------------------------------------------------------------------
|
|
2
|
-
# File:
|
|
2
|
+
# File: kml_track.fmt
|
|
3
3
|
#
|
|
4
4
|
# Description: Example ExifTool print format file for generating a
|
|
5
5
|
# track in Google Earth KML format from a collection of
|
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
#
|
|
8
8
|
# Usage: From a collection of images:
|
|
9
9
|
#
|
|
10
|
-
# exiftool -p
|
|
10
|
+
# exiftool -p kml_track.fmt -r DIR [...] > out.kml
|
|
11
11
|
#
|
|
12
12
|
# From video files:
|
|
13
13
|
#
|
|
14
|
-
# exiftool -p
|
|
14
|
+
# exiftool -p kml_track.fmt -ee3 FILEorDIR [...] > out.kml
|
|
15
15
|
#
|
|
16
16
|
# Requires: ExifTool version 10.41 or later
|
|
17
17
|
#
|
|
@@ -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">
|
|
@@ -238,7 +238,7 @@ types of meta information. To determine a tag name, either consult this
|
|
|
238
238
|
documentation or run C<exiftool -s> on a file containing the information in
|
|
239
239
|
question.
|
|
240
240
|
|
|
241
|
-
I<(This documentation is the result of
|
|
241
|
+
I<(This documentation is the result of decades of research, testing and
|
|
242
242
|
reverse engineering, and is the most complete metadata tag list available
|
|
243
243
|
anywhere on the internet. It is provided not only for ExifTool users, but
|
|
244
244
|
more importantly as a public service to help augment the collective
|
|
@@ -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($$$);
|
|
@@ -798,6 +798,7 @@ my %faceCategories = (
|
|
|
798
798
|
},
|
|
799
799
|
0x1447 => { Name => 'FujiModel', Writable => 'string' },
|
|
800
800
|
0x1448 => { Name => 'FujiModel2', Writable => 'string' },
|
|
801
|
+
0x144d => { Name => 'RollAngle', Writable => 'rational64s' }, #forum14319
|
|
801
802
|
0x3803 => { #forum10037
|
|
802
803
|
Name => 'VideoRecordingMode',
|
|
803
804
|
Groups => { 2 => 'Video' },
|
|
@@ -807,6 +808,7 @@ my %faceCategories = (
|
|
|
807
808
|
0x00 => 'Normal',
|
|
808
809
|
0x10 => 'F-log',
|
|
809
810
|
0x20 => 'HLG',
|
|
811
|
+
0x30 => 'F-log2', #forum14384
|
|
810
812
|
},
|
|
811
813
|
},
|
|
812
814
|
0x3804 => { #forum10037
|
|
@@ -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.70';
|
|
33
33
|
|
|
34
34
|
sub JITTER() { return 2 } # maximum time jitter
|
|
35
35
|
|
|
@@ -210,7 +210,7 @@ sub LoadTrackLog($$;$)
|
|
|
210
210
|
my $fix = { };
|
|
211
211
|
my $csvDelim = $et->Options('CSVDelim');
|
|
212
212
|
$csvDelim = ',' unless defined $csvDelim;
|
|
213
|
-
my (@saveFix, $timeSpan);
|
|
213
|
+
my (@saveFix, @saveTime, $timeSpan);
|
|
214
214
|
for (;;) {
|
|
215
215
|
$raf->ReadLine($_) or last;
|
|
216
216
|
# determine file format
|
|
@@ -357,8 +357,13 @@ sub LoadTrackLog($$;$)
|
|
|
357
357
|
}
|
|
358
358
|
# read KML "Point" coordinates
|
|
359
359
|
@$fix{'lon','lat','alt'} = split ',', $1;
|
|
360
|
+
$$has{alt} = 1 if $$fix{alt};
|
|
360
361
|
} else {
|
|
361
|
-
$$fix{
|
|
362
|
+
if ($tok eq 'when' and $$fix{'time'}) {
|
|
363
|
+
push @saveTime, $1; # flightaware KML stores times in array
|
|
364
|
+
} else {
|
|
365
|
+
$$fix{$tag} = $1;
|
|
366
|
+
}
|
|
362
367
|
if ($isOrient{$tag}) {
|
|
363
368
|
$$has{orient} = 1;
|
|
364
369
|
} elsif ($tag eq 'alt') {
|
|
@@ -375,7 +380,11 @@ sub LoadTrackLog($$;$)
|
|
|
375
380
|
$td = 1;
|
|
376
381
|
}
|
|
377
382
|
# validate and store GPS fix
|
|
378
|
-
next unless defined $$fix{lat} and defined $$fix{lon}
|
|
383
|
+
next unless defined $$fix{lat} and defined $$fix{lon};
|
|
384
|
+
unless (defined $$fix{'time'}) {
|
|
385
|
+
next unless @saveTime;
|
|
386
|
+
$$fix{'time'} = shift @saveTime; # get next time in flightaware KML list
|
|
387
|
+
}
|
|
379
388
|
unless ($$fix{lat} =~ /^[+-]?\d+\.?\d*/ and $$fix{lon} =~ /^[+-]?\d+\.?\d*/) {
|
|
380
389
|
$e0 or $et->VPrint(0, "Coordinate format error in $from\n"), $e0 = 1;
|
|
381
390
|
next;
|