exiftool-vendored.pl 13.25.1 → 13.29.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/README.md +10 -2
- package/bin/Changes +56 -3
- package/bin/META.json +3 -2
- package/bin/META.yml +3 -2
- package/bin/README +3 -3
- package/bin/arg_files/exif2xmp.args +2 -1
- package/bin/arg_files/xmp2exif.args +2 -1
- package/bin/build_geolocation +1 -1
- package/bin/exiftool +17 -15
- package/bin/lib/Image/ExifTool/Canon.pm +5 -4
- package/bin/lib/Image/ExifTool/GIMP.pm +1 -1
- package/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -0
- package/bin/lib/Image/ExifTool/JPEG.pm +20 -8
- package/bin/lib/Image/ExifTool/LigoGPS.pm +16 -2
- package/bin/lib/Image/ExifTool/MPF.pm +5 -1
- package/bin/lib/Image/ExifTool/Nikon.pm +2 -1
- package/bin/lib/Image/ExifTool/Olympus.pm +3 -2
- package/bin/lib/Image/ExifTool/PCAP.pm +5 -5
- package/bin/lib/Image/ExifTool/Panasonic.pm +9 -1
- package/bin/lib/Image/ExifTool/Parrot.pm +54 -7
- package/bin/lib/Image/ExifTool/Pentax.pm +102 -1
- package/bin/lib/Image/ExifTool/Plot.pm +36 -15
- package/bin/lib/Image/ExifTool/QuickTime.pm +78 -12
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +70 -14
- package/bin/lib/Image/ExifTool/README +12 -2
- package/bin/lib/Image/ExifTool/RIFF.pm +15 -6
- package/bin/lib/Image/ExifTool/Sony.pm +5 -0
- package/bin/lib/Image/ExifTool/TagLookup.pm +23 -2
- package/bin/lib/Image/ExifTool/TagNames.pod +149 -92
- package/bin/lib/Image/ExifTool/WriteExif.pl +2 -0
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +3 -0
- package/bin/lib/Image/ExifTool/Writer.pl +17 -6
- package/bin/lib/Image/ExifTool/XMP.pm +23 -16
- package/bin/lib/Image/ExifTool/XMP2.pl +5 -1
- package/bin/lib/Image/ExifTool.pm +7 -3
- package/bin/lib/Image/ExifTool.pod +13 -12
- package/bin/perl-Image-ExifTool.spec +1 -1
- package/bin/windows_exiftool.txt +6 -5
- package/package.json +12 -9
package/README.md
CHANGED
|
@@ -6,7 +6,8 @@ files are omitted, as they almost double the size of the package and more than
|
|
|
6
6
|
triple the number of files in the package.
|
|
7
7
|
|
|
8
8
|
[](https://www.npmjs.com/package/exiftool-vendored.pl)
|
|
9
|
-
[](https://github.com/photostructure/exiftool-vendored.pl/actions/workflows/check-updates.yml)
|
|
10
|
+
[](https://github.com/photostructure/exiftool-vendored.pl/actions/workflows/release.yml)
|
|
10
11
|
|
|
11
12
|
## Usage
|
|
12
13
|
|
|
@@ -16,4 +17,11 @@ performant, type-safe access to this binary.**
|
|
|
16
17
|
## Versioning
|
|
17
18
|
|
|
18
19
|
This package exposes the version of ExifTool it vendors, and adds a patch
|
|
19
|
-
number, if necessary, to follow SemVer.
|
|
20
|
+
number, if necessary, to follow SemVer.
|
|
21
|
+
|
|
22
|
+
### Version Update Process
|
|
23
|
+
|
|
24
|
+
1. The `check-updates` workflow automatically detects new ExifTool versions and creates PRs
|
|
25
|
+
2. Update PRs use a `-pre` suffix during development (e.g., `13.26.0-pre`)
|
|
26
|
+
3. The `release` workflow removes the `-pre` suffix when publishing to npm
|
|
27
|
+
4. Final npm package versions match the vendored ExifTool version exactly
|
package/bin/Changes
CHANGED
|
@@ -7,10 +7,63 @@ RSS feed: https://exiftool.org/rss.xml
|
|
|
7
7
|
Note: The most recent production release is Version 13.25. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
Apr. 27, 2025 - Version 13.29
|
|
11
|
+
|
|
12
|
+
- Changed default -geotime argument to use SubSecDateTimeOriginal if available
|
|
13
|
+
instead of DateTimeOriginal, instead of applying both (as was done since
|
|
14
|
+
ExifTool 13.18). This is more efficient, and avoids an unnecessary warning
|
|
15
|
+
- Properly return warnings from inverse value conversions when copying a tag
|
|
16
|
+
using -tagsFromFile with a tag name string
|
|
17
|
+
- Fixed issue where RW2 images from the Panasonic DC-S1RM2 could be corrupted
|
|
18
|
+
when writing
|
|
19
|
+
|
|
20
|
+
Apr. 25, 2025 - Version 13.28
|
|
21
|
+
|
|
22
|
+
- Added print conversion for Pentax AFPointValues
|
|
23
|
+
- Added another Pentax PictureMode value
|
|
24
|
+
- Decode timed GPS from GKU D900 dashcam videos
|
|
25
|
+
- Decode timed telemetry data from newer ARCore videos
|
|
26
|
+
- Decode Panasonic AFAreaSize (thanks andrewj)
|
|
27
|
+
- Decode ShutterCount for Canon EOS R8 and R50 (github #325)
|
|
28
|
+
- Decode ThumbnailTIFF from some Insta360 videos
|
|
29
|
+
- Decode AROT:HDRGainCurveSize from APP10
|
|
30
|
+
- Updated to the 2025 MPF specification
|
|
31
|
+
- Renamed K-3III AFPoints to AFPointsSelected and changed decoding
|
|
32
|
+
- Fixed bug introduced in 13.23 that could cause an incorrect parsing of XMP
|
|
33
|
+
attributes containing an equals sign
|
|
34
|
+
- Fixed issue reading timed GPS from some Insta360 videos, and issue where
|
|
35
|
+
writing these videos would fail
|
|
36
|
+
- Fixed exif2xmp.args and xmp2exif.args to properly handle EXIF:ImageUniqueID
|
|
37
|
+
|
|
38
|
+
Apr. 8, 2025 - Version 13.27
|
|
39
|
+
|
|
40
|
+
- Decode AF points for the Pentax K-3III
|
|
41
|
+
- Decode timed GPS from a variant of the Rove R2-4K dashcam
|
|
42
|
+
- Properly decode SensorTemperature for Pentax K3-III
|
|
43
|
+
- Patched PCAP test to avoid potential failure
|
|
44
|
+
- Patched to avoid potential "not a HASH reference" error when writing MOV/MP4
|
|
45
|
+
videos
|
|
46
|
+
- Fixed issue which could result in "uninitialized value" errors when reading
|
|
47
|
+
one type of timed GPS from MP4 videos
|
|
48
|
+
- Fixed problem writing MotionPhotoVideo in MP4 files
|
|
49
|
+
|
|
50
|
+
Mar. 31, 2025 - Version 13.26
|
|
51
|
+
|
|
52
|
+
- Added a new Olympus CameraType (thanks Herb)
|
|
53
|
+
- Added a new PentaxModelID (github #322)
|
|
54
|
+
- Added a new Nikon LensID
|
|
55
|
+
- Improved Duration calculation for some WAV files
|
|
56
|
+
- Changed a PCAP tag name and fixed typos in a few others (thanks blue-j)
|
|
57
|
+
- Patched to avoid VignettingCorr warning for images from some Canon cameras
|
|
58
|
+
- Patched to avoid some unnecessary duplicate tag warnings when -validate used
|
|
59
|
+
with HEIC images
|
|
60
|
+
- Fixed issue with XMP-xmpMM:Pantry items not exhibiting proper List-type
|
|
61
|
+
behaviour
|
|
62
|
+
|
|
10
63
|
Mar. 11, 2025 - Version 13.25 (production release)
|
|
11
64
|
|
|
12
65
|
- IMPORTANT: Fixed issue which could corrupt HEIC images from newer iPhones
|
|
13
|
-
when writing QuickTime:Rotation
|
|
66
|
+
under certain conditions when writing QuickTime:Rotation
|
|
14
67
|
- Decode more PLIST information from HEIC images
|
|
15
68
|
- Updated Geolocation databases from current geonames.org files
|
|
16
69
|
- Updated DarwinCore for the 2023 specification (thanks Herb)
|
|
@@ -25,7 +78,7 @@ Mar. 7, 2025 - Version 13.24
|
|
|
25
78
|
|
|
26
79
|
Mar. 7, 2025 - Version 13.23
|
|
27
80
|
|
|
28
|
-
- Added read support for CAP, PCAP and
|
|
81
|
+
- Added read support for CAP, PCAP and PCAPNG files (github #318)
|
|
29
82
|
- Added a number of new Sony LensType2 values (thanks Jos Roost)
|
|
30
83
|
- Added the 2 new GPSAltitudeRef values defined by EXIF 3.0
|
|
31
84
|
- Decode APP4 "Qualcomm Dual Camera Attributes" metadata
|
|
@@ -57,7 +110,7 @@ Feb. 20, 2025 - Version 13.21
|
|
|
57
110
|
- Patched issue that could result in runtime warning for some video files
|
|
58
111
|
- Fixed a bug with the new -plot option that could generate a compiler error
|
|
59
112
|
|
|
60
|
-
Feb. 20, 2025 - Version 13.20
|
|
113
|
+
Feb. 20, 2025 - Version 13.20 - "SVG Plot"
|
|
61
114
|
|
|
62
115
|
- Added new -plot option for generating SVG-format plots from tag values
|
|
63
116
|
- Added a new Olympus CameraType
|
package/bin/META.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"Phil Harvey (philharvey66 at gmail.com)"
|
|
5
5
|
],
|
|
6
6
|
"dynamic_config" : 0,
|
|
7
|
-
"generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.143240, CPAN::Meta::Converter version 2.133380",
|
|
7
|
+
"generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.143240, CPAN::Meta::Converter version 2.133380, CPAN::Meta::Converter version 2.150010",
|
|
8
8
|
"license" : [
|
|
9
9
|
"perl_5"
|
|
10
10
|
],
|
|
@@ -50,5 +50,6 @@
|
|
|
50
50
|
}
|
|
51
51
|
},
|
|
52
52
|
"release_status" : "stable",
|
|
53
|
-
"version" : "13.
|
|
53
|
+
"version" : "13.29",
|
|
54
|
+
"x_serialization_backend" : "JSON::PP version 4.06"
|
|
54
55
|
}
|
package/bin/META.yml
CHANGED
|
@@ -7,7 +7,7 @@ build_requires:
|
|
|
7
7
|
configure_requires:
|
|
8
8
|
ExtUtils::MakeMaker: '0'
|
|
9
9
|
dynamic_config: 0
|
|
10
|
-
generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.143240, CPAN::Meta::Converter version 2.133380'
|
|
10
|
+
generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.143240, CPAN::Meta::Converter version 2.133380, CPAN::Meta::Converter version 2.150010'
|
|
11
11
|
license: perl
|
|
12
12
|
meta-spec:
|
|
13
13
|
url: http://module-build.sourceforge.net/META-spec-v1.4.html
|
|
@@ -31,4 +31,5 @@ recommends:
|
|
|
31
31
|
Time::HiRes: '0'
|
|
32
32
|
requires:
|
|
33
33
|
perl: '5.004'
|
|
34
|
-
version: '13.
|
|
34
|
+
version: '13.29'
|
|
35
|
+
x_serialization_backend: 'JSON::PP version 4.06'
|
package/bin/README
CHANGED
|
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
|
|
|
109
109
|
terminal window to extract and run ExifTool:
|
|
110
110
|
|
|
111
111
|
cd ~/Desktop
|
|
112
|
-
gzip -dc Image-ExifTool-13.
|
|
113
|
-
cd Image-ExifTool-13.
|
|
112
|
+
gzip -dc Image-ExifTool-13.29.tar.gz | tar -xf -
|
|
113
|
+
cd Image-ExifTool-13.29
|
|
114
114
|
./exiftool t/images/ExifTool.jpg
|
|
115
115
|
|
|
116
116
|
Note: These commands extract meta information from one of the test images.
|
|
@@ -170,7 +170,7 @@ COPYRIGHT AND LICENSE
|
|
|
170
170
|
Copyright 2003-2025, Phil Harvey
|
|
171
171
|
|
|
172
172
|
This is free software; you can redistribute it and/or modify it under the
|
|
173
|
-
same terms as Perl itself.
|
|
173
|
+
same terms as Perl itself (either the Perl Artistic License or GPL).
|
|
174
174
|
|
|
175
175
|
DISTRIBUTION FILES
|
|
176
176
|
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
# 2022/03/31 - PH IPTC Photometadata Mapping Guidelines 2202.1 update
|
|
16
16
|
# 2024/10/24 - PH Additions for the 2024 EXIF for XMP spec
|
|
17
17
|
# 2025/01/16 - PH Copy Composite SubSec tags to XMP-exif
|
|
18
|
+
# 2025-04-22 - PH Fixed DigitalImageGUID source tag
|
|
18
19
|
#
|
|
19
20
|
# References: http://www.metadataworkinggroup.org/specs/
|
|
20
21
|
# https://iptc.org/std/photometadata/documentation/mappingguidelines/
|
|
@@ -43,7 +44,7 @@
|
|
|
43
44
|
-XMP-xmp:CreatorTool < EXIF:Software
|
|
44
45
|
-XMP-dc:Rights < EXIF:Copyright
|
|
45
46
|
-XMP-dc:Creator < EXIF:Artist
|
|
46
|
-
-XMP-iptcExt:DigitalImageGUID < EXIF:
|
|
47
|
+
-XMP-iptcExt:DigitalImageGUID < EXIF:ImageUniqueID
|
|
47
48
|
# XMP flash information is translated by the Composite Flash tag
|
|
48
49
|
-Composite:Flash < EXIF:Flash
|
|
49
50
|
# overwrite GPS tags which have different formats in XMP
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
# XMP-exif:DateTimeOriginal
|
|
20
20
|
# 2024/10/24 - PH Additions for the 2024 EXIF for XMP spec
|
|
21
21
|
# 2025/01/16 - PH Write Composite:SubSecCreateDate from XMP-exif
|
|
22
|
+
# 2025-04-22 - PH Fixed DigitalImageGUID translation
|
|
22
23
|
#
|
|
23
24
|
# References: http://www.metadataworkinggroup.org/specs/
|
|
24
25
|
# https://iptc.org/std/photometadata/documentation/mappingguidelines/
|
|
@@ -51,7 +52,7 @@
|
|
|
51
52
|
-EXIF:Copyright < XMP-dc:Rights
|
|
52
53
|
-EXIF:Artist < XMP-plus:ImageCreatorName
|
|
53
54
|
-EXIF:Artist < XMP-dc:Creator
|
|
54
|
-
-EXIF:
|
|
55
|
+
-EXIF:ImageUniqueID < XMP-iptcExt:DigitalImageGUID
|
|
55
56
|
# XMP flash information is translated by the Composite Flash tag
|
|
56
57
|
-EXIF:Flash < Composite:Flash
|
|
57
58
|
# generate GPS tags which have been combined into other XMP tags
|
package/bin/build_geolocation
CHANGED
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
# 6 int8u - 0xf0 = population E exponent (in format "N.Fe+0E"), 0x0f = population N digit
|
|
41
41
|
# 7 int16u - 0xf000 = population F digit, 0x0fff = index in region list (admin1)
|
|
42
42
|
# 9 int16u - v1.02: 0x7fff = index in subregion (admin2), 0x8000 = high bit of time zone
|
|
43
|
-
# 9 int16u - v1.03: index in subregion (admin2)
|
|
43
|
+
# 9 int16u - v1.03: index in subregion list (admin2)
|
|
44
44
|
# 11 int8u - low byte of time zone index
|
|
45
45
|
# 12 int8u - 0x3f = feature code index (see below), v1.03: 0x80 = high bit of time zone
|
|
46
46
|
# 13 string - UTF8 City name, terminated by newline
|
package/bin/exiftool
CHANGED
|
@@ -11,7 +11,7 @@ use strict;
|
|
|
11
11
|
use warnings;
|
|
12
12
|
require 5.004;
|
|
13
13
|
|
|
14
|
-
my $version = '13.
|
|
14
|
+
my $version = '13.29';
|
|
15
15
|
|
|
16
16
|
$^W = 1; # enable global warnings
|
|
17
17
|
|
|
@@ -1396,8 +1396,7 @@ for (;;) {
|
|
|
1396
1396
|
# add geotag/geosync/geolocate commands first
|
|
1397
1397
|
unshift @newValues, pop @newValues;
|
|
1398
1398
|
if (lc $2 eq 'geotag' and (not defined $addGeotime or $addGeotime) and length $val) {
|
|
1399
|
-
$addGeotime =
|
|
1400
|
-
($1 || '') . 'Geotime<SubSecDateTimeOriginal#' ];
|
|
1399
|
+
$addGeotime = ($1 || '') . q[Geotime<${DateTimeOriginal#;$_=$self->GetValue('SubSecDateTimeOriginal','ValueConv') || $_}];
|
|
1401
1400
|
}
|
|
1402
1401
|
}
|
|
1403
1402
|
}
|
|
@@ -1696,9 +1695,8 @@ if (@newValues) {
|
|
|
1696
1695
|
# assume -geotime value if -geotag specified without -geotime
|
|
1697
1696
|
if ($addGeotime) {
|
|
1698
1697
|
AddSetTagsFile($setTagsFile = '@') unless $setTagsFile and $setTagsFile eq '@';
|
|
1699
|
-
push @{$setTags{$setTagsFile}},
|
|
1700
|
-
|
|
1701
|
-
$verbose and print $vout 'Arguments ',join(' and ', @a)," are assumed\n";
|
|
1698
|
+
push @{$setTags{$setTagsFile}}, $addGeotime;
|
|
1699
|
+
$verbose and print $vout qq(Using default "-$addGeotime"\n);
|
|
1702
1700
|
}
|
|
1703
1701
|
my %setTagsIndex;
|
|
1704
1702
|
# add/delete option lookup
|
|
@@ -4289,6 +4287,7 @@ sub ScanDir($$;$)
|
|
|
4289
4287
|
next unless $recurse;
|
|
4290
4288
|
# ignore directories starting with "." by default
|
|
4291
4289
|
next if $file =~ /^\./ and $recurse == 1;
|
|
4290
|
+
# note: this doesn't work in Windows cmd (see forum17243)
|
|
4292
4291
|
next if $ignore{$file} or ($ignore{SYMLINKS} and -l $path);
|
|
4293
4292
|
ScanDir($et, $path, $list);
|
|
4294
4293
|
last if $end;
|
|
@@ -5010,7 +5009,7 @@ B<exiftool> [I<OPTIONS>] [-I<TAG>...] [--I<TAG>...] I<FILE>...
|
|
|
5010
5009
|
|
|
5011
5010
|
=head2 Writing
|
|
5012
5011
|
|
|
5013
|
-
B<exiftool> [I<OPTIONS>] -I<TAG>[
|
|
5012
|
+
B<exiftool> [I<OPTIONS>] -I<TAG>[+-^E<lt>]=[I<VALUE>]... I<FILE>...
|
|
5014
5013
|
|
|
5015
5014
|
=head2 Copying
|
|
5016
5015
|
|
|
@@ -6053,7 +6052,7 @@ with this command:
|
|
|
6053
6052
|
|
|
6054
6053
|
produces output like this:
|
|
6055
6054
|
|
|
6056
|
-
-- Generated by ExifTool 13.
|
|
6055
|
+
-- Generated by ExifTool 13.29 --
|
|
6057
6056
|
File: a.jpg - 2003:10:31 15:44:19
|
|
6058
6057
|
(f/5.6, 1/60s, ISO 100)
|
|
6059
6058
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -6550,9 +6549,10 @@ name, or a full path, and is case sensitive. If a full path is specified,
|
|
|
6550
6549
|
it must match the Directory tag exactly to be ignored. Use multiple B<-i>
|
|
6551
6550
|
options to ignore more than one directory name. A special I<DIR> value of
|
|
6552
6551
|
C<SYMLINKS> may be specified to avoid recursing into directories which are
|
|
6553
|
-
symbolic links when the B<-r> option is used
|
|
6554
|
-
|
|
6555
|
-
files
|
|
6552
|
+
symbolic links when the B<-r> option is used (note this does not currently
|
|
6553
|
+
work under Windows). As well, a value of C<HIDDEN> may be used to ignore
|
|
6554
|
+
files with names that start with a "." (ie. hidden files on Unix systems)
|
|
6555
|
+
when scanning a directory.
|
|
6556
6556
|
|
|
6557
6557
|
=item B<-if>[I<NUM>] I<EXPR>
|
|
6558
6558
|
|
|
@@ -6935,12 +6935,14 @@ Geotag images from the specified GPS track log file. Using the B<-geotag>
|
|
|
6935
6935
|
option is equivalent to writing a value to the C<Geotag> tag. The GPS
|
|
6936
6936
|
position is interpolated from the track at a time specified by the value
|
|
6937
6937
|
written to the C<Geotime> tag. If C<Geotime> is not specified, the value is
|
|
6938
|
-
copied from C<
|
|
6939
|
-
|
|
6940
|
-
the
|
|
6938
|
+
copied from C<SubSecDateTimeOriginal#> if it exists, otherwise
|
|
6939
|
+
C<DateTimeOriginal#> (the C<#> is added to copy the unformatted value,
|
|
6940
|
+
avoiding potential conflicts with the B<-d> option). For example, the
|
|
6941
|
+
following two commands are equivalent if SubSecDateTimeOriginal exists in
|
|
6942
|
+
the file:
|
|
6941
6943
|
|
|
6942
6944
|
exiftool -geotag trk.log image.jpg
|
|
6943
|
-
exiftool -geotag trk.log "-Geotime<
|
|
6945
|
+
exiftool -geotag trk.log "-Geotime<SubSecDateTimeOriginal#" image.jpg
|
|
6944
6946
|
|
|
6945
6947
|
If the C<Geotime> value does not contain a time zone then the local system
|
|
6946
6948
|
timezone is assumed. Writing C<Geotime> causes the following tags to be
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.90';
|
|
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)
|
|
@@ -1410,7 +1410,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
1410
1410
|
},
|
|
1411
1411
|
{
|
|
1412
1412
|
Name => 'CanonCameraInfoR6m2',
|
|
1413
|
-
Condition => '$$self{Model} =~ /\bEOS R6m2$/',
|
|
1413
|
+
Condition => '$$self{Model} =~ /\bEOS (R6m2|R8|R50)$/',
|
|
1414
1414
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::CameraInfoR6m2' },
|
|
1415
1415
|
},
|
|
1416
1416
|
{
|
|
@@ -2053,7 +2053,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
2053
2053
|
# 0x4014 (similar to 0x83?)
|
|
2054
2054
|
0x4015 => [{
|
|
2055
2055
|
Name => 'VignettingCorr', # (LensPacket)
|
|
2056
|
-
Condition => '$$valPt =~ /^\0/ and $$valPt !~
|
|
2056
|
+
Condition => '$$valPt =~ /^\0/ and $$valPt !~ /^(\0\0\0\0|\x00\x40\xdc\x05)/', # (data may be all zeros for 60D)
|
|
2057
2057
|
SubDirectory => {
|
|
2058
2058
|
# (the size word is at byte 2 in this structure)
|
|
2059
2059
|
Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart+2,$size)',
|
|
@@ -2061,7 +2061,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
2061
2061
|
},
|
|
2062
2062
|
},{
|
|
2063
2063
|
Name => 'VignettingCorrUnknown1',
|
|
2064
|
-
Condition => '$$valPt =~ /^[\x01\x02\x10\x20]/ and $$valPt !~
|
|
2064
|
+
Condition => '$$valPt =~ /^[\x01\x02\x10\x20]/ and $$valPt !~ /^(\0\0\0\0|\x02\x50\x7c\x04)/',
|
|
2065
2065
|
SubDirectory => {
|
|
2066
2066
|
# (the size word is at byte 2 in this structure)
|
|
2067
2067
|
Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart+2,$size)',
|
|
@@ -4758,6 +4758,7 @@ my %ciMaxFocal = (
|
|
|
4758
4758
|
Format => 'int32u',
|
|
4759
4759
|
Notes => 'includes electronic + mechanical shutter',
|
|
4760
4760
|
},
|
|
4761
|
+
# 0x0b5a - related to image stabilization (ref forum17239) (R5)
|
|
4761
4762
|
# 0x0bb7 - counts down during focus stack (ref forum16111)
|
|
4762
4763
|
);
|
|
4763
4764
|
|
|
@@ -260,15 +260,9 @@ sub ProcessJPEG_HDR($$$);
|
|
|
260
260
|
Condition => '$$valPt =~ /^UNICODE\0/',
|
|
261
261
|
Notes => 'PhotoStudio Unicode comment',
|
|
262
262
|
}, {
|
|
263
|
-
Name => '
|
|
263
|
+
Name => 'HDRGainInfo', #PH (NC)
|
|
264
264
|
Condition => '$$valPt =~ /^AROT\0\0.{4}/s',
|
|
265
|
-
|
|
266
|
-
ValueConv => q{
|
|
267
|
-
my $n = unpack('x6N', $val);
|
|
268
|
-
return '<truncated AROT data>' if length($val)-6 < $n * 4;
|
|
269
|
-
my $str = join ' ', unpack("x10V$n", $val);
|
|
270
|
-
return \$str;
|
|
271
|
-
},
|
|
265
|
+
SubDirectory => { TagTable => 'Image::ExifTool::JPEG::HDRGainInfo' },
|
|
272
266
|
}],
|
|
273
267
|
APP11 => [{
|
|
274
268
|
Name => 'JPEG-HDR',
|
|
@@ -347,6 +341,9 @@ sub ProcessJPEG_HDR($$$);
|
|
|
347
341
|
$$valPt =~ /~\0\x04\0zmie~\0\0\x0a.{8}[\x10\x18]\x08$/s
|
|
348
342
|
},
|
|
349
343
|
SubDirectory => { TagTable => 'Image::ExifTool::MIE::Main' },
|
|
344
|
+
}, {
|
|
345
|
+
Name => 'MPF',
|
|
346
|
+
SubDirectory => { TagTable => 'Image::ExifTool::MPF::Main' },
|
|
350
347
|
}, {
|
|
351
348
|
Name => 'Samsung',
|
|
352
349
|
Condition => '$$valPt =~ /QDIOBS$/',
|
|
@@ -382,6 +379,21 @@ sub ProcessJPEG_HDR($$$);
|
|
|
382
379
|
}],
|
|
383
380
|
);
|
|
384
381
|
|
|
382
|
+
# HDR gain information (ref PH)
|
|
383
|
+
%Image::ExifTool::JPEG::HDRGainInfo = (
|
|
384
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
385
|
+
GROUPS => { 0 => 'APP10', 1 => 'AROT', 2 => 'Image' },
|
|
386
|
+
6 => {
|
|
387
|
+
Name => 'HDRGainCurveSize',
|
|
388
|
+
Format => 'int32u',
|
|
389
|
+
},
|
|
390
|
+
10 => {
|
|
391
|
+
Name => 'HDRGainCurve', # (NC)
|
|
392
|
+
Format => 'int32uRev[$val{6}]',
|
|
393
|
+
Binary => 1,
|
|
394
|
+
},
|
|
395
|
+
);
|
|
396
|
+
|
|
385
397
|
# JPS APP3 segment (ref http://paulbourke.net/stereographics/stereoimage/)
|
|
386
398
|
%Image::ExifTool::JPEG::JPS = (
|
|
387
399
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
@@ -11,7 +11,7 @@ use strict;
|
|
|
11
11
|
use vars qw($VERSION);
|
|
12
12
|
use Image::ExifTool;
|
|
13
13
|
|
|
14
|
-
$VERSION = '1.
|
|
14
|
+
$VERSION = '1.04';
|
|
15
15
|
|
|
16
16
|
sub ProcessLigoGPS($$$;$);
|
|
17
17
|
sub ProcessLigoJSON($$$);
|
|
@@ -264,6 +264,20 @@ sub ParseLigoGPS($$$;$)
|
|
|
264
264
|
delete $$et{SET_GROUP1};
|
|
265
265
|
}
|
|
266
266
|
|
|
267
|
+
#------------------------------------------------------------------------------
|
|
268
|
+
# Process GKU dashcam trailer containing JSON-format LigoGPS
|
|
269
|
+
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
|
270
|
+
# Returns: 1 on success
|
|
271
|
+
sub ProcessGKU($$$;$)
|
|
272
|
+
{
|
|
273
|
+
my ($et, $dirInfo, $tagTbl) = @_;
|
|
274
|
+
my $dataPt = $$dirInfo{DataPt};
|
|
275
|
+
my $pos = unpack('V', $$dataPt);
|
|
276
|
+
return 0 if $pos + 13 > length $$dataPt or substr($$dataPt, $pos, 13) ne 'LIGOGPSINFO {';
|
|
277
|
+
pos($$dataPt) = $pos;
|
|
278
|
+
return ProcessLigoJSON($et, $dirInfo, $tagTbl);
|
|
279
|
+
}
|
|
280
|
+
|
|
267
281
|
#------------------------------------------------------------------------------
|
|
268
282
|
# Process LIGOGPSINFO data (non-JSON format)
|
|
269
283
|
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
|
@@ -315,7 +329,7 @@ sub ProcessLigoJSON($$$)
|
|
|
315
329
|
my $dataPt = $$dirInfo{DataPt};
|
|
316
330
|
my $dirLen = $$dirInfo{DirLen};
|
|
317
331
|
require Image::ExifTool::Import;
|
|
318
|
-
$et->VerboseDir('LIGO_JSON', undef, length($$dataPt));
|
|
332
|
+
$et->VerboseDir('LIGO_JSON', undef, length($$dataPt) - pos($$dataPt));
|
|
319
333
|
$$et{SET_GROUP1} = 'LIGO';
|
|
320
334
|
while ($$dataPt =~ /LIGOGPSINFO (\{.*?\})/g) {
|
|
321
335
|
my $json = $1;
|
|
@@ -15,7 +15,7 @@ use vars qw($VERSION);
|
|
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
16
|
use Image::ExifTool::Exif;
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.16';
|
|
19
19
|
|
|
20
20
|
sub ProcessMPImageList($$$);
|
|
21
21
|
|
|
@@ -127,11 +127,15 @@ sub ProcessMPImageList($$$);
|
|
|
127
127
|
0x000000 => 'Undefined',
|
|
128
128
|
0x010001 => 'Large Thumbnail (VGA equivalent)',
|
|
129
129
|
0x010002 => 'Large Thumbnail (full HD equivalent)',
|
|
130
|
+
0x010003 => 'Large Thumbnail (4K equivalent)',
|
|
131
|
+
0x010004 => 'Large Thumbnail (8K equivalent)',
|
|
132
|
+
0x010005 => 'Large Thumbnail (16K equivalent)',
|
|
130
133
|
0x020001 => 'Multi-frame Panorama',
|
|
131
134
|
0x020002 => 'Multi-frame Disparity',
|
|
132
135
|
0x020003 => 'Multi-angle',
|
|
133
136
|
0x030000 => 'Baseline MP Primary Image',
|
|
134
137
|
0x040000 => 'Original Preservation Image', # (Exif 3.0)
|
|
138
|
+
0x050000 => 'Gain Map Image',
|
|
135
139
|
},
|
|
136
140
|
},
|
|
137
141
|
4 => {
|
|
@@ -65,7 +65,7 @@ use Image::ExifTool::Exif;
|
|
|
65
65
|
use Image::ExifTool::GPS;
|
|
66
66
|
use Image::ExifTool::XMP;
|
|
67
67
|
|
|
68
|
-
$VERSION = '4.
|
|
68
|
+
$VERSION = '4.46';
|
|
69
69
|
|
|
70
70
|
sub LensIDConv($$$);
|
|
71
71
|
sub ProcessNikonAVI($$$);
|
|
@@ -552,6 +552,7 @@ sub GetAFPointGrid($$;$);
|
|
|
552
552
|
'21 56 8E 8E 24 24 14 00' => 'Tamron SP AF 300mm f/2.8 LD-IF (60E)',
|
|
553
553
|
'27 54 8E 8E 24 24 1D 02' => 'Tamron SP AF 300mm f/2.8 LD-IF (360E)',
|
|
554
554
|
'E1 40 19 36 2C 35 DF 4E' => 'Tamron 10-24mm f/3.5-4.5 Di II VC HLD (B023)',
|
|
555
|
+
'E1 40 19 36 2C 35 DF 0E' => 'Tamron 10-24mm f/3.5-4.5 Di II VC HLD (B023)', #30
|
|
555
556
|
'F6 3F 18 37 2C 34 84 06' => 'Tamron SP AF 10-24mm f/3.5-4.5 Di II LD Aspherical (IF) (B001)',
|
|
556
557
|
'F6 3F 18 37 2C 34 DF 06' => 'Tamron SP AF 10-24mm f/3.5-4.5 Di II LD Aspherical (IF) (B001)', #30
|
|
557
558
|
'00 36 1C 2D 34 3C 00 06' => 'Tamron SP AF 11-18mm f/4.5-5.6 Di II LD Aspherical (IF) (A13)',
|
|
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
40
40
|
use Image::ExifTool::Exif;
|
|
41
41
|
use Image::ExifTool::APP12;
|
|
42
42
|
|
|
43
|
-
$VERSION = '2.
|
|
43
|
+
$VERSION = '2.85';
|
|
44
44
|
|
|
45
45
|
sub PrintLensInfo($$$);
|
|
46
46
|
|
|
@@ -113,7 +113,7 @@ my %olympusLensTypes = (
|
|
|
113
113
|
'0 34 00' => 'Olympus Zuiko Digital ED 9-18mm F4.0-5.6', #7
|
|
114
114
|
'0 34 10' => 'Olympus M.Zuiko Digital ED 12-45mm F4.0 Pro', #IB
|
|
115
115
|
'0 35 00' => 'Olympus Zuiko Digital 14-54mm F2.8-3.5 II', #PH
|
|
116
|
-
'0 35 10' => 'Olympus M.Zuiko 100-400mm F5.0-6.3', #IB
|
|
116
|
+
'0 35 10' => 'Olympus M.Zuiko 100-400mm F5.0-6.3', #IB (also OM System M.Zuiko Digital ED 100-400mm F5.0-6.3 IS II", forum2833)
|
|
117
117
|
'0 36 10' => 'Olympus M.Zuiko Digital ED 8-25mm F4 Pro', #IB
|
|
118
118
|
'0 37 10' => 'Olympus M.Zuiko Digital ED 40-150mm F4.0 Pro', #forum3833
|
|
119
119
|
'0 39 10' => 'Olympus M.Zuiko Digital ED 90mm F3.5 Macro IS Pro', #forum3833
|
|
@@ -446,6 +446,7 @@ my %olympusCameraTypes = (
|
|
|
446
446
|
S0095 => 'OM-1', #IB
|
|
447
447
|
S0101 => 'OM-5', #IB
|
|
448
448
|
S0121 => 'OM-1MarkII', #forum15652
|
|
449
|
+
S0123 => 'OM-3', #forum17208
|
|
449
450
|
SR45 => 'D220',
|
|
450
451
|
SR55 => 'D320L',
|
|
451
452
|
SR83 => 'D340L',
|
|
@@ -16,7 +16,7 @@ use strict;
|
|
|
16
16
|
use vars qw($VERSION);
|
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.01';
|
|
20
20
|
|
|
21
21
|
%Image::ExifTool::PCAP::Main = (
|
|
22
22
|
GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Other' },
|
|
@@ -261,14 +261,14 @@ $VERSION = '1.00';
|
|
|
261
261
|
},
|
|
262
262
|
},
|
|
263
263
|
19373 => {
|
|
264
|
-
Name => '
|
|
264
|
+
Name => 'CustomOption4',
|
|
265
265
|
Binary => 1,
|
|
266
266
|
},
|
|
267
267
|
#
|
|
268
268
|
# "options" tags in Section Header Block
|
|
269
269
|
#
|
|
270
270
|
'SHB-2' => 'Hardware',
|
|
271
|
-
'SHB-3' => '
|
|
271
|
+
'SHB-3' => 'OperatingSystem',
|
|
272
272
|
'SHB-4' => 'UserApplication',
|
|
273
273
|
#
|
|
274
274
|
# "options" tags in Interface Description Block
|
|
@@ -308,8 +308,8 @@ $VERSION = '1.00';
|
|
|
308
308
|
Name => 'Filter',
|
|
309
309
|
ValueConv => 'Get8u(\$val,0) . ": " . substr($val, 1)',
|
|
310
310
|
},
|
|
311
|
-
'IDB-12' => '
|
|
312
|
-
'IDB-13' => { Name => '
|
|
311
|
+
'IDB-12' => 'OperatingSystem',
|
|
312
|
+
'IDB-13' => { Name => 'FrameCheckSequenceLength', Format => 'int8u' },
|
|
313
313
|
'IDB-14' => {
|
|
314
314
|
Name => 'TimeStampOffset',
|
|
315
315
|
Format => 'int64u',
|
|
@@ -37,7 +37,7 @@ use vars qw($VERSION %leicaLensTypes);
|
|
|
37
37
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
38
38
|
use Image::ExifTool::Exif;
|
|
39
39
|
|
|
40
|
-
$VERSION = '2.
|
|
40
|
+
$VERSION = '2.25';
|
|
41
41
|
|
|
42
42
|
sub ProcessLeicaLEIC($$$);
|
|
43
43
|
sub WhiteBalanceConv($;$$);
|
|
@@ -1436,6 +1436,14 @@ my %shootingMode = (
|
|
|
1436
1436
|
Name => 'NoiseReductionStrength',
|
|
1437
1437
|
Writable => 'rational64s',
|
|
1438
1438
|
},
|
|
1439
|
+
0xde => { #forum17299
|
|
1440
|
+
Name => 'AFAreaSize',
|
|
1441
|
+
Writable => 'rational64u',
|
|
1442
|
+
Notes => 'relative to size of image',
|
|
1443
|
+
Count => 2,
|
|
1444
|
+
PrintConv => '$val =~ /^4194303.999/ ? "n/a" : $val',
|
|
1445
|
+
PrintConvInv => '$val eq "n/a" ? "4194303.999 4194303.999" : $val',
|
|
1446
|
+
},
|
|
1439
1447
|
0xe4 => { #IB
|
|
1440
1448
|
Name => 'LensTypeModel',
|
|
1441
1449
|
Condition => '$format eq "int16u"',
|