exiftool_vendored 11.50.0 → 11.51.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of exiftool_vendored might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/bin/Changes +6 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +2 -2
- data/bin/lib/Image/ExifTool.pm +1 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +11 -7
- data/bin/lib/Image/ExifTool/Canon.pm +11 -2
- data/bin/lib/Image/ExifTool/PostScript.pm +98 -20
- data/bin/lib/Image/ExifTool/TagLookup.pm +3 -2
- data/bin/lib/Image/ExifTool/TagNames.pod +64 -61
- data/bin/lib/Image/ExifTool/WriteExif.pl +5 -3
- data/bin/lib/Image/ExifTool/WritePostScript.pl +6 -79
- 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
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14d2ae1044ed8d62a0b4efcae5b775fb16db5f4c
|
4
|
+
data.tar.gz: 9ff9933b519b5ad645b675891ea048cf077b0d36
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a246e28c731ee0349cbf2782052eba51249f4df03dc623046f65250b258bed7179c3c179cb1dd64eddb0965f2518a2631c7cb492339ee54184cf66bd6df46542
|
7
|
+
data.tar.gz: 923d024c05145f18099dfc1f8cf6bbd6ccb4cd839ccd7d7af2ff3497298f8aba17ee110adb9e1787ffd1c801b93e656b73d065efaa413c0a8db37b16231608a0
|
data/bin/Changes
CHANGED
@@ -7,6 +7,12 @@ RSS feed: http://owl.phy.queensu.ca/~phil/exiftool/rss.xml
|
|
7
7
|
Note: The most recent production release is Version 11.50. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to CPAN.)
|
9
9
|
|
10
|
+
June 13, 2019 - Version 11.51
|
11
|
+
|
12
|
+
- Decode Canon DistortionCorrection tags
|
13
|
+
- Removed a minor EXIF warning when processing EPS files with a DOS header
|
14
|
+
- Fixed bug which caused an error when rewriting some EPS files multiple times
|
15
|
+
|
10
16
|
June 11, 2019 - Version 11.50 (production release)
|
11
17
|
|
12
18
|
- Added a new Canon LensType and two new Sony LensTypes (thanks LibRaw)
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
@@ -104,8 +104,8 @@ your home directory, then you would type the following commands in a
|
|
104
104
|
terminal window to extract and run ExifTool:
|
105
105
|
|
106
106
|
cd ~/Desktop
|
107
|
-
gzip -dc Image-ExifTool-11.
|
108
|
-
cd Image-ExifTool-11.
|
107
|
+
gzip -dc Image-ExifTool-11.51.tar.gz | tar -xf -
|
108
|
+
cd Image-ExifTool-11.51
|
109
109
|
./exiftool t/images/ExifTool.jpg
|
110
110
|
|
111
111
|
Note: These commands extract meta information from one of the test images.
|
data/bin/exiftool
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
use strict;
|
13
13
|
require 5.004;
|
14
14
|
|
15
|
-
my $version = '11.
|
15
|
+
my $version = '11.51';
|
16
16
|
|
17
17
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
18
18
|
my $exeDir;
|
@@ -5119,7 +5119,7 @@ with this command:
|
|
5119
5119
|
|
5120
5120
|
produces output like this:
|
5121
5121
|
|
5122
|
-
-- Generated by ExifTool 11.
|
5122
|
+
-- Generated by ExifTool 11.51 --
|
5123
5123
|
File: a.jpg - 2003:10:31 15:44:19
|
5124
5124
|
(f/5.6, 1/60s, ISO 100)
|
5125
5125
|
File: b.jpg - 2006:05:23 11:57:38
|
data/bin/lib/Image/ExifTool.pm
CHANGED
@@ -27,7 +27,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
|
|
27
27
|
%mimeType $swapBytes $swapWords $currentByteOrder %unpackStd
|
28
28
|
%jpegMarker %specialTags %fileTypeLookup);
|
29
29
|
|
30
|
-
$VERSION = '11.
|
30
|
+
$VERSION = '11.51';
|
31
31
|
$RELEASE = '';
|
32
32
|
@ISA = qw(Exporter);
|
33
33
|
%EXPORT_TAGS = (
|
@@ -34,12 +34,14 @@ use Image::ExifTool::Nikon;
|
|
34
34
|
use Image::ExifTool::Validate;
|
35
35
|
use Image::ExifTool::MacOS;
|
36
36
|
|
37
|
-
$VERSION = '3.
|
37
|
+
$VERSION = '3.24';
|
38
38
|
@ISA = qw(Exporter);
|
39
39
|
|
40
40
|
sub NumbersFirst($$);
|
41
41
|
sub SortedTagTablekeys($);
|
42
42
|
|
43
|
+
my $createDate = 'Feb 15, 2005';
|
44
|
+
|
43
45
|
# global variables to control sorting order of table entries
|
44
46
|
my $numbersFirst = 1; # set to -1 to sort numbers last, or 2 to put negative numbers last
|
45
47
|
my $caseInsensitive; # flag to ignore case when sorting tag names
|
@@ -67,7 +69,8 @@ my %tweakOrder = (
|
|
67
69
|
Composite => 'Extra',
|
68
70
|
GeoTiff => 'GPS',
|
69
71
|
CanonVRD=> 'CanonCustom',
|
70
|
-
|
72
|
+
DJI => 'Casio',
|
73
|
+
FLIR => 'DJI',
|
71
74
|
FujiFilm => 'FLIR',
|
72
75
|
Kodak => 'JVC',
|
73
76
|
Leaf => 'Kodak',
|
@@ -184,11 +187,11 @@ instead of the descriptions, use C<exiftool -s>.
|
|
184
187
|
The B<Writable> column indicates whether the tag is writable by ExifTool.
|
185
188
|
Anything but a C<no> in this column means the tag is writable. A C<yes>
|
186
189
|
indicates writable information that is either unformatted or written using
|
187
|
-
the existing format. Other expressions give details about the
|
188
|
-
|
189
|
-
name may be followed by a number in square brackets to indicate the
|
190
|
-
of values written, or the number of characters in a fixed-length
|
191
|
-
(including a null terminator which is added if required).
|
190
|
+
the existing format. Other expressions give details about the format of the
|
191
|
+
stored value, and vary depending on the general type of information. The
|
192
|
+
format name may be followed by a number in square brackets to indicate the
|
193
|
+
number of values written, or the number of characters in a fixed-length
|
194
|
+
string (including a null terminator which is added if required).
|
192
195
|
|
193
196
|
A plus sign (C<+>) after an entry in the B<Writable> column indicates a
|
194
197
|
I<List> tag which supports multiple values and allows individual values to
|
@@ -1953,6 +1956,7 @@ sub CloseHtmlFiles($)
|
|
1953
1956
|
# write the trailers
|
1954
1957
|
print HTMLFILE "<hr>\n";
|
1955
1958
|
print HTMLFILE "(This document generated automatically by Image::ExifTool::BuildTagLookup)\n";
|
1959
|
+
print HTMLFILE "<br><i>Created $createDate</i>\n" if $htmlFile eq 'html/TagNames/index.html';
|
1956
1960
|
print HTMLFILE "<br><i>Last revised $fileDate</i>\n";
|
1957
1961
|
print HTMLFILE "<p class=lf><a href=";
|
1958
1962
|
if ($htmlFile =~ /index\.html$/) {
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
88
88
|
sub ProcessExifInfo($$$);
|
89
89
|
sub SwapWords($);
|
90
90
|
|
91
|
-
$VERSION = '4.
|
91
|
+
$VERSION = '4.16';
|
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)
|
@@ -8005,6 +8005,10 @@ my %ciMaxFocal = (
|
|
8005
8005
|
Name => 'PeripheralLighting',
|
8006
8006
|
PrintConv => \%offOn,
|
8007
8007
|
},
|
8008
|
+
3 => {
|
8009
|
+
Name => 'DistortionCorrection',
|
8010
|
+
PrintConv => \%offOn,
|
8011
|
+
},
|
8008
8012
|
4 => {
|
8009
8013
|
Name => 'ChromaticAberrationCorr',
|
8010
8014
|
PrintConv => \%offOn,
|
@@ -8014,6 +8018,7 @@ my %ciMaxFocal = (
|
|
8014
8018
|
PrintConv => \%offOn,
|
8015
8019
|
},
|
8016
8020
|
6 => 'PeripheralLightingValue',
|
8021
|
+
9 => 'DistortionCorrectionValue',
|
8017
8022
|
# 10 - flags?
|
8018
8023
|
11 => {
|
8019
8024
|
Name => 'OriginalImageWidth',
|
@@ -8049,6 +8054,10 @@ my %ciMaxFocal = (
|
|
8049
8054
|
Name => 'ChromaticAberrationSetting',
|
8050
8055
|
PrintConv => \%offOn,
|
8051
8056
|
},
|
8057
|
+
7 => {
|
8058
|
+
Name => 'DistortionCorrectionSetting',
|
8059
|
+
PrintConv => \%offOn,
|
8060
|
+
},
|
8052
8061
|
);
|
8053
8062
|
|
8054
8063
|
# Auto Lighting Optimizater information (MakerNotes tag 0x4018) (ref PH)
|
@@ -8093,7 +8102,7 @@ my %ciMaxFocal = (
|
|
8093
8102
|
},
|
8094
8103
|
},
|
8095
8104
|
# 6 - related to ChromaticAberrationCorr
|
8096
|
-
# 7 - related to DistortionCorrection
|
8105
|
+
# 7 - related to DistortionCorrection (0=off, 1=On in a 5DmkIV sample)
|
8097
8106
|
# 8 - related to PeripheralIlluminationCorr and ChromaticAberrationCorr
|
8098
8107
|
);
|
8099
8108
|
|
@@ -16,7 +16,7 @@ use strict;
|
|
16
16
|
use vars qw($VERSION $AUTOLOAD);
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
18
18
|
|
19
|
-
$VERSION = '1.
|
19
|
+
$VERSION = '1.44';
|
20
20
|
|
21
21
|
sub WritePS($$);
|
22
22
|
sub ProcessPS($$;$);
|
@@ -221,6 +221,97 @@ sub GetInputRecordSeparator($)
|
|
221
221
|
return $sep;
|
222
222
|
}
|
223
223
|
|
224
|
+
#------------------------------------------------------------------------------
|
225
|
+
# Split into lines ending in any CR, LF or CR+LF combination
|
226
|
+
# (this is annoying, and could be avoided if EPS files didn't mix linefeeds!)
|
227
|
+
# Inputs: 0) data pointer, 1) reference to lines array
|
228
|
+
# Notes: Fills @$lines with lines from splitting $$dataPt
|
229
|
+
sub SplitLine($$)
|
230
|
+
{
|
231
|
+
my ($dataPt, $lines) = @_;
|
232
|
+
for (;;) {
|
233
|
+
my $endl;
|
234
|
+
# find the position of the first LF (\x0a)
|
235
|
+
$endl = pos($$dataPt), pos($$dataPt) = 0 if $$dataPt =~ /\x0a/g;
|
236
|
+
if ($$dataPt =~ /\x0d/g) { # find the first CR (\x0d)
|
237
|
+
if (defined $endl) {
|
238
|
+
# (remember, CR+LF is a DOS newline...)
|
239
|
+
$endl = pos($$dataPt) if pos($$dataPt) < $endl - 1;
|
240
|
+
} else {
|
241
|
+
$endl = pos($$dataPt);
|
242
|
+
}
|
243
|
+
} elsif (not defined $endl) {
|
244
|
+
push @$lines, $$dataPt;
|
245
|
+
last;
|
246
|
+
}
|
247
|
+
if (length $$dataPt == $endl) {
|
248
|
+
push @$lines, $$dataPt;
|
249
|
+
last;
|
250
|
+
} else {
|
251
|
+
# continue to split into separate lines
|
252
|
+
push @$lines, substr($$dataPt, 0, $endl);
|
253
|
+
$$dataPt = substr($$dataPt, $endl);
|
254
|
+
}
|
255
|
+
}
|
256
|
+
}
|
257
|
+
|
258
|
+
#------------------------------------------------------------------------------
|
259
|
+
# check to be sure we haven't read past end of PS data in DOS-style file
|
260
|
+
# Inputs: 0) RAF ref (with PSEnd member), 1) data ref
|
261
|
+
# - modifies data and sets RAF to EOF if end of PS is reached
|
262
|
+
sub CheckPSEnd($$)
|
263
|
+
{
|
264
|
+
my ($raf, $dataPt) = @_;
|
265
|
+
my $pos = $raf->Tell();
|
266
|
+
if ($pos >= $$raf{PSEnd}) {
|
267
|
+
$raf->Seek(0, 2); # seek to end of file so we can't read any more
|
268
|
+
$$dataPt = substr($$dataPt, 0, length($$dataPt) - $pos + $$raf{PSEnd}) if $pos > $$raf{PSEnd};
|
269
|
+
}
|
270
|
+
}
|
271
|
+
|
272
|
+
#------------------------------------------------------------------------------
|
273
|
+
# Read next line from EPS file
|
274
|
+
# Inputs: 0) RAF ref (with PSEnd member if Postscript ends before end of file)
|
275
|
+
# 1) array of lines from file
|
276
|
+
# Returns: true on success
|
277
|
+
sub GetNextLine($$)
|
278
|
+
{
|
279
|
+
my ($raf, $lines) = @_;
|
280
|
+
my ($data, $changedNL);
|
281
|
+
my $altnl = ($/ eq "\x0d") ? "\x0a" : "\x0d";
|
282
|
+
for (;;) {
|
283
|
+
$raf->ReadLine($data) or last;
|
284
|
+
$$raf{PSEnd} and CheckPSEnd($raf, \$data);
|
285
|
+
# split line if it contains other newline sequences
|
286
|
+
if ($data =~ /$altnl/) {
|
287
|
+
if (length($data) > 500000 and IsPC()) {
|
288
|
+
# patch for Windows memory problem
|
289
|
+
unless ($changedNL) {
|
290
|
+
$changedNL = $/;
|
291
|
+
$/ = $altnl;
|
292
|
+
$altnl = $changedNL;
|
293
|
+
$raf->Seek(-length($data), 1);
|
294
|
+
next;
|
295
|
+
}
|
296
|
+
} else {
|
297
|
+
# split into separate lines
|
298
|
+
# push @$lines, split /$altnl/, $data, -1;
|
299
|
+
# if (@$lines == 2 and $$lines[1] eq $/) {
|
300
|
+
# # handle case of DOS newline data inside file using Unix newlines
|
301
|
+
# $$lines[0] .= pop @$lines;
|
302
|
+
# }
|
303
|
+
# split into separate lines if necessary
|
304
|
+
SplitLine(\$data, $lines);
|
305
|
+
}
|
306
|
+
} else {
|
307
|
+
push @$lines, $data;
|
308
|
+
}
|
309
|
+
$/ = $changedNL if $changedNL;
|
310
|
+
return 1;
|
311
|
+
}
|
312
|
+
return 0;
|
313
|
+
}
|
314
|
+
|
224
315
|
#------------------------------------------------------------------------------
|
225
316
|
# Decode comment from PostScript file
|
226
317
|
# Inputs: 0) comment string, 1) RAF ref, 2) reference to lines array
|
@@ -233,22 +324,7 @@ sub DecodeComment($$$;$)
|
|
233
324
|
$val =~ s/\x0d*\x0a*$//; # remove trailing CR, LF or CR/LF
|
234
325
|
# check for continuation comments
|
235
326
|
for (;;) {
|
236
|
-
|
237
|
-
my $buff;
|
238
|
-
$raf->ReadLine($buff) or last;
|
239
|
-
my $altnl = $/ eq "\x0d" ? "\x0a" : "\x0d";
|
240
|
-
if ($buff =~ /$altnl/) {
|
241
|
-
chomp $buff if $/ eq "\x0d\x0a"; # remove DOS newline before splitting
|
242
|
-
# split into separate lines
|
243
|
-
@$lines = split /$altnl/, $buff, -1;
|
244
|
-
# handle case of DOS newline data inside file using Unix newlines
|
245
|
-
@$lines = ( $$lines[0] . $$lines[1] ) if @$lines == 2 and $$lines[1] eq $/;
|
246
|
-
# add back trailing DOS newline if necessary
|
247
|
-
@$lines ? @$lines[-1] .= $/ : push @$lines, $/ if $/ eq "\x0d\x0a";
|
248
|
-
} else {
|
249
|
-
push @$lines, $buff;
|
250
|
-
}
|
251
|
-
}
|
327
|
+
@$lines or GetNextLine($raf, $lines) or last;
|
252
328
|
last unless $$lines[0] =~ /^%%\+/; # is the next line a continuation?
|
253
329
|
$$dataPt .= $$lines[0] if $dataPt; # add to data if necessary
|
254
330
|
$$lines[0] =~ s/\x0d*\x0a*$//; # remove trailing CR, LF or CR/LF
|
@@ -371,11 +447,13 @@ sub ProcessPS($$;$)
|
|
371
447
|
# - save DOS header then seek ahead and check PS header
|
372
448
|
$raf->Read($dos, 26) == 26 or return 0;
|
373
449
|
SetByteOrder('II');
|
374
|
-
|
450
|
+
my $psStart = Get32u(\$dos, 0);
|
451
|
+
unless ($raf->Seek($psStart, 0) and
|
375
452
|
$raf->Read($data, 4) == 4 and $data eq '%!PS')
|
376
453
|
{
|
377
454
|
return PSErr($et, 'invalid header');
|
378
455
|
}
|
456
|
+
$$raf{PSEnd} = $psStart + Get32u(\$dos, 4); # set end of PostScript data in RAF
|
379
457
|
} else {
|
380
458
|
# check for PostScript font file (PFA or PFB)
|
381
459
|
my $d2;
|
@@ -487,7 +565,7 @@ sub ProcessPS($$;$)
|
|
487
565
|
if ($mode) {
|
488
566
|
if (not $endToken) {
|
489
567
|
$buff .= $data;
|
490
|
-
next unless $data =~ m{<\?xpacket end=.(w|r).\?>(
|
568
|
+
next unless $data =~ m{<\?xpacket end=.(w|r).\?>(\n|\r|$)};
|
491
569
|
} elsif ($data !~ /^$endToken/i) {
|
492
570
|
if ($mode eq 'XMP') {
|
493
571
|
$buff .= $data;
|
@@ -565,7 +643,7 @@ sub ProcessPS($$;$)
|
|
565
643
|
$buff = $data;
|
566
644
|
undef $endToken; # no end token (just look for xpacket end)
|
567
645
|
# XMP could be contained in a single line (if newlines are different)
|
568
|
-
next unless $data =~ m{<\?xpacket end=.(w|r).\?>(
|
646
|
+
next unless $data =~ m{<\?xpacket end=.(w|r).\?>(\n|\r|$)};
|
569
647
|
} elsif ($data =~ /^%%?(\w+): ?(.*)/s and $$tagTablePtr{$1}) {
|
570
648
|
my ($tag, $val) = ($1, $2);
|
571
649
|
# only allow 'ImageData' and AI tags to have single leading '%'
|
@@ -2029,11 +2029,12 @@ my %tagLookup = (
|
|
2029
2029
|
'distortion' => { 376 => 0xa050 },
|
2030
2030
|
'distortioncompensation' => { 433 => 0x8040 },
|
2031
2031
|
'distortioncontrol' => { 224 => 0x10 },
|
2032
|
-
'distortioncorrection' => { 98 => 0x20705, 104 => 0x67, 114 => 0x7036, 279 => 0x50b, 306 => '7.1', 327 => 0x0, 428 => 0x601, 429 => 0x5b },
|
2032
|
+
'distortioncorrection' => { 75 => 0x3, 98 => 0x20705, 104 => 0x67, 114 => 0x7036, 279 => 0x50b, 306 => '7.1', 327 => 0x0, 428 => 0x601, 429 => 0x5b },
|
2033
2033
|
'distortioncorrection2' => { 283 => 0x1011 },
|
2034
2034
|
'distortioncorrectionalreadyapplied' => { 452 => 'DistortionCorrectionAlreadyApplied' },
|
2035
2035
|
'distortioncorrectionon' => { 98 => '0x20705.0', 104 => 0x63 },
|
2036
|
-
'distortioncorrectionsetting' => { 400 => 0x2013 },
|
2036
|
+
'distortioncorrectionsetting' => { 76 => 0x7, 400 => 0x2013 },
|
2037
|
+
'distortioncorrectionvalue' => { 75 => 0x9 },
|
2037
2038
|
'distortioncorrparams' => { 114 => 0x7037, 409 => 0x1a23, 412 => 0x1870, 414 => 0x189c, 415 => 0x18cc, 416 => 0x17d0, 428 => 0x6ca, 429 => 0x64 },
|
2038
2039
|
'distortioncorrparamsnumber' => { 412 => 0x1899, 414 => 0x18c5, 415 => 0x18f5, 416 => 0x17f9 },
|
2039
2040
|
'distortioncorrparamspresent' => { 412 => 0x1898, 414 => 0x18c4, 415 => 0x18f4, 416 => 0x17f8, 418 => 0x10b, 419 => 0x10b, 428 => 0x600, 429 => 0x5a },
|
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
|
|
12
12
|
=head1 TAG TABLES
|
13
13
|
|
14
14
|
The tables listed below give the names of all tags recognized by ExifTool.
|
15
|
-
They contain a total of
|
15
|
+
They contain a total of 22571 tags, with 15015 unique tag names.
|
16
16
|
|
17
17
|
B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
|
18
18
|
table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
|
@@ -37,11 +37,11 @@ instead of the descriptions, use C<exiftool -s>.
|
|
37
37
|
The B<Writable> column indicates whether the tag is writable by ExifTool.
|
38
38
|
Anything but a C<no> in this column means the tag is writable. A C<yes>
|
39
39
|
indicates writable information that is either unformatted or written using
|
40
|
-
the existing format. Other expressions give details about the
|
41
|
-
|
42
|
-
name may be followed by a number in square brackets to indicate the
|
43
|
-
of values written, or the number of characters in a fixed-length
|
44
|
-
(including a null terminator which is added if required).
|
40
|
+
the existing format. Other expressions give details about the format of the
|
41
|
+
stored value, and vary depending on the general type of information. The
|
42
|
+
format name may be followed by a number in square brackets to indicate the
|
43
|
+
number of values written, or the number of characters in a fixed-length
|
44
|
+
string (including a null terminator which is added if required).
|
45
45
|
|
46
46
|
A plus sign (C<+>) after an entry in the B<Writable> column indicates a
|
47
47
|
I<List> tag which supports multiple values and allows individual values to
|
@@ -1114,61 +1114,6 @@ IPTC group only in the standard location.
|
|
1114
1114
|
------ -------- --------
|
1115
1115
|
[no tags known]
|
1116
1116
|
|
1117
|
-
=head2 DJI Tags
|
1118
|
-
|
1119
|
-
This table lists tags found in the maker notes of images from some DJI
|
1120
|
-
Phantom drones.
|
1121
|
-
|
1122
|
-
Tag ID Tag Name Writable
|
1123
|
-
------ -------- --------
|
1124
|
-
0x0001 Make string
|
1125
|
-
0x0003 SpeedX float
|
1126
|
-
0x0004 SpeedY float
|
1127
|
-
0x0005 SpeedZ float
|
1128
|
-
0x0006 Pitch float
|
1129
|
-
0x0007 Yaw float
|
1130
|
-
0x0008 Roll float
|
1131
|
-
0x0009 CameraPitch float
|
1132
|
-
0x000a CameraYaw float
|
1133
|
-
0x000b CameraRoll float
|
1134
|
-
|
1135
|
-
=head3 DJI XMP Tags
|
1136
|
-
|
1137
|
-
XMP tags used by DJI for images from drones.
|
1138
|
-
|
1139
|
-
These tags belong to the ExifTool XMP-drone-dji family 1 group.
|
1140
|
-
|
1141
|
-
Tag Name Writable
|
1142
|
-
-------- --------
|
1143
|
-
AbsoluteAltitude real
|
1144
|
-
CalibratedFocalLength real
|
1145
|
-
CalibratedOpticalCenterX real
|
1146
|
-
CalibratedOpticalCenterY real
|
1147
|
-
CamReverse string
|
1148
|
-
DewarpData string
|
1149
|
-
DewarpFlag string
|
1150
|
-
FlightPitchDegree real
|
1151
|
-
FlightRollDegree real
|
1152
|
-
FlightXSpeed real
|
1153
|
-
FlightYSpeed real
|
1154
|
-
FlightYawDegree real
|
1155
|
-
FlightZSpeed real
|
1156
|
-
GPSLatitude real/
|
1157
|
-
GPSLongitude real/
|
1158
|
-
GPSLongtitude real
|
1159
|
-
GimbalPitchDegree real
|
1160
|
-
GimbalReverse string
|
1161
|
-
GimbalRollDegree real
|
1162
|
-
GimbalYawDegree real
|
1163
|
-
Latitude real
|
1164
|
-
Longitude real
|
1165
|
-
RelativeAltitude real
|
1166
|
-
RtkFlag string
|
1167
|
-
RtkStdHgt real
|
1168
|
-
RtkStdLat real
|
1169
|
-
RtkStdLon real
|
1170
|
-
SelfData string
|
1171
|
-
|
1172
1117
|
=head2 XMP Tags
|
1173
1118
|
|
1174
1119
|
XMP stands for "Extensible Metadata Platform", an XML/RDF-based metadata
|
@@ -6928,9 +6873,11 @@ This information is found in images from newer EOS models.
|
|
6928
6873
|
------ -------- --------
|
6929
6874
|
0 VignettingCorrVersion no
|
6930
6875
|
2 PeripheralLighting int16s
|
6876
|
+
3 DistortionCorrection int16s
|
6931
6877
|
4 ChromaticAberrationCorr int16s
|
6932
6878
|
5 ChromaticAberrationCorr int16s
|
6933
6879
|
6 PeripheralLightingValue int16s
|
6880
|
+
9 DistortionCorrectionValue int16s
|
6934
6881
|
11 OriginalImageWidth int16s
|
6935
6882
|
12 OriginalImageHeight int16s
|
6936
6883
|
|
@@ -6948,6 +6895,7 @@ Vignetting correction from PowerShot models.
|
|
6948
6895
|
------ -------- --------
|
6949
6896
|
5 PeripheralLightingSetting int32s
|
6950
6897
|
6 ChromaticAberrationSetting int32s
|
6898
|
+
7 DistortionCorrectionSetting int32s
|
6951
6899
|
|
6952
6900
|
=head3 Canon LightingOpt Tags
|
6953
6901
|
|
@@ -8058,6 +8006,61 @@ This information is found in Casio GV-10 AVI videos.
|
|
8058
8006
|
------ -------- --------
|
8059
8007
|
0 Software no
|
8060
8008
|
|
8009
|
+
=head2 DJI Tags
|
8010
|
+
|
8011
|
+
This table lists tags found in the maker notes of images from some DJI
|
8012
|
+
Phantom drones.
|
8013
|
+
|
8014
|
+
Tag ID Tag Name Writable
|
8015
|
+
------ -------- --------
|
8016
|
+
0x0001 Make string
|
8017
|
+
0x0003 SpeedX float
|
8018
|
+
0x0004 SpeedY float
|
8019
|
+
0x0005 SpeedZ float
|
8020
|
+
0x0006 Pitch float
|
8021
|
+
0x0007 Yaw float
|
8022
|
+
0x0008 Roll float
|
8023
|
+
0x0009 CameraPitch float
|
8024
|
+
0x000a CameraYaw float
|
8025
|
+
0x000b CameraRoll float
|
8026
|
+
|
8027
|
+
=head3 DJI XMP Tags
|
8028
|
+
|
8029
|
+
XMP tags used by DJI for images from drones.
|
8030
|
+
|
8031
|
+
These tags belong to the ExifTool XMP-drone-dji family 1 group.
|
8032
|
+
|
8033
|
+
Tag Name Writable
|
8034
|
+
-------- --------
|
8035
|
+
AbsoluteAltitude real
|
8036
|
+
CalibratedFocalLength real
|
8037
|
+
CalibratedOpticalCenterX real
|
8038
|
+
CalibratedOpticalCenterY real
|
8039
|
+
CamReverse string
|
8040
|
+
DewarpData string
|
8041
|
+
DewarpFlag string
|
8042
|
+
FlightPitchDegree real
|
8043
|
+
FlightRollDegree real
|
8044
|
+
FlightXSpeed real
|
8045
|
+
FlightYSpeed real
|
8046
|
+
FlightYawDegree real
|
8047
|
+
FlightZSpeed real
|
8048
|
+
GPSLatitude real/
|
8049
|
+
GPSLongitude real/
|
8050
|
+
GPSLongtitude real
|
8051
|
+
GimbalPitchDegree real
|
8052
|
+
GimbalReverse string
|
8053
|
+
GimbalRollDegree real
|
8054
|
+
GimbalYawDegree real
|
8055
|
+
Latitude real
|
8056
|
+
Longitude real
|
8057
|
+
RelativeAltitude real
|
8058
|
+
RtkFlag string
|
8059
|
+
RtkStdHgt real
|
8060
|
+
RtkStdLat real
|
8061
|
+
RtkStdLon real
|
8062
|
+
SelfData string
|
8063
|
+
|
8061
8064
|
=head2 FLIR Tags
|
8062
8065
|
|
8063
8066
|
Information extracted from the maker notes of JPEG images from thermal
|
@@ -367,9 +367,11 @@ sub ValidateImageData($$$;$)
|
|
367
367
|
my $minor;
|
368
368
|
$minor = 1 if $$et{DOC_NUM} or $$et{FILE_TYPE} ne 'TIFF';
|
369
369
|
unless (@bitsPerSample == $samplesPerPix) {
|
370
|
-
|
371
|
-
|
372
|
-
|
370
|
+
unless ($$et{FILE_TYPE} eq 'EPS' and @bitsPerSample == 1) {
|
371
|
+
# (just a warning for this problem)
|
372
|
+
my $s = $samplesPerPix eq '1' ? '' : 's';
|
373
|
+
$et->Warn("$dirName BitsPerSample should have $samplesPerPix value$s", $minor);
|
374
|
+
}
|
373
375
|
push @bitsPerSample, $bitsPerSample[0] while @bitsPerSample < $samplesPerPix;
|
374
376
|
foreach (@bitsPerSample) {
|
375
377
|
$et->WarnOnce("$dirName BitsPerSample values are different", $minor) if $_ ne $bitsPerSample[0];
|
@@ -302,54 +302,6 @@ sub WriteNewTags($$$)
|
|
302
302
|
return $success;
|
303
303
|
}
|
304
304
|
|
305
|
-
#------------------------------------------------------------------------------
|
306
|
-
# check to be sure we haven't read past end of PS data in DOS-style file
|
307
|
-
# Inputs: 0) RAF ref, 1) pointer to end of PS, 2) data
|
308
|
-
# - modifies data and sets RAF to EOF if end of PS is reached
|
309
|
-
sub CheckPSEnd($$$)
|
310
|
-
{
|
311
|
-
my $pos = $_[0]->Tell();
|
312
|
-
if ($pos >= $_[1]) {
|
313
|
-
$_[0]->Seek(0, 2); # seek to end of file so we can't read any more
|
314
|
-
$_[2] = substr($_[2], 0, length($_[2]) - $pos + $_[1]) if $pos > $_[1];
|
315
|
-
}
|
316
|
-
}
|
317
|
-
|
318
|
-
#------------------------------------------------------------------------------
|
319
|
-
# Split into lines ending in any CR, LF or CR+LF combination
|
320
|
-
# (this is annoying, and could be avoided if EPS files didn't mix linefeeds!)
|
321
|
-
# Inputs: 0) data pointer, 1) reference to lines array
|
322
|
-
# Notes: Updates data to contain next line and fills list with remaining lines
|
323
|
-
sub SplitLine($$)
|
324
|
-
{
|
325
|
-
my ($dataPt, $lines) = @_;
|
326
|
-
for (;;) {
|
327
|
-
my $endl;
|
328
|
-
# find the position of the first LF (\x0a)
|
329
|
-
$endl = pos($$dataPt), pos($$dataPt) = 0 if $$dataPt =~ /\x0a/g;
|
330
|
-
if ($$dataPt =~ /\x0d/g) { # find the first CR (\x0d)
|
331
|
-
if (defined $endl) {
|
332
|
-
# (remember, CR+LF is a DOS newline...)
|
333
|
-
$endl = pos($$dataPt) if pos($$dataPt) < $endl - 1;
|
334
|
-
} else {
|
335
|
-
$endl = pos($$dataPt);
|
336
|
-
}
|
337
|
-
} elsif (not defined $endl) {
|
338
|
-
push @$lines, $$dataPt;
|
339
|
-
last;
|
340
|
-
}
|
341
|
-
# split into separate lines
|
342
|
-
if (length $$dataPt == $endl) {
|
343
|
-
push @$lines, $$dataPt;
|
344
|
-
last;
|
345
|
-
} else {
|
346
|
-
push @$lines, substr($$dataPt, 0, $endl);
|
347
|
-
$$dataPt = substr($$dataPt, $endl);
|
348
|
-
}
|
349
|
-
}
|
350
|
-
$$dataPt = shift @$lines; # set $$dataPt to first line
|
351
|
-
}
|
352
|
-
|
353
305
|
#------------------------------------------------------------------------------
|
354
306
|
# Write PS file
|
355
307
|
# Inputs: 0) ExifTool object reference, 1) source dirInfo reference
|
@@ -365,7 +317,7 @@ sub WritePS($$)
|
|
365
317
|
my $verbose = $et->Options('Verbose');
|
366
318
|
my $out = $et->Options('TextOut');
|
367
319
|
my ($data, $buff, %flags, $err, $mode, $endToken);
|
368
|
-
my ($dos, $psStart, $
|
320
|
+
my ($dos, $psStart, $psNewStart, $xmpHint, @lines);
|
369
321
|
|
370
322
|
$raf->Read($data, 4) == 4 or return 0;
|
371
323
|
return 0 unless $data =~ /^(%!PS|%!Ad|\xc5\xd0\xd3\xc6)/;
|
@@ -390,7 +342,7 @@ sub WritePS($$)
|
|
390
342
|
$et->Error('Invalid PS header');
|
391
343
|
return 1;
|
392
344
|
}
|
393
|
-
|
345
|
+
$$raf{PSEnd} = $psStart + Get32u(\$dos, 8);
|
394
346
|
my $base = Get32u(\$dos, 20);
|
395
347
|
Set16u(0xffff, \$dos, 28); # ignore checksum
|
396
348
|
if ($base) {
|
@@ -465,34 +417,9 @@ sub WritePS($$)
|
|
465
417
|
$xmpHint = 0 if $$et{DEL_GROUP}{XMP};
|
466
418
|
$$newTags{XMP_HINT} = $xmpHint if $xmpHint; # add special tag to newTags list
|
467
419
|
|
468
|
-
my (@lines, $changedNL);
|
469
|
-
my $altnl = ($/ eq "\x0d") ? "\x0a" : "\x0d";
|
470
|
-
|
471
420
|
for (;;) {
|
472
|
-
|
473
|
-
|
474
|
-
} else {
|
475
|
-
$raf->ReadLine($data) or last;
|
476
|
-
$dos and CheckPSEnd($raf, $psEnd, $data);
|
477
|
-
# split line if it contains other newline sequences
|
478
|
-
if ($data =~ /$altnl/) {
|
479
|
-
if (length($data) > 500000 and IsPC()) {
|
480
|
-
# patch for Windows memory problem
|
481
|
-
unless ($changedNL) {
|
482
|
-
$changedNL = 1;
|
483
|
-
my $t = $/;
|
484
|
-
$/ = $altnl;
|
485
|
-
$altnl = $t;
|
486
|
-
$raf->Seek(-length($data), 1);
|
487
|
-
next;
|
488
|
-
}
|
489
|
-
} else {
|
490
|
-
# split into separate lines
|
491
|
-
SplitLine(\$data, \@lines);
|
492
|
-
}
|
493
|
-
}
|
494
|
-
}
|
495
|
-
undef $changedNL;
|
421
|
+
@lines or GetNextLine($raf, \@lines) or last;
|
422
|
+
$data = shift @lines;
|
496
423
|
if ($endToken) {
|
497
424
|
# look for end token
|
498
425
|
if ($data =~ m/^$endToken\s*$/is) {
|
@@ -641,7 +568,7 @@ sub WritePS($$)
|
|
641
568
|
$data = shift @lines;
|
642
569
|
} else {
|
643
570
|
$raf->ReadLine($data) or undef($data), last;
|
644
|
-
$dos and CheckPSEnd($raf,
|
571
|
+
$dos and CheckPSEnd($raf, \$data);
|
645
572
|
if ($data =~ /[\x0d\x0a]%%EOF\b/g) {
|
646
573
|
# split data before "%%EOF"
|
647
574
|
# (necessary if data contains other newline sequences)
|
@@ -659,7 +586,7 @@ sub WritePS($$)
|
|
659
586
|
Write($outfile, $data) or $err = 1;
|
660
587
|
Write($outfile, @lines) or $err = 1 if @lines;
|
661
588
|
while ($raf->Read($data, 65536)) {
|
662
|
-
$dos and CheckPSEnd($raf,
|
589
|
+
$dos and CheckPSEnd($raf, \$data);
|
663
590
|
Write($outfile, $data) or $err = 1;
|
664
591
|
}
|
665
592
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exiftool_vendored
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 11.
|
4
|
+
version: 11.51.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew McEachen
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-06-
|
12
|
+
date: 2019-06-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: exiftool
|