exiftool_vendored 12.57.0 → 12.58.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/Changes +14 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/config_files/rotate_regions.config +1 -1
- data/bin/exiftool +25 -21
- data/bin/lib/Image/ExifTool/AIFF.pm +2 -2
- data/bin/lib/Image/ExifTool/APE.pm +2 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +13 -14
- data/bin/lib/Image/ExifTool/Canon.pm +26 -6
- data/bin/lib/Image/ExifTool/DJI.pm +28 -2
- data/bin/lib/Image/ExifTool/Exif.pm +24 -5
- data/bin/lib/Image/ExifTool/FlashPix.pm +2 -2
- data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -0
- data/bin/lib/Image/ExifTool/JPEG.pm +14 -2
- data/bin/lib/Image/ExifTool/LNK.pm +5 -4
- data/bin/lib/Image/ExifTool/MPEG.pm +2 -2
- data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
- data/bin/lib/Image/ExifTool/Minolta.pm +6 -7
- data/bin/lib/Image/ExifTool/Nikon.pm +385 -110
- data/bin/lib/Image/ExifTool/Pentax.pm +8 -5
- data/bin/lib/Image/ExifTool/Photoshop.pm +3 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +5 -5
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +1 -1
- data/bin/lib/Image/ExifTool/README +8 -0
- data/bin/lib/Image/ExifTool/RIFF.pm +3 -3
- data/bin/lib/Image/ExifTool/Rawzor.pm +2 -2
- data/bin/lib/Image/ExifTool/Sigma.pm +4 -4
- data/bin/lib/Image/ExifTool/Sony.pm +23 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4457 -4441
- data/bin/lib/Image/ExifTool/TagNames.pod +76 -12
- data/bin/lib/Image/ExifTool/Validate.pm +5 -5
- data/bin/lib/Image/ExifTool/WriteExif.pl +42 -0
- data/bin/lib/Image/ExifTool/Writer.pl +3 -1
- data/bin/lib/Image/ExifTool/XMP.pm +2 -2
- data/bin/lib/Image/ExifTool.pm +57 -12
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: daebca4fbc1adcea00bcf7dc637e328f4534a115f69a17f10bca60f8a21dee01
|
|
4
|
+
data.tar.gz: 512c1da726768d49d97b8262303f8c524b4ea23ccc8c25f1350f93a121813be4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6d29ac70643b583a0d01c512e2054700e15cdf60091042ed4de7c3de85feca75fcd94b2201691a0360875c02b293cc00632c6dce29888e735a488dac50712c70
|
|
7
|
+
data.tar.gz: cee8f9dcbe026dc2e5bb1de5db902904c460c6e71cf4ab9ac64b9f2a8357c3857be328912f1deedf3f51c00f99b50f07b463884e60f235f858ef33bf5cd417f7
|
data/bin/Changes
CHANGED
|
@@ -7,6 +7,20 @@ 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
|
+
Mar. 15, 2023 - Version 12.58
|
|
11
|
+
|
|
12
|
+
- Added Extra ImageDataMD5 tag to calculate MD5 of image data only
|
|
13
|
+
- Added support for reading DJI APP4 and APP7 JPEG segments
|
|
14
|
+
- Added a new SonyModelID value
|
|
15
|
+
- Decode a few new Nikon tags (thanks Warren Hatch)
|
|
16
|
+
- Downgraded "Windows file times" to a minor warning when Win32::API or
|
|
17
|
+
Win32API::File is not installed while reading metadata
|
|
18
|
+
- Patched possible runtime warning when API IgnoreTags option is used to
|
|
19
|
+
ignore FileType
|
|
20
|
+
- Fixed problem extracting NetName from Windows LNK files
|
|
21
|
+
- Fixed issue where the %C filename format code would increment the count on
|
|
22
|
+
an output filename collision, but it is supposed to count the input files
|
|
23
|
+
|
|
10
24
|
Feb. 23, 2023 - Version 12.57
|
|
11
25
|
|
|
12
26
|
- Added two new Nikon Z lenses (thanks LibRaw)
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
|
@@ -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.58.tar.gz | tar -xf -
|
|
111
|
+
cd Image-ExifTool-12.58
|
|
112
112
|
./exiftool t/images/ExifTool.jpg
|
|
113
113
|
|
|
114
114
|
Note: These commands extract meta information from one of the test images.
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
# RotateMPRegionCW90
|
|
18
18
|
# RotateMPRegionCW180
|
|
19
19
|
# RotateMPRegionCW270
|
|
20
|
-
# These tags will rotate
|
|
20
|
+
# These tags will rotate an MP Region clockwise 90, 180, or 270 degrees.
|
|
21
21
|
# Example:
|
|
22
22
|
# exiftool -config rotate_regions.config "-RegionInfoMP<RotateMPRegionCW90" FILE
|
|
23
23
|
#
|
data/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.58';
|
|
15
15
|
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
17
17
|
BEGIN {
|
|
@@ -255,17 +255,15 @@ my %optArgs = (
|
|
|
255
255
|
'-csvdelim' => 1,
|
|
256
256
|
'-d' => 1, '-dateformat' => 1,
|
|
257
257
|
'-D' => 0, # necessary to avoid matching lower-case equivalent
|
|
258
|
-
'-echo' => 1, '-
|
|
259
|
-
'-efile' => 1, '-
|
|
260
|
-
'-efile!' => 1, '-efile1!' => 1, '-efile2!' => 1, '-efile3!' => 1, '-efile4!' => 1,
|
|
258
|
+
'-echo' => 1, '-echo#' => 1,
|
|
259
|
+
'-efile' => 1, '-efile#' => 1, '-efile!' => 1, '-efile#!' => 1,
|
|
261
260
|
'-ext' => 1, '--ext' => 1, '-ext+' => 1, '--ext+' => 1,
|
|
262
261
|
'-extension' => 1, '--extension' => 1, '-extension+' => 1, '--extension+' => 1,
|
|
263
|
-
'-fileorder' => 1, '-
|
|
264
|
-
'-fileorder3' => 1, '-fileorder4' => 1, '-fileorder5' => 1,
|
|
262
|
+
'-fileorder' => 1, '-fileorder#' => 1,
|
|
265
263
|
'-geotag' => 1,
|
|
266
264
|
'-globaltimeshift' => 1,
|
|
267
265
|
'-i' => 1, '-ignore' => 1,
|
|
268
|
-
'-if' => 1, '-
|
|
266
|
+
'-if' => 1, '-if#' => 1,
|
|
269
267
|
'-lang' => 0, # (optional arg; cannot begin with "-")
|
|
270
268
|
'-listitem' => 1,
|
|
271
269
|
'-o' => 1, '-out' => 1,
|
|
@@ -4192,7 +4190,6 @@ sub NextUnusedFilename($;$)
|
|
|
4192
4190
|
}
|
|
4193
4191
|
++$copy;
|
|
4194
4192
|
++$alpha;
|
|
4195
|
-
++$seq;
|
|
4196
4193
|
}
|
|
4197
4194
|
}
|
|
4198
4195
|
|
|
@@ -4398,9 +4395,13 @@ sub ReadStayOpen($)
|
|
|
4398
4395
|
undef $optArgs;
|
|
4399
4396
|
next unless $lastOpt eq '-stay_open' or $lastOpt eq '-@';
|
|
4400
4397
|
} else {
|
|
4401
|
-
$optArgs = $optArgs{$arg};
|
|
4402
4398
|
$lastOpt = lc $arg;
|
|
4403
|
-
$optArgs = $optArgs{$
|
|
4399
|
+
$optArgs = $optArgs{$arg};
|
|
4400
|
+
unless (defined $optArgs) {
|
|
4401
|
+
$optArgs = $optArgs{$lastOpt};
|
|
4402
|
+
# handle options with trailing numbers
|
|
4403
|
+
$optArgs = $optArgs{"$1#$2"} if not defined $optArgs and $lastOpt =~ /^(.*?)\d+(!?)$/;
|
|
4404
|
+
}
|
|
4404
4405
|
next unless $lastOpt =~ /^-execute\d*$/;
|
|
4405
4406
|
}
|
|
4406
4407
|
$processArgs = 1;
|
|
@@ -4765,8 +4766,9 @@ L<Image::ExifTool::TagNames|Image::ExifTool::TagNames> for documentation on
|
|
|
4765
4766
|
available tag names. A tag name may include leading group names separated
|
|
4766
4767
|
by colons (eg. C<-EXIF:CreateDate>, or C<-Doc1:XMP:Creator>), and each group
|
|
4767
4768
|
name may be prefixed by a digit to specify family number (eg.
|
|
4768
|
-
C<-1IPTC:City>).
|
|
4769
|
-
family.
|
|
4769
|
+
C<-1IPTC:City>). (Note that the API SavePath and SaveFormat options must be
|
|
4770
|
+
used for the family 5 and 6 groups respectively to be available.) Use the
|
|
4771
|
+
B<-listg> option to list available group names by family.
|
|
4770
4772
|
|
|
4771
4773
|
A special tag name of C<All> may be used to indicate all meta information
|
|
4772
4774
|
(ie. B<-All>). This is particularly useful when a group name is specified
|
|
@@ -4774,10 +4776,11 @@ to extract all information in a group (but beware that unless the B<-a>
|
|
|
4774
4776
|
option is also used, some tags in the group may be suppressed by same-named
|
|
4775
4777
|
tags in other groups). The wildcard characters C<?> and C<*> may be used in
|
|
4776
4778
|
a tag name to match any single character and zero or more characters
|
|
4777
|
-
respectively.
|
|
4778
|
-
a group name of C<*> (or C<All>) may be used to extract all instances
|
|
4779
|
-
tag (as if B<-a> was used). Note that arguments containing wildcards
|
|
4780
|
-
be quoted on the command line of most systems to prevent shell
|
|
4779
|
+
respectively. These may not be used in a group name, with the exception
|
|
4780
|
+
that a group name of C<*> (or C<All>) may be used to extract all instances
|
|
4781
|
+
of a tag (as if B<-a> was used). Note that arguments containing wildcards
|
|
4782
|
+
must be quoted on the command line of most systems to prevent shell
|
|
4783
|
+
globbing.
|
|
4781
4784
|
|
|
4782
4785
|
A C<#> may be appended to the tag name to disable the print conversion on a
|
|
4783
4786
|
per-tag basis (see the B<-n> option). This may also be used when writing or
|
|
@@ -4856,8 +4859,8 @@ are removed if the containing group is deleted:
|
|
|
4856
4859
|
- Deleting EXIF only removes ExifIFD which also deletes
|
|
4857
4860
|
InteropIFD and MakerNotes.
|
|
4858
4861
|
|
|
4859
|
-
MOV/MP4
|
|
4860
|
-
- Deleting ItemList also deletes Keys tags
|
|
4862
|
+
MOV/MP4 Video:
|
|
4863
|
+
- Deleting ItemList also deletes Keys tags.
|
|
4861
4864
|
|
|
4862
4865
|
Notes:
|
|
4863
4866
|
|
|
@@ -5491,8 +5494,9 @@ which case the string is loaded from the contents of the file. Tag names in
|
|
|
5491
5494
|
the format file or string begin with a C<$> symbol and may contain leading
|
|
5492
5495
|
group names and/or a trailing C<#> (to disable print conversion). Case is
|
|
5493
5496
|
not significant. Braces C<{}> may be used around the tag name to separate
|
|
5494
|
-
it from subsequent text
|
|
5495
|
-
|
|
5497
|
+
it from subsequent text (and must be used if subsequent text begins with an
|
|
5498
|
+
alphanumeric character, hyphen, underline, colon or number sign). Use C<$$>
|
|
5499
|
+
to represent a C<$> symbol, and C<$/> for a newline.
|
|
5496
5500
|
|
|
5497
5501
|
Multiple B<-p> options may be used, each contributing a line (or more) of
|
|
5498
5502
|
text to the output. Lines beginning with C<#[HEAD]> and C<#[TAIL]> are
|
|
@@ -5519,7 +5523,7 @@ with this command:
|
|
|
5519
5523
|
|
|
5520
5524
|
produces output like this:
|
|
5521
5525
|
|
|
5522
|
-
-- Generated by ExifTool 12.
|
|
5526
|
+
-- Generated by ExifTool 12.58 --
|
|
5523
5527
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5524
5528
|
(f/5.6, 1/60s, ISO 100)
|
|
5525
5529
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -18,7 +18,7 @@ use vars qw($VERSION);
|
|
|
18
18
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
19
19
|
use Image::ExifTool::ID3;
|
|
20
20
|
|
|
21
|
-
$VERSION = '1.
|
|
21
|
+
$VERSION = '1.12';
|
|
22
22
|
|
|
23
23
|
# information for time/date-based tags (time zero is Jan 1, 1904)
|
|
24
24
|
my %timeInfo = (
|
|
@@ -203,7 +203,7 @@ sub ProcessAIFF($$)
|
|
|
203
203
|
return 1 if $fast3;
|
|
204
204
|
$tagTablePtr = GetTagTable('Image::ExifTool::DjVu::Main');
|
|
205
205
|
# modify FileType to indicate a multi-page document
|
|
206
|
-
$$et{VALUE}{FileType} .= " (multi-page)" if $buf2 eq 'DJVM';
|
|
206
|
+
$$et{VALUE}{FileType} .= " (multi-page)" if $buf2 eq 'DJVM' and $$et{VALUE}{FileType};
|
|
207
207
|
$type = 'DjVu';
|
|
208
208
|
} else {
|
|
209
209
|
return 0 unless $buff =~ /^FORM....(AIF(F|C))/s;
|
|
@@ -15,7 +15,7 @@ use strict;
|
|
|
15
15
|
use vars qw($VERSION);
|
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.07';
|
|
19
19
|
|
|
20
20
|
# APE metadata blocks
|
|
21
21
|
%Image::ExifTool::APE::Main = (
|
|
@@ -133,7 +133,7 @@ sub ProcessAPE($$)
|
|
|
133
133
|
|
|
134
134
|
# check APE signature and process audio information
|
|
135
135
|
# unless this is some other type of file
|
|
136
|
-
unless ($$et{
|
|
136
|
+
unless ($$et{FileType}) {
|
|
137
137
|
$raf->Read($buff, 32) == 32 or return 0;
|
|
138
138
|
$buff =~ /^(MAC |APETAGEX)/ or return 0;
|
|
139
139
|
$et->SetFileType();
|
|
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
|
|
|
35
35
|
use Image::ExifTool::Validate;
|
|
36
36
|
use Image::ExifTool::MacOS;
|
|
37
37
|
|
|
38
|
-
$VERSION = '3.
|
|
38
|
+
$VERSION = '3.52';
|
|
39
39
|
@ISA = qw(Exporter);
|
|
40
40
|
|
|
41
41
|
sub NumbersFirst($$);
|
|
@@ -184,7 +184,8 @@ gives the order of values for a serial data stream.
|
|
|
184
184
|
A B<Tag Name> is the handle by which the information is accessed in
|
|
185
185
|
ExifTool. In some instances, more than one name may correspond to a single
|
|
186
186
|
tag ID. In these cases, the actual name used depends on the context in
|
|
187
|
-
which the information is found.
|
|
187
|
+
which the information is found. Valid characters in a tag name are A-Z,
|
|
188
|
+
a-z, 0-9, hyphen (-) and underline (_). Case is not significant. A
|
|
188
189
|
question mark (C<?>) after a tag name indicates that the information is
|
|
189
190
|
either not understood, not verified, or not very useful -- these tags are
|
|
190
191
|
not extracted by ExifTool unless the L<Unknown|../ExifTool.html#Unknown> (-u) option is enabled. Be
|
|
@@ -1206,6 +1207,7 @@ TagID: foreach $tagID (@keys) {
|
|
|
1206
1207
|
$sepTable{$s} = $printConv;
|
|
1207
1208
|
# add PrintHex flag to PrintConv so we can check it later
|
|
1208
1209
|
$$printConv{PrintHex} = 1 if $$tagInfo{PrintHex};
|
|
1210
|
+
$$printConv{PrintInt} = 1 if $$tagInfo{PrintInt};
|
|
1209
1211
|
$$printConv{PrintString} = 1 if $$tagInfo{PrintString};
|
|
1210
1212
|
} else {
|
|
1211
1213
|
$caseInsensitive = 0;
|
|
@@ -1221,22 +1223,18 @@ TagID: foreach $tagID (@keys) {
|
|
|
1221
1223
|
next if $_ eq '' and $$printConv{$_} eq '';
|
|
1222
1224
|
$_ eq 'BITMASK' and $bits = $$printConv{$_}, next;
|
|
1223
1225
|
$_ eq 'OTHER' and next;
|
|
1224
|
-
my $index;
|
|
1225
|
-
if
|
|
1226
|
+
my $index = $_;
|
|
1227
|
+
$index =~ s/\.\d+$// if $$tagInfo{PrintInt};
|
|
1228
|
+
if (($$tagInfo{PrintHex} or $$printConv{BITMASK}) and $index =~ /^-?\d+$/) {
|
|
1226
1229
|
my $dig = $$tagInfo{PrintHex} || 1;
|
|
1227
|
-
if ($
|
|
1228
|
-
$index = sprintf('0x%.*x', $dig, $
|
|
1230
|
+
if ($index >= 0) {
|
|
1231
|
+
$index = sprintf('0x%.*x', $dig, $index);
|
|
1229
1232
|
} elsif ($format and $format =~ /int(16|32)/) {
|
|
1230
1233
|
# mask off unused bits of signed integer hex value
|
|
1231
1234
|
my $mask = { 16 => 0xffff, 32 => 0xffffffff }->{$1};
|
|
1232
|
-
$index = sprintf('0x%.*x', $dig, $
|
|
1233
|
-
} else {
|
|
1234
|
-
$index = $_;
|
|
1235
|
+
$index = sprintf('0x%.*x', $dig, $index & $mask);
|
|
1235
1236
|
}
|
|
1236
|
-
} elsif (/^[+-]?(?=\d|\.\d)\d*(\.\d*)?$/
|
|
1237
|
-
$index = $_;
|
|
1238
|
-
} else {
|
|
1239
|
-
$index = $_;
|
|
1237
|
+
} elsif ($$tagInfo{PrintString} or not /^[+-]?(?=\d|\.\d)\d*(\.\d*)?$/) {
|
|
1240
1238
|
# translate unprintable values
|
|
1241
1239
|
if ($index =~ s/([\x00-\x1f\x80-\xff])/sprintf("\\x%.2x",ord $1)/eg) {
|
|
1242
1240
|
$index = qq{"$index"};
|
|
@@ -2210,7 +2208,7 @@ sub WriteTagNames($$)
|
|
|
2210
2208
|
my $wid = 0;
|
|
2211
2209
|
my @keys;
|
|
2212
2210
|
foreach (sort { NumbersFirst($a,$b) } keys %$printConv) {
|
|
2213
|
-
next if /^(Notes|PrintHex|PrintString|OTHER)$/;
|
|
2211
|
+
next if /^(Notes|PrintHex|PrintInt|PrintString|OTHER)$/;
|
|
2214
2212
|
$align = '' if $align and /[^\d]/;
|
|
2215
2213
|
my $w = length($_) + length($$printConv{$_});
|
|
2216
2214
|
$wid = $w if $wid < $w;
|
|
@@ -2238,6 +2236,7 @@ sub WriteTagNames($$)
|
|
|
2238
2236
|
if (defined $key) {
|
|
2239
2237
|
$index = $key;
|
|
2240
2238
|
$prt = '= ' . EscapeHTML($$printConv{$key});
|
|
2239
|
+
$index =~ s/\.\d+$// if $$printConv{PrintInt};
|
|
2241
2240
|
if ($$printConv{PrintHex}) {
|
|
2242
2241
|
$index =~ s/(\.\d+)$//; # remove decimal
|
|
2243
2242
|
$index = sprintf('0x%x',$index);
|
|
@@ -88,18 +88,13 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.66';
|
|
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)
|
|
95
95
|
# --> have relaxed this for new lenses because Canon has been
|
|
96
96
|
# consistent about keeping "USM" in the model name
|
|
97
97
|
%canonLensTypes = ( #4
|
|
98
|
-
Notes => q{
|
|
99
|
-
Decimal values have been added to differentiate lenses which would otherwise
|
|
100
|
-
have the same LensType, and are used by the Composite LensID tag when
|
|
101
|
-
attempting to identify the specific lens model.
|
|
102
|
-
},
|
|
103
98
|
-1 => 'n/a',
|
|
104
99
|
1 => 'Canon EF 50mm f/1.8',
|
|
105
100
|
2 => 'Canon EF 28mm f/2.8 or Sigma Lens',
|
|
@@ -2402,6 +2397,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
2402
2397
|
DataMember => 'LensType',
|
|
2403
2398
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
2404
2399
|
PrintConv => \%canonLensTypes,
|
|
2400
|
+
PrintInt => 1,
|
|
2405
2401
|
},
|
|
2406
2402
|
23 => {
|
|
2407
2403
|
Name => 'MaxFocalLength',
|
|
@@ -3060,6 +3056,7 @@ my %ciMaxFocal = (
|
|
|
3060
3056
|
RawConv => '$val ? $val : undef', # don't use if value is zero
|
|
3061
3057
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
3062
3058
|
PrintConv => \%canonLensTypes,
|
|
3059
|
+
PrintInt => 1,
|
|
3063
3060
|
},
|
|
3064
3061
|
0x0e => {
|
|
3065
3062
|
Name => 'MinFocalLength',
|
|
@@ -3175,6 +3172,7 @@ my %ciMaxFocal = (
|
|
|
3175
3172
|
RawConv => '$val ? $val : undef', # don't use if value is zero
|
|
3176
3173
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
3177
3174
|
PrintConv => \%canonLensTypes,
|
|
3175
|
+
PrintInt => 1,
|
|
3178
3176
|
},
|
|
3179
3177
|
0x11 => { %ciMinFocal }, #9
|
|
3180
3178
|
0x13 => { %ciMaxFocal }, #9
|
|
@@ -3252,6 +3250,7 @@ my %ciMaxFocal = (
|
|
|
3252
3250
|
RawConv => '$val ? $val : undef', # don't use if value is zero
|
|
3253
3251
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
3254
3252
|
PrintConv => \%canonLensTypes,
|
|
3253
|
+
PrintInt => 1,
|
|
3255
3254
|
},
|
|
3256
3255
|
0x11 => { %ciMinFocal },
|
|
3257
3256
|
0x13 => { %ciMaxFocal },
|
|
@@ -3347,6 +3346,7 @@ my %ciMaxFocal = (
|
|
|
3347
3346
|
SeparateTable => 1,
|
|
3348
3347
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
3349
3348
|
PrintConv => \%canonLensTypes,
|
|
3349
|
+
PrintInt => 1,
|
|
3350
3350
|
},
|
|
3351
3351
|
0x113 => { %ciMinFocal },
|
|
3352
3352
|
0x115 => { %ciMaxFocal },
|
|
@@ -3502,6 +3502,7 @@ my %ciMaxFocal = (
|
|
|
3502
3502
|
SeparateTable => 1,
|
|
3503
3503
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
3504
3504
|
PrintConv => \%canonLensTypes,
|
|
3505
|
+
PrintInt => 1,
|
|
3505
3506
|
},
|
|
3506
3507
|
0x151 => { %ciMinFocal },
|
|
3507
3508
|
0x153 => { %ciMaxFocal,
|
|
@@ -3610,6 +3611,7 @@ my %ciMaxFocal = (
|
|
|
3610
3611
|
SeparateTable => 1,
|
|
3611
3612
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
3612
3613
|
PrintConv => \%canonLensTypes,
|
|
3614
|
+
PrintInt => 1,
|
|
3613
3615
|
},
|
|
3614
3616
|
0x1a9 => { %ciMinFocal },
|
|
3615
3617
|
0x1ab => { %ciMaxFocal,
|
|
@@ -3661,6 +3663,7 @@ my %ciMaxFocal = (
|
|
|
3661
3663
|
RawConv => '$val ? $val : undef', # don't use if value is zero
|
|
3662
3664
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
3663
3665
|
PrintConv => \%canonLensTypes,
|
|
3666
|
+
PrintInt => 1,
|
|
3664
3667
|
},
|
|
3665
3668
|
0x17 => { %ciCameraTemperature }, #PH
|
|
3666
3669
|
0x1b => { %ciMacroMagnification }, #PH
|
|
@@ -3721,6 +3724,7 @@ my %ciMaxFocal = (
|
|
|
3721
3724
|
SeparateTable => 1,
|
|
3722
3725
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
3723
3726
|
PrintConv => \%canonLensTypes,
|
|
3727
|
+
PrintInt => 1,
|
|
3724
3728
|
},
|
|
3725
3729
|
0xa4 => { #PH
|
|
3726
3730
|
Name => 'FirmwareRevision',
|
|
@@ -3936,6 +3940,7 @@ my %ciMaxFocal = (
|
|
|
3936
3940
|
SeparateTable => 1,
|
|
3937
3941
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
3938
3942
|
PrintConv => \%canonLensTypes,
|
|
3943
|
+
PrintInt => 1,
|
|
3939
3944
|
},
|
|
3940
3945
|
0xe8 => { %ciMinFocal },
|
|
3941
3946
|
0xea => { %ciMaxFocal,
|
|
@@ -4060,6 +4065,7 @@ my %ciMaxFocal = (
|
|
|
4060
4065
|
SeparateTable => 1,
|
|
4061
4066
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
4062
4067
|
PrintConv => \%canonLensTypes,
|
|
4068
|
+
PrintInt => 1,
|
|
4063
4069
|
},
|
|
4064
4070
|
0x155 => { %ciMinFocal },
|
|
4065
4071
|
0x157 => { %ciMaxFocal,
|
|
@@ -4169,6 +4175,7 @@ my %ciMaxFocal = (
|
|
|
4169
4175
|
SeparateTable => 1,
|
|
4170
4176
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
4171
4177
|
PrintConv => \%canonLensTypes,
|
|
4178
|
+
PrintInt => 1,
|
|
4172
4179
|
},
|
|
4173
4180
|
0x163 => { %ciMinFocal }, # (5DmkIII + 0x0e)
|
|
4174
4181
|
0x165 => { %ciMaxFocal }, # (5DmkIII + 0x0e)
|
|
@@ -4316,6 +4323,7 @@ my %ciMaxFocal = (
|
|
|
4316
4323
|
SeparateTable => 1,
|
|
4317
4324
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
4318
4325
|
PrintConv => \%canonLensTypes,
|
|
4326
|
+
PrintInt => 1,
|
|
4319
4327
|
},
|
|
4320
4328
|
0x114 => { %ciMinFocal },
|
|
4321
4329
|
0x116 => { %ciMaxFocal },
|
|
@@ -4405,6 +4413,7 @@ my %ciMaxFocal = (
|
|
|
4405
4413
|
SeparateTable => 1,
|
|
4406
4414
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
4407
4415
|
PrintConv => \%canonLensTypes,
|
|
4416
|
+
PrintInt => 1,
|
|
4408
4417
|
},
|
|
4409
4418
|
0xd8 => { %ciMinFocal }, #15
|
|
4410
4419
|
0xda => { %ciMaxFocal }, #15
|
|
@@ -4540,6 +4549,7 @@ my %ciMaxFocal = (
|
|
|
4540
4549
|
SeparateTable => 1,
|
|
4541
4550
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
4542
4551
|
PrintConv => \%canonLensTypes,
|
|
4552
|
+
PrintInt => 1,
|
|
4543
4553
|
},
|
|
4544
4554
|
0xec => { %ciMinFocal },
|
|
4545
4555
|
0xee => { %ciMaxFocal,
|
|
@@ -4629,6 +4639,7 @@ my %ciMaxFocal = (
|
|
|
4629
4639
|
SeparateTable => 1,
|
|
4630
4640
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
4631
4641
|
PrintConv => \%canonLensTypes,
|
|
4642
|
+
PrintInt => 1,
|
|
4632
4643
|
},
|
|
4633
4644
|
0xea => { %ciMinFocal },
|
|
4634
4645
|
0xec => { %ciMaxFocal },
|
|
@@ -4710,6 +4721,7 @@ my %ciMaxFocal = (
|
|
|
4710
4721
|
SeparateTable => 1,
|
|
4711
4722
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
4712
4723
|
PrintConv => \%canonLensTypes,
|
|
4724
|
+
PrintInt => 1,
|
|
4713
4725
|
},
|
|
4714
4726
|
0x168 => { %ciMinFocal },
|
|
4715
4727
|
0x16a => { %ciMaxFocal },
|
|
@@ -4777,6 +4789,7 @@ my %ciMaxFocal = (
|
|
|
4777
4789
|
SeparateTable => 1,
|
|
4778
4790
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
4779
4791
|
PrintConv => \%canonLensTypes,
|
|
4792
|
+
PrintInt => 1,
|
|
4780
4793
|
},
|
|
4781
4794
|
0x18b => { %ciMinFocal },
|
|
4782
4795
|
0x18d => { %ciMaxFocal },
|
|
@@ -4860,6 +4873,7 @@ my %ciMaxFocal = (
|
|
|
4860
4873
|
SeparateTable => 1,
|
|
4861
4874
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
4862
4875
|
PrintConv => \%canonLensTypes,
|
|
4876
|
+
PrintInt => 1,
|
|
4863
4877
|
},
|
|
4864
4878
|
0x107 => { #PH
|
|
4865
4879
|
Name => 'FirmwareVersion',
|
|
@@ -4975,6 +4989,7 @@ my %ciMaxFocal = (
|
|
|
4975
4989
|
SeparateTable => 1,
|
|
4976
4990
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
4977
4991
|
PrintConv => \%canonLensTypes,
|
|
4992
|
+
PrintInt => 1,
|
|
4978
4993
|
},
|
|
4979
4994
|
0xf8 => { %ciMinFocal },
|
|
4980
4995
|
0xfa => { %ciMaxFocal },
|
|
@@ -5070,6 +5085,7 @@ my %ciMaxFocal = (
|
|
|
5070
5085
|
SeparateTable => 1,
|
|
5071
5086
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
5072
5087
|
PrintConv => \%canonLensTypes,
|
|
5088
|
+
PrintInt => 1,
|
|
5073
5089
|
},
|
|
5074
5090
|
0x101 => { %ciMinFocal }, # (500D + 9)
|
|
5075
5091
|
0x103 => { %ciMaxFocal }, # (500D + 9)
|
|
@@ -5165,6 +5181,7 @@ my %ciMaxFocal = (
|
|
|
5165
5181
|
SeparateTable => 1,
|
|
5166
5182
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
5167
5183
|
PrintConv => \%canonLensTypes,
|
|
5184
|
+
PrintInt => 1,
|
|
5168
5185
|
},
|
|
5169
5186
|
0xec => { %ciMinFocal }, # (60D + 2)
|
|
5170
5187
|
0xee => { %ciMaxFocal }, # (60D + 2)
|
|
@@ -5247,6 +5264,7 @@ my %ciMaxFocal = (
|
|
|
5247
5264
|
SeparateTable => 1,
|
|
5248
5265
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
5249
5266
|
PrintConv => \%canonLensTypes,
|
|
5267
|
+
PrintInt => 1,
|
|
5250
5268
|
},
|
|
5251
5269
|
0x129 => { %ciMinFocal },
|
|
5252
5270
|
0x12b => { %ciMaxFocal },
|
|
@@ -5359,6 +5377,7 @@ my %ciMaxFocal = (
|
|
|
5359
5377
|
SeparateTable => 1,
|
|
5360
5378
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
5361
5379
|
PrintConv => \%canonLensTypes,
|
|
5380
|
+
PrintInt => 1,
|
|
5362
5381
|
},
|
|
5363
5382
|
0x186 => { %ciMinFocal },
|
|
5364
5383
|
0x188 => { %ciMaxFocal },
|
|
@@ -5433,6 +5452,7 @@ my %ciMaxFocal = (
|
|
|
5433
5452
|
SeparateTable => 1,
|
|
5434
5453
|
ValueConvInv => 'int($val)', # (must truncate decimal part)
|
|
5435
5454
|
PrintConv => \%canonLensTypes,
|
|
5455
|
+
PrintInt => 1,
|
|
5436
5456
|
},
|
|
5437
5457
|
0xe4 => { %ciMinFocal }, #PH
|
|
5438
5458
|
0xe6 => { %ciMaxFocal }, #PH
|
|
@@ -16,7 +16,7 @@ use Image::ExifTool::Exif;
|
|
|
16
16
|
use Image::ExifTool::XMP;
|
|
17
17
|
use Image::ExifTool::GPS;
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.07';
|
|
20
20
|
|
|
21
21
|
sub ProcessDJIInfo($$$);
|
|
22
22
|
|
|
@@ -96,6 +96,31 @@ my %convFloat2 = (
|
|
|
96
96
|
# (nothing yet decoded from device header)
|
|
97
97
|
);
|
|
98
98
|
|
|
99
|
+
# thermal parameters in APP4 of DJI M3T, H20N, M2EA and some M30T images (ref PH/forum11401)
|
|
100
|
+
%Image::ExifTool::DJI::ThermalParams2 = (
|
|
101
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
102
|
+
GROUPS => { 0 => 'APP4', 2 => 'Image' },
|
|
103
|
+
NOTES => 'Thermal parameters extracted from APP4 of DJI M3T RJPEG files.',
|
|
104
|
+
0x00 => { Name => 'AmbientTemperature', Format => 'float', PrintConv => 'sprintf("%.1f C",$val)' }, # (NC)
|
|
105
|
+
0x04 => { Name => 'ObjectDistance', Format => 'float', PrintConv => 'sprintf("%.1f m",$val)' },
|
|
106
|
+
0x08 => { Name => 'Emissivity', Format => 'float', PrintConv => 'sprintf("%.2f",$val)' },
|
|
107
|
+
0x0c => { Name => 'RelativeHumidity', Format => 'float', PrintConv => 'sprintf("%g %",$val*100)' },
|
|
108
|
+
0x10 => { Name => 'ReflectedTemperature',Format => 'float', PrintConv => 'sprintf("%.1f C",$val)' },
|
|
109
|
+
0x65 => { Name => 'IDString', Format => 'string[16]' }, # (NC)
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
# thermal parameters in APP4 of some DJI M30T images (ref PH)
|
|
113
|
+
%Image::ExifTool::DJI::ThermalParams3 = (
|
|
114
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
115
|
+
GROUPS => { 0 => 'APP4', 2 => 'Image' },
|
|
116
|
+
NOTES => 'Thermal parameters extracted from APP4 of some DJI RJPEG files.',
|
|
117
|
+
# 0x00 - 0xaa553800 - params3 magic number
|
|
118
|
+
0x04 => { Name => 'RelativeHumidity', Format => 'int16u' },
|
|
119
|
+
0x06 => { Name => 'ObjectDistance', Format => 'int16u', ValueConv => '$val / 10' },
|
|
120
|
+
0x08 => { Name => 'Emissivity', Format => 'int16u', ValueConv => '$val / 100' },
|
|
121
|
+
0x0a => { Name => 'ReflectedTemperature',Format => 'int16u', ValueConv => '$val / 10' },
|
|
122
|
+
);
|
|
123
|
+
|
|
99
124
|
%Image::ExifTool::DJI::XMP = (
|
|
100
125
|
%Image::ExifTool::XMP::xmpTableDefaults,
|
|
101
126
|
GROUPS => { 0 => 'XMP', 1 => 'XMP-drone-dji', 2 => 'Location' },
|
|
@@ -161,7 +186,7 @@ my %convFloat2 = (
|
|
|
161
186
|
);
|
|
162
187
|
|
|
163
188
|
#------------------------------------------------------------------------------
|
|
164
|
-
# Process DJI
|
|
189
|
+
# Process DJI info (ref PH)
|
|
165
190
|
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
|
166
191
|
# Returns: 1 on success
|
|
167
192
|
sub ProcessDJIInfo($$$)
|
|
@@ -174,6 +199,7 @@ sub ProcessDJIInfo($$$)
|
|
|
174
199
|
my $buff = substr($$dataPt, $dirStart, $dirLen);
|
|
175
200
|
$dataPt = \$buff;
|
|
176
201
|
}
|
|
202
|
+
$et->VerboseDir('DJIInfo', undef, length $$dataPt);
|
|
177
203
|
while ($$dataPt =~ /\G\[(.*?)\](?=(\[|$))/sg) {
|
|
178
204
|
my ($tag, $val) = split /:/, $1, 2;
|
|
179
205
|
next unless defined $tag and defined $val;
|