exiftool_vendored 12.57.0 → 12.58.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +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;
|