exiftool-vendored.pl 12.56.0 → 12.62.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 +115 -5
- package/bin/LICENSE +674 -0
- package/bin/MANIFEST +11 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +45 -44
- package/bin/config_files/example.config +1 -0
- package/bin/config_files/rotate_regions.config +1 -1
- package/bin/exiftool +262 -160
- package/bin/lib/Image/ExifTool/AIFF.pm +2 -2
- package/bin/lib/Image/ExifTool/APE.pm +2 -2
- package/bin/lib/Image/ExifTool/BMP.pm +0 -1
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +23 -19
- package/bin/lib/Image/ExifTool/Canon.pm +26 -6
- package/bin/lib/Image/ExifTool/CanonRaw.pm +5 -1
- package/bin/lib/Image/ExifTool/DJI.pm +28 -2
- package/bin/lib/Image/ExifTool/Exif.pm +77 -19
- package/bin/lib/Image/ExifTool/FlashPix.pm +33 -10
- package/bin/lib/Image/ExifTool/FujiFilm.pm +7 -3
- package/bin/lib/Image/ExifTool/GPS.pm +7 -2
- package/bin/lib/Image/ExifTool/Geotag.pm +30 -7
- package/bin/lib/Image/ExifTool/JPEG.pm +14 -2
- package/bin/lib/Image/ExifTool/Jpeg2000.pm +36 -11
- package/bin/lib/Image/ExifTool/LIF.pm +10 -2
- package/bin/lib/Image/ExifTool/LNK.pm +5 -4
- package/bin/lib/Image/ExifTool/MIE.pm +3 -3
- package/bin/lib/Image/ExifTool/MPEG.pm +2 -2
- package/bin/lib/Image/ExifTool/MakerNotes.pm +3 -2
- package/bin/lib/Image/ExifTool/Minolta.pm +6 -7
- package/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -1
- package/bin/lib/Image/ExifTool/Nikon.pm +1005 -909
- package/bin/lib/Image/ExifTool/NikonCustom.pm +2 -2
- package/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
- package/bin/lib/Image/ExifTool/Olympus.pm +88 -6
- package/bin/lib/Image/ExifTool/PDF.pm +17 -8
- package/bin/lib/Image/ExifTool/PNG.pm +10 -2
- package/bin/lib/Image/ExifTool/PanasonicRaw.pm +27 -1
- package/bin/lib/Image/ExifTool/Pentax.pm +8 -5
- package/bin/lib/Image/ExifTool/PhaseOne.pm +14 -1
- package/bin/lib/Image/ExifTool/Photoshop.pm +38 -7
- package/bin/lib/Image/ExifTool/QuickTime.pm +48 -14
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +91 -27
- package/bin/lib/Image/ExifTool/README +19 -2
- package/bin/lib/Image/ExifTool/RIFF.pm +34 -13
- package/bin/lib/Image/ExifTool/Rawzor.pm +2 -2
- package/bin/lib/Image/ExifTool/Ricoh.pm +2 -1
- package/bin/lib/Image/ExifTool/Sigma.pm +5 -4
- package/bin/lib/Image/ExifTool/SigmaRaw.pm +9 -3
- package/bin/lib/Image/ExifTool/Sony.pm +39 -10
- package/bin/lib/Image/ExifTool/TagLookup.pm +4687 -4628
- package/bin/lib/Image/ExifTool/TagNames.pod +338 -117
- package/bin/lib/Image/ExifTool/Validate.pm +5 -5
- package/bin/lib/Image/ExifTool/WPG.pm +296 -0
- package/bin/lib/Image/ExifTool/WriteExif.pl +42 -0
- package/bin/lib/Image/ExifTool/WritePDF.pl +7 -8
- package/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
- package/bin/lib/Image/ExifTool/Writer.pl +162 -40
- package/bin/lib/Image/ExifTool/XMP.pm +35 -8
- package/bin/lib/Image/ExifTool/XMP2.pl +2 -1
- package/bin/lib/Image/ExifTool/ZIP.pm +159 -41
- package/bin/lib/Image/ExifTool.pm +286 -65
- package/bin/lib/Image/ExifTool.pod +95 -51
- package/bin/perl-Image-ExifTool.spec +44 -43
- package/bin/pp_build_exe.args +5 -4
- package/package.json +3 -3
|
@@ -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
|
|
@@ -445,6 +446,11 @@ QuickTime-based files; it extracts other track-specific and timed metadata,
|
|
|
445
446
|
but can not yet edit tags in these locations (with the exception of
|
|
446
447
|
track-level date/time tags).
|
|
447
448
|
|
|
449
|
+
Beware that the Keys tags are actually stored inside the ItemList in the
|
|
450
|
+
file, so deleting the ItemList group as a block (ie. C<-ItemList:all=>) also
|
|
451
|
+
deletes Keys tags. Instead, to preserve Keys tags the ItemList tags may be
|
|
452
|
+
deleted individually with C<-QuickTime:ItemList:all=>.
|
|
453
|
+
|
|
448
454
|
Alternate language tags may be accessed for
|
|
449
455
|
L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> and
|
|
450
456
|
L<Keys|Image::ExifTool::TagNames/QuickTime Keys Tags> tags by adding
|
|
@@ -576,10 +582,10 @@ number of available PDF tags. See
|
|
|
576
582
|
L<http://www.adobe.com/devnet/pdf/pdf_reference.html> for the official PDF
|
|
577
583
|
specification.
|
|
578
584
|
|
|
579
|
-
ExifTool supports reading and writing PDF documents up to version
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
password-protected PDF files.
|
|
585
|
+
ExifTool supports reading and writing PDF documents up to version 2.0,
|
|
586
|
+
including support for RC4, AES-128 and AES-256 encryption. A
|
|
587
|
+
L<Password|../ExifTool.html#Password> option is provided to allow processing
|
|
588
|
+
of password-protected PDF files.
|
|
583
589
|
|
|
584
590
|
ExifTool may be used to write native PDF and XMP metadata to PDF files. It
|
|
585
591
|
uses an incremental update technique that has the advantages of being both
|
|
@@ -1051,7 +1057,7 @@ TagID: foreach $tagID (@keys) {
|
|
|
1051
1057
|
if ($$tagInfo{SubIFD}) {
|
|
1052
1058
|
warn "Warning: Wrong SubDirectory Start for SubIFD tag - $short $name\n" unless $isSub;
|
|
1053
1059
|
} else {
|
|
1054
|
-
warn "Warning: SubIFD flag not set for $short $name\n" if $isSub;
|
|
1060
|
+
warn "Warning: SubIFD flag not set for $short $name\n" if $isSub and not $processBinaryData;
|
|
1055
1061
|
}
|
|
1056
1062
|
if ($$tagInfo{Notes}) {
|
|
1057
1063
|
my $note = $$tagInfo{Notes};
|
|
@@ -1201,6 +1207,7 @@ TagID: foreach $tagID (@keys) {
|
|
|
1201
1207
|
$sepTable{$s} = $printConv;
|
|
1202
1208
|
# add PrintHex flag to PrintConv so we can check it later
|
|
1203
1209
|
$$printConv{PrintHex} = 1 if $$tagInfo{PrintHex};
|
|
1210
|
+
$$printConv{PrintInt} = 1 if $$tagInfo{PrintInt};
|
|
1204
1211
|
$$printConv{PrintString} = 1 if $$tagInfo{PrintString};
|
|
1205
1212
|
} else {
|
|
1206
1213
|
$caseInsensitive = 0;
|
|
@@ -1216,22 +1223,18 @@ TagID: foreach $tagID (@keys) {
|
|
|
1216
1223
|
next if $_ eq '' and $$printConv{$_} eq '';
|
|
1217
1224
|
$_ eq 'BITMASK' and $bits = $$printConv{$_}, next;
|
|
1218
1225
|
$_ eq 'OTHER' and next;
|
|
1219
|
-
my $index;
|
|
1220
|
-
if
|
|
1226
|
+
my $index = $_;
|
|
1227
|
+
$index =~ s/\.\d+$// if $$tagInfo{PrintInt};
|
|
1228
|
+
if (($$tagInfo{PrintHex} or $$printConv{BITMASK}) and $index =~ /^-?\d+$/) {
|
|
1221
1229
|
my $dig = $$tagInfo{PrintHex} || 1;
|
|
1222
|
-
if ($
|
|
1223
|
-
$index = sprintf('0x%.*x', $dig, $
|
|
1230
|
+
if ($index >= 0) {
|
|
1231
|
+
$index = sprintf('0x%.*x', $dig, $index);
|
|
1224
1232
|
} elsif ($format and $format =~ /int(16|32)/) {
|
|
1225
1233
|
# mask off unused bits of signed integer hex value
|
|
1226
1234
|
my $mask = { 16 => 0xffff, 32 => 0xffffffff }->{$1};
|
|
1227
|
-
$index = sprintf('0x%.*x', $dig, $
|
|
1228
|
-
} else {
|
|
1229
|
-
$index = $_;
|
|
1235
|
+
$index = sprintf('0x%.*x', $dig, $index & $mask);
|
|
1230
1236
|
}
|
|
1231
|
-
} elsif (/^[+-]?(?=\d|\.\d)\d*(\.\d*)?$/
|
|
1232
|
-
$index = $_;
|
|
1233
|
-
} else {
|
|
1234
|
-
$index = $_;
|
|
1237
|
+
} elsif ($$tagInfo{PrintString} or not /^[+-]?(?=\d|\.\d)\d*(\.\d*)?$/) {
|
|
1235
1238
|
# translate unprintable values
|
|
1236
1239
|
if ($index =~ s/([\x00-\x1f\x80-\xff])/sprintf("\\x%.2x",ord $1)/eg) {
|
|
1237
1240
|
$index = qq{"$index"};
|
|
@@ -2205,7 +2208,7 @@ sub WriteTagNames($$)
|
|
|
2205
2208
|
my $wid = 0;
|
|
2206
2209
|
my @keys;
|
|
2207
2210
|
foreach (sort { NumbersFirst($a,$b) } keys %$printConv) {
|
|
2208
|
-
next if /^(Notes|PrintHex|PrintString|OTHER)$/;
|
|
2211
|
+
next if /^(Notes|PrintHex|PrintInt|PrintString|OTHER)$/;
|
|
2209
2212
|
$align = '' if $align and /[^\d]/;
|
|
2210
2213
|
my $w = length($_) + length($$printConv{$_});
|
|
2211
2214
|
$wid = $w if $wid < $w;
|
|
@@ -2233,6 +2236,7 @@ sub WriteTagNames($$)
|
|
|
2233
2236
|
if (defined $key) {
|
|
2234
2237
|
$index = $key;
|
|
2235
2238
|
$prt = '= ' . EscapeHTML($$printConv{$key});
|
|
2239
|
+
$index =~ s/\.\d+$// if $$printConv{PrintInt};
|
|
2236
2240
|
if ($$printConv{PrintHex}) {
|
|
2237
2241
|
$index =~ s/(\.\d+)$//; # remove decimal
|
|
2238
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
|
|
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
21
21
|
use Image::ExifTool::Exif;
|
|
22
22
|
use Image::ExifTool::Canon;
|
|
23
23
|
|
|
24
|
-
$VERSION = '1.
|
|
24
|
+
$VERSION = '1.60';
|
|
25
25
|
|
|
26
26
|
sub WriteCRW($$);
|
|
27
27
|
sub ProcessCanonRaw($$$);
|
|
@@ -698,6 +698,10 @@ sub ProcessCanonRaw($$$)
|
|
|
698
698
|
$format ne 'string' and not $subdir;
|
|
699
699
|
} else {
|
|
700
700
|
$valueDataPos = $ptr;
|
|
701
|
+
# do MD5 of image data if requested
|
|
702
|
+
if ($$et{ImageDataMD5} and $tagID == 0x2005) {
|
|
703
|
+
$raf->Seek($ptr, 0) and $et->ImageDataMD5($raf, $size, 'raw');
|
|
704
|
+
}
|
|
701
705
|
if ($size <= 512 or ($verbose > 2 and $size <= 65536)
|
|
702
706
|
or ($tagInfo and ($$tagInfo{SubDirectory}
|
|
703
707
|
or grep(/^$$tagInfo{Name}$/i, $et->GetRequestedTags()) )))
|
|
@@ -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.08';
|
|
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;
|