exiftool_vendored 12.36.0 → 12.37.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 +11 -1
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +22 -12
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +6 -2
- data/bin/lib/Image/ExifTool/Canon.pm +142 -9
- data/bin/lib/Image/ExifTool/DarwinCore.pm +2 -2
- data/bin/lib/Image/ExifTool/GIF.pm +5 -1
- data/bin/lib/Image/ExifTool/GPS.pm +14 -10
- data/bin/lib/Image/ExifTool/Nikon.pm +425 -72
- data/bin/lib/Image/ExifTool/NikonSettings.pm +70 -62
- data/bin/lib/Image/ExifTool/PNG.pm +1 -0
- data/bin/lib/Image/ExifTool/QuickTime.pm +3 -2
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +26 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +6345 -6331
- data/bin/lib/Image/ExifTool/TagNames.pod +370 -258
- data/bin/lib/Image/ExifTool/WriteXMP.pl +10 -11
- data/bin/lib/Image/ExifTool/Writer.pl +5 -2
- data/bin/lib/Image/ExifTool/XMP.pm +18 -10
- data/bin/lib/Image/ExifTool.pm +5 -5
- 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: 76b6a0d2fdfef75ff151b28b383281cd0e5cbff7b324c7529b5972eea00fa2ab
|
4
|
+
data.tar.gz: 15f2d5ff22bb9eebdbe7e843d61c8e60ae3cc17d50d212c59e05411baa221937
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '05955adc090e482158e1c5e55f4aa6205434c9433e8b5369c45f4c030f59088e8efe5e91df54cf6cd44f973ad845e8436a958948ca2baa25bc1aea371a311d74'
|
7
|
+
data.tar.gz: 7a6c12e5f45dcd7efed082469de08ddb6e4eb21596f73f3c6abde5f6faf5318be5fe53e0f6aa6a88391f9e088d68c06682e042cd94f3f4f08656a6a2d76fa404
|
data/bin/Changes
CHANGED
@@ -7,6 +7,16 @@ RSS feed: https://exiftool.org/rss.xml
|
|
7
7
|
Note: The most recent production release is Version 12.30. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
9
9
|
|
10
|
+
Dec. 8, 2021 - Version 12.37
|
11
|
+
|
12
|
+
- Decode timed GPS from Vantrue S1 dashcam MP4 videos
|
13
|
+
- Decode ColorData tags for the Canon EOS R3 (thanks LibRaw)
|
14
|
+
- Decode more makernotes tags for Nikon Z cameras (thanks Warren Hatch)
|
15
|
+
- Extract TransparentColor from GIF images
|
16
|
+
- Improved parsing of input time values for GPSTimeStamp to properly handle a
|
17
|
+
"." separator
|
18
|
+
- Improved warning when incorrectly using "
|
19
|
+
|
10
20
|
Nov. 16, 2021 - Version 12.36
|
11
21
|
|
12
22
|
- IMPORTANT: Fixed bug introduced in 12.35 which corrupted JPEG 2000 images
|
@@ -19,7 +29,7 @@ Nov. 16, 2021 - Version 12.36
|
|
19
29
|
- Made the Composite GPSPosition tag writable
|
20
30
|
- Fixed erroneous "Skipped unknown bytes after JPEG SOS" warning
|
21
31
|
- Fixed group for new writable Jpeg2000 color tags in -listx output
|
22
|
-
- Fixed problem finding files in
|
32
|
+
- Fixed problem finding files in Windows when using wildcards in file name and
|
23
33
|
a drive letter with no slash
|
24
34
|
|
25
35
|
Nov. 11, 2021 - Version 12.35
|
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.37.tar.gz | tar -xf -
|
111
|
+
cd Image-ExifTool-12.37
|
112
112
|
./exiftool t/images/ExifTool.jpg
|
113
113
|
|
114
114
|
Note: These commands extract meta information from one of the test images.
|
data/bin/exiftool
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
use strict;
|
11
11
|
require 5.004;
|
12
12
|
|
13
|
-
my $version = '12.
|
13
|
+
my $version = '12.37';
|
14
14
|
|
15
15
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
16
16
|
BEGIN {
|
@@ -3467,18 +3467,26 @@ sub ConvertBinary($)
|
|
3467
3467
|
}
|
3468
3468
|
|
3469
3469
|
#------------------------------------------------------------------------------
|
3470
|
-
# Compare
|
3470
|
+
# Compare ValueConv and PrintConv values of a tag to see if they are equal
|
3471
3471
|
# Inputs: 0) value1, 1) value2
|
3472
3472
|
# Returns: true if they are equal
|
3473
3473
|
sub IsEqual($$)
|
3474
3474
|
{
|
3475
|
-
|
3476
|
-
|
3477
|
-
|
3478
|
-
|
3479
|
-
|
3480
|
-
|
3481
|
-
|
3475
|
+
my ($a, $b) = @_;
|
3476
|
+
# (scalar values are not print-converted)
|
3477
|
+
return 1 if $a eq $b or ref $a eq 'SCALAR';
|
3478
|
+
if (ref $a eq 'HASH' and ref $b eq 'HASH') {
|
3479
|
+
return 0 if scalar(keys %$a) != scalar(keys %$b);
|
3480
|
+
my $key;
|
3481
|
+
foreach $key (keys %$a) {
|
3482
|
+
return 0 unless IsEqual($$a{$key}, $$b{$key});
|
3483
|
+
}
|
3484
|
+
} else {
|
3485
|
+
return 0 if ref $a ne 'ARRAY' or ref $b ne 'ARRAY' or @$a != @$b;
|
3486
|
+
my $i;
|
3487
|
+
for ($i=0; $i<scalar(@$a); ++$i) {
|
3488
|
+
return 0 unless IsEqual($$a[$i], $$b[$i]);
|
3489
|
+
}
|
3482
3490
|
}
|
3483
3491
|
return 1;
|
3484
3492
|
}
|
@@ -4740,7 +4748,8 @@ for more details). C<+=> may also be used to increment numerical values (or
|
|
4740
4748
|
decrement if I<VALUE> is negative), and C<-=> may be used to conditionally
|
4741
4749
|
delete or replace a tag (see L</WRITING EXAMPLES> for examples). C<^=> is
|
4742
4750
|
used to write an empty string instead of deleting the tag when no I<VALUE>
|
4743
|
-
is given, but otherwise it is equivalent to C
|
4751
|
+
is given, but otherwise it is equivalent to C<=>, but note that the caret
|
4752
|
+
must be quoted on the Windows command line.
|
4744
4753
|
|
4745
4754
|
I<TAG> may contain one or more leading family 0, 1, 2 or 7 group names,
|
4746
4755
|
prefixed by optional family numbers, and separated colons. If no group name
|
@@ -5410,7 +5419,8 @@ directory if C<#[SECT]> contains C<$directory>). Lines beginning with
|
|
5410
5419
|
C<#[BODY]> and lines not beginning with C<#> are output for each processed
|
5411
5420
|
file. Lines beginning with C<#[IF]> are not output, but all BODY lines are
|
5412
5421
|
skipped if any tag on an IF line doesn't exist. Other lines beginning with
|
5413
|
-
C<#> are ignored.
|
5422
|
+
C<#> are ignored. (To output a line beginning with C<#>, use C<#[BODY]#>.)
|
5423
|
+
For example, this format file:
|
5414
5424
|
|
5415
5425
|
# this is a comment line
|
5416
5426
|
#[HEAD]-- Generated by ExifTool $exifToolVersion --
|
@@ -5424,7 +5434,7 @@ with this command:
|
|
5424
5434
|
|
5425
5435
|
produces output like this:
|
5426
5436
|
|
5427
|
-
-- Generated by ExifTool 12.
|
5437
|
+
-- Generated by ExifTool 12.37 --
|
5428
5438
|
File: a.jpg - 2003:10:31 15:44:19
|
5429
5439
|
(f/5.6, 1/60s, ISO 100)
|
5430
5440
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -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.47';
|
39
39
|
@ISA = qw(Exporter);
|
40
40
|
|
41
41
|
sub NumbersFirst($$);
|
@@ -757,7 +757,7 @@ sub new
|
|
757
757
|
my (%tagNameInfo, %id, %longID, %longName, %shortName, %tableNum,
|
758
758
|
%tagLookup, %tagExists, %noLookup, %tableWritable, %sepTable, %case,
|
759
759
|
%structs, %compositeModules, %isPlugin, %flattened, %structLookup,
|
760
|
-
@writePseudo);
|
760
|
+
@writePseudo, %dupXmpTag);
|
761
761
|
$self->{TAG_NAME_INFO} = \%tagNameInfo;
|
762
762
|
$self->{ID_LOOKUP} = \%id;
|
763
763
|
$self->{LONG_ID} = \%longID;
|
@@ -905,6 +905,10 @@ TagID: foreach $tagID (@keys) {
|
|
905
905
|
foreach (@grps) {
|
906
906
|
warn "Group name starts with 'ID-' for $short $name\n" if /^ID-/i;
|
907
907
|
}
|
908
|
+
if ($isXMP and not $$tagInfo{Avoid} and not $$tagInfo{Struct}) {
|
909
|
+
$dupXmpTag{$name} and warn "Duplicate XMP tag $name\n";
|
910
|
+
$dupXmpTag{$name} = 1;
|
911
|
+
}
|
908
912
|
# validate Name (must not start with a digit or else XML output will not be valid;
|
909
913
|
# must not start with a dash or exiftool command line may get confused)
|
910
914
|
if ($name !~ /^[_A-Za-z][-\w]+$/ and
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
88
88
|
sub ProcessExifInfo($$$);
|
89
89
|
sub SwapWords($);
|
90
90
|
|
91
|
-
$VERSION = '4.
|
91
|
+
$VERSION = '4.55';
|
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)
|
@@ -1919,6 +1919,11 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
1919
1919
|
Name => 'ColorData10',
|
1920
1920
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData10' },
|
1921
1921
|
},
|
1922
|
+
{ # (int16u[3973]) - R3 ref IB
|
1923
|
+
Condition => '$count == 3973',
|
1924
|
+
Name => 'ColorData11',
|
1925
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData11' },
|
1926
|
+
},
|
1922
1927
|
{
|
1923
1928
|
Name => 'ColorDataUnknown',
|
1924
1929
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorDataUnknown' },
|
@@ -7720,7 +7725,10 @@ my %ciMaxFocal = (
|
|
7720
7725
|
# Color data (MakerNotes tag 0x4001, count=1312,1313,1316) (ref PH)
|
7721
7726
|
%Image::ExifTool::Canon::ColorData7 = (
|
7722
7727
|
%binaryDataAttrs,
|
7723
|
-
NOTES =>
|
7728
|
+
NOTES => q{
|
7729
|
+
These tags are used by the EOS 1DX, 5DmkIII, 6D, 7DmkII, 100D, 650D, 700D,
|
7730
|
+
8000D, M and M2.
|
7731
|
+
},
|
7724
7732
|
FORMAT => 'int16s',
|
7725
7733
|
FIRST_ENTRY => 0,
|
7726
7734
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
@@ -7731,8 +7739,8 @@ my %ciMaxFocal = (
|
|
7731
7739
|
DataMember => 'ColorDataVersion',
|
7732
7740
|
RawConv => '$$self{ColorDataVersion} = $val',
|
7733
7741
|
PrintConv => {
|
7734
|
-
10 => '10 (1DX/5DmkIII/6D/70D/100D/650D/700D/M)',
|
7735
|
-
11 => '11 (7DmkII/750D/760D)',
|
7742
|
+
10 => '10 (1DX/5DmkIII/6D/70D/100D/650D/700D/M/M2)',
|
7743
|
+
11 => '11 (7DmkII/750D/760D/8000D)',
|
7736
7744
|
},
|
7737
7745
|
},
|
7738
7746
|
# not really sure about the AsShot, Auto and Measured values any more - PH
|
@@ -7867,6 +7875,10 @@ my %ciMaxFocal = (
|
|
7867
7875
|
# Color data (MakerNotes tag 0x4001, count=1560,etc) (ref IB)
|
7868
7876
|
%Image::ExifTool::Canon::ColorData8 = (
|
7869
7877
|
%binaryDataAttrs,
|
7878
|
+
NOTES => q{
|
7879
|
+
These tags are used by the EOS 1DXmkII, 5DS, 5DSR, 5DmkIV, 6DmkII, 77D, 80D,
|
7880
|
+
200D, 800D, 1300D, 2000D, 4000D and 9000D.
|
7881
|
+
},
|
7870
7882
|
FORMAT => 'int16s',
|
7871
7883
|
FIRST_ENTRY => 0,
|
7872
7884
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
@@ -7877,10 +7889,10 @@ my %ciMaxFocal = (
|
|
7877
7889
|
DataMember => 'ColorDataVersion',
|
7878
7890
|
RawConv => '$$self{ColorDataVersion} = $val',
|
7879
7891
|
PrintConv => {
|
7880
|
-
12 => '12 (5DS/5DSR)',
|
7881
|
-
13 => '13 (80D)', #PH
|
7892
|
+
12 => '12 (1DXmkII/5DS/5DSR)',
|
7893
|
+
13 => '13 (80D/5DmkIV)', #PH
|
7882
7894
|
14 => '14 (1300D/2000D/4000D)', #IB
|
7883
|
-
15 => '15 (6DmkII/77D/200D/800D)', #IB
|
7895
|
+
15 => '15 (6DmkII/77D/200D/800D,9000D)', #IB
|
7884
7896
|
},
|
7885
7897
|
},
|
7886
7898
|
0x3f => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
|
@@ -8027,6 +8039,7 @@ my %ciMaxFocal = (
|
|
8027
8039
|
# Color data (MakerNotes tag 0x4001, count=1820,etc) (ref PH)
|
8028
8040
|
%Image::ExifTool::Canon::ColorData9 = (
|
8029
8041
|
%binaryDataAttrs,
|
8042
|
+
NOTES => 'These tags are used by the M6mkII, M50, M200, EOS R, RP, 90D, 250D and 850D',
|
8030
8043
|
FORMAT => 'int16s',
|
8031
8044
|
FIRST_ENTRY => 0,
|
8032
8045
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
@@ -8039,8 +8052,8 @@ my %ciMaxFocal = (
|
|
8039
8052
|
PrintConv => {
|
8040
8053
|
16 => '16 (M50)',
|
8041
8054
|
17 => '17 (EOS R)', # (and PowerShot SX740HS)
|
8042
|
-
18 => '18 (EOS RP)', # (and PowerShot SX70HS)
|
8043
|
-
19 => '19 (90D/M6mkII/M200)',# (and PowerShot G7XmkIII)
|
8055
|
+
18 => '18 (EOS RP/250D)', # (and PowerShot SX70HS)
|
8056
|
+
19 => '19 (90D/850D/M6mkII/M200)',# (and PowerShot G7XmkIII)
|
8044
8057
|
},
|
8045
8058
|
},
|
8046
8059
|
0x47 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
|
@@ -8151,6 +8164,7 @@ my %ciMaxFocal = (
|
|
8151
8164
|
# (same as ColorData9 but shifted up by 0x0e, ref PH)
|
8152
8165
|
%Image::ExifTool::Canon::ColorData10 = (
|
8153
8166
|
%binaryDataAttrs,
|
8167
|
+
NOTES => 'These tags are used by the R5, R5 and EOS 1DXmkIII.',
|
8154
8168
|
FORMAT => 'int16s',
|
8155
8169
|
FIRST_ENTRY => 0,
|
8156
8170
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
@@ -8269,6 +8283,125 @@ my %ciMaxFocal = (
|
|
8269
8283
|
},
|
8270
8284
|
);
|
8271
8285
|
|
8286
|
+
# Color data (MakerNotes tag 0x4001, count=3973, ref IB)
|
8287
|
+
%Image::ExifTool::Canon::ColorData11 = (
|
8288
|
+
%binaryDataAttrs,
|
8289
|
+
NOTES => 'These tags are used by the EOS R3',
|
8290
|
+
FORMAT => 'int16s',
|
8291
|
+
FIRST_ENTRY => 0,
|
8292
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
8293
|
+
DATAMEMBER => [ 0 ],
|
8294
|
+
IS_SUBDIR => [ 0x12c ],
|
8295
|
+
0x00 => {
|
8296
|
+
Name => 'ColorDataVersion',
|
8297
|
+
DataMember => 'ColorDataVersion',
|
8298
|
+
RawConv => '$$self{ColorDataVersion} = $val',
|
8299
|
+
PrintConv => {
|
8300
|
+
34 => '34 (R3)', #IB
|
8301
|
+
},
|
8302
|
+
},
|
8303
|
+
0x69 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
|
8304
|
+
0x6d => 'ColorTempAsShot',
|
8305
|
+
0x6e => { Name => 'WB_RGGBLevelsAuto', Format => 'int16s[4]' },
|
8306
|
+
0x72 => 'ColorTempAuto',
|
8307
|
+
0x73 => { Name => 'WB_RGGBLevelsMeasured', Format => 'int16s[4]' },
|
8308
|
+
0x77 => 'ColorTempMeasured',
|
8309
|
+
0x78 => { Name => 'WB_RGGBLevelsUnknown', Format => 'int16s[4]', Unknown => 1 },
|
8310
|
+
0x7c => { Name => 'ColorTempUnknown', Unknown => 1 },
|
8311
|
+
0x7d => { Name => 'WB_RGGBLevelsUnknown2', Format => 'int16s[4]', Unknown => 1 },
|
8312
|
+
0x81 => { Name => 'ColorTempUnknown2', Unknown => 1 },
|
8313
|
+
0x82 => { Name => 'WB_RGGBLevelsUnknown3', Format => 'int16s[4]', Unknown => 1 },
|
8314
|
+
0x86 => { Name => 'ColorTempUnknown3', Unknown => 1 },
|
8315
|
+
0x87 => { Name => 'WB_RGGBLevelsUnknown4', Format => 'int16s[4]', Unknown => 1 },
|
8316
|
+
0x8b => { Name => 'ColorTempUnknown4', Unknown => 1 },
|
8317
|
+
0x8c => { Name => 'WB_RGGBLevelsUnknown5', Format => 'int16s[4]', Unknown => 1 },
|
8318
|
+
0x90 => { Name => 'ColorTempUnknown5', Unknown => 1 },
|
8319
|
+
0x91 => { Name => 'WB_RGGBLevelsUnknown6', Format => 'int16s[4]', Unknown => 1 },
|
8320
|
+
0x95 => { Name => 'ColorTempUnknown6', Unknown => 1 },
|
8321
|
+
0x96 => { Name => 'WB_RGGBLevelsUnknown7', Format => 'int16s[4]', Unknown => 1 },
|
8322
|
+
0x9a => { Name => 'ColorTempUnknown7', Unknown => 1 },
|
8323
|
+
0x9b => { Name => 'WB_RGGBLevelsUnknown8', Format => 'int16s[4]', Unknown => 1 },
|
8324
|
+
0x9f => { Name => 'ColorTempUnknown8', Unknown => 1 },
|
8325
|
+
0xa0 => { Name => 'WB_RGGBLevelsUnknown9', Format => 'int16s[4]', Unknown => 1 },
|
8326
|
+
0xa4 => { Name => 'ColorTempUnknown9', Unknown => 1 },
|
8327
|
+
0xa5 => { Name => 'WB_RGGBLevelsUnknown10', Format => 'int16s[4]', Unknown => 1 },
|
8328
|
+
0xa9 => { Name => 'ColorTempUnknown10', Unknown => 1 },
|
8329
|
+
0xaa => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 },
|
8330
|
+
0xae => { Name => 'ColorTempUnknown11', Unknown => 1 },
|
8331
|
+
0xaf => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 },
|
8332
|
+
0xb3 => { Name => 'ColorTempUnknown11', Unknown => 1 },
|
8333
|
+
0xb4 => { Name => 'WB_RGGBLevelsUnknown12', Format => 'int16s[4]', Unknown => 1 },
|
8334
|
+
0xb8 => { Name => 'ColorTempUnknown12', Unknown => 1 },
|
8335
|
+
0xb9 => { Name => 'WB_RGGBLevelsUnknown13', Format => 'int16s[4]', Unknown => 1 },
|
8336
|
+
0xbd => { Name => 'ColorTempUnknown13', Unknown => 1 },
|
8337
|
+
0xbe => { Name => 'WB_RGGBLevelsUnknown14', Format => 'int16s[4]', Unknown => 1 },
|
8338
|
+
0xc2 => { Name => 'ColorTempUnknown14', Unknown => 1 },
|
8339
|
+
0xc3 => { Name => 'WB_RGGBLevelsUnknown15', Format => 'int16s[4]', Unknown => 1 },
|
8340
|
+
0xc7 => { Name => 'ColorTempUnknown15', Unknown => 1 },
|
8341
|
+
0xc8 => { Name => 'WB_RGGBLevelsUnknown16', Format => 'int16s[4]', Unknown => 1 },
|
8342
|
+
0xcc => { Name => 'ColorTempUnknown16', Unknown => 1 },
|
8343
|
+
0xcd => { Name => 'WB_RGGBLevelsDaylight', Format => 'int16s[4]' },
|
8344
|
+
0xd1 => 'ColorTempDaylight',
|
8345
|
+
0xd2 => { Name => 'WB_RGGBLevelsShade', Format => 'int16s[4]' },
|
8346
|
+
0xd6 => 'ColorTempShade',
|
8347
|
+
0xd7 => { Name => 'WB_RGGBLevelsCloudy', Format => 'int16s[4]' },
|
8348
|
+
0xdb => 'ColorTempCloudy',
|
8349
|
+
0xdc => { Name => 'WB_RGGBLevelsTungsten', Format => 'int16s[4]' },
|
8350
|
+
0xe0 => 'ColorTempTungsten',
|
8351
|
+
0xe1 => { Name => 'WB_RGGBLevelsFluorescent',Format => 'int16s[4]' },
|
8352
|
+
0xe5 => 'ColorTempFluorescent',
|
8353
|
+
0xe6 => { Name => 'WB_RGGBLevelsKelvin', Format => 'int16s[4]' },
|
8354
|
+
0xea => 'ColorTempKelvin',
|
8355
|
+
0xeb => { Name => 'WB_RGGBLevelsFlash', Format => 'int16s[4]' },
|
8356
|
+
0xef => 'ColorTempFlash',
|
8357
|
+
0xf0 => { Name => 'WB_RGGBLevelsUnknown17', Format => 'int16s[4]', Unknown => 1 },
|
8358
|
+
0xf4 => { Name => 'ColorTempUnknown17', Unknown => 1 },
|
8359
|
+
0xf5 => { Name => 'WB_RGGBLevelsUnknown18', Format => 'int16s[4]', Unknown => 1 },
|
8360
|
+
0xf9 => { Name => 'ColorTempUnknown18', Unknown => 1 },
|
8361
|
+
0xfa => { Name => 'WB_RGGBLevelsUnknown19', Format => 'int16s[4]', Unknown => 1 },
|
8362
|
+
0xfe => { Name => 'ColorTempUnknown19', Unknown => 1 },
|
8363
|
+
0xff => { Name => 'WB_RGGBLevelsUnknown20', Format => 'int16s[4]', Unknown => 1 },
|
8364
|
+
0x103 => { Name => 'ColorTempUnknown20', Unknown => 1 },
|
8365
|
+
0x104 => { Name => 'WB_RGGBLevelsUnknown21', Format => 'int16s[4]', Unknown => 1 },
|
8366
|
+
0x108 => { Name => 'ColorTempUnknown21', Unknown => 1 },
|
8367
|
+
0x109 => { Name => 'WB_RGGBLevelsUnknown22', Format => 'int16s[4]', Unknown => 1 },
|
8368
|
+
0x10d => { Name => 'ColorTempUnknown22', Unknown => 1 },
|
8369
|
+
0x10e => { Name => 'WB_RGGBLevelsUnknown23', Format => 'int16s[4]', Unknown => 1 },
|
8370
|
+
0x112 => { Name => 'ColorTempUnknown23', Unknown => 1 },
|
8371
|
+
0x113 => { Name => 'WB_RGGBLevelsUnknown24', Format => 'int16s[4]', Unknown => 1 },
|
8372
|
+
0x117 => { Name => 'ColorTempUnknown24', Unknown => 1 },
|
8373
|
+
0x118 => { Name => 'WB_RGGBLevelsUnknown25', Format => 'int16s[4]', Unknown => 1 },
|
8374
|
+
0x11c => { Name => 'ColorTempUnknown25', Unknown => 1 },
|
8375
|
+
0x11d => { Name => 'WB_RGGBLevelsUnknown26', Format => 'int16s[4]', Unknown => 1 },
|
8376
|
+
0x121 => { Name => 'ColorTempUnknown26', Unknown => 1 },
|
8377
|
+
0x122 => { Name => 'WB_RGGBLevelsUnknown27', Format => 'int16s[4]', Unknown => 1 },
|
8378
|
+
0x126 => { Name => 'ColorTempUnknown27', Unknown => 1 },
|
8379
|
+
0x12c => {
|
8380
|
+
Name => 'ColorCalib',
|
8381
|
+
Format => 'undef[120]',
|
8382
|
+
Unknown => 1,
|
8383
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorCalib' }
|
8384
|
+
},
|
8385
|
+
0x16b => {
|
8386
|
+
Name => 'PerChannelBlackLevel',
|
8387
|
+
Format => 'int16u[4]',
|
8388
|
+
},
|
8389
|
+
# 0x27c - PerChannelBlackLevel again
|
8390
|
+
0x280 => {
|
8391
|
+
Name => 'NormalWhiteLevel',
|
8392
|
+
Format => 'int16u',
|
8393
|
+
RawConv => '$val || undef',
|
8394
|
+
},
|
8395
|
+
0x281 => {
|
8396
|
+
Name => 'SpecularWhiteLevel',
|
8397
|
+
Format => 'int16u',
|
8398
|
+
},
|
8399
|
+
0x282 => {
|
8400
|
+
Name => 'LinearityUpperMargin',
|
8401
|
+
Format => 'int16u',
|
8402
|
+
},
|
8403
|
+
);
|
8404
|
+
|
8272
8405
|
# Unknown color data (MakerNotes tag 0x4001)
|
8273
8406
|
%Image::ExifTool::Canon::ColorDataUnknown = (
|
8274
8407
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
@@ -15,7 +15,7 @@ use strict;
|
|
15
15
|
use vars qw($VERSION);
|
16
16
|
use Image::ExifTool::XMP;
|
17
17
|
|
18
|
-
$VERSION = '1.
|
18
|
+
$VERSION = '1.06';
|
19
19
|
|
20
20
|
my %dateTimeInfo = (
|
21
21
|
# NOTE: Do NOT put "Groups" here because Groups hash must not be common!
|
@@ -38,7 +38,7 @@ my %event = (
|
|
38
38
|
earliestDate => { %dateTimeInfo, Groups => { 2 => 'Time' } },
|
39
39
|
endDayOfYear => { Writable => 'integer', Groups => { 2 => 'Time' } },
|
40
40
|
eventDate => { %dateTimeInfo, Groups => { 2 => 'Time' } },
|
41
|
-
eventID => { },
|
41
|
+
eventID => { Avoid => 1, Notes => 'avoided in favor of XMP-iptcExt:EventID' },
|
42
42
|
eventRemarks => { Writable => 'lang-alt' },
|
43
43
|
eventTime => {
|
44
44
|
Groups => { 2 => 'Time' },
|
@@ -20,7 +20,7 @@ use strict;
|
|
20
20
|
use vars qw($VERSION);
|
21
21
|
use Image::ExifTool qw(:DataAccess :Utils);
|
22
22
|
|
23
|
-
$VERSION = '1.
|
23
|
+
$VERSION = '1.19';
|
24
24
|
|
25
25
|
# road map of directory locations in GIF images
|
26
26
|
my %gifMap = (
|
@@ -54,6 +54,7 @@ my %gifMap = (
|
|
54
54
|
Extensions => { # (for documentation only)
|
55
55
|
SubDirectory => { TagTable => 'Image::ExifTool::GIF::Extensions' },
|
56
56
|
},
|
57
|
+
TransparentColor => { },
|
57
58
|
);
|
58
59
|
|
59
60
|
# GIF89a application extensions:
|
@@ -475,6 +476,9 @@ Block:
|
|
475
476
|
my $delay = Get16u(\$buff, 1);
|
476
477
|
$delayTime += $delay;
|
477
478
|
$verbose and printf $out "Graphic Control: delay=%.2f\n", $delay / 100;
|
479
|
+
# get transparent colour
|
480
|
+
my $bits = Get8u(\$buff, 0);
|
481
|
+
$et->HandleTag($tagTablePtr, 'TransparentColor', Get8u(\$buff,3)) if $bits & 0x01;
|
478
482
|
$raf->Seek(-$length, 1) or last;
|
479
483
|
|
480
484
|
} elsif ($a == 0x01 and $length == 12) { # plain text extension
|
@@ -137,22 +137,26 @@ my %coordConv = (
|
|
137
137
|
my ($v, $et) = @_;
|
138
138
|
$v = $et->TimeNow() if lc($v) eq 'now';
|
139
139
|
my @tz;
|
140
|
-
if ($v =~ s/([-+])(
|
140
|
+
if ($v =~ s/([-+])(\d{1,2}):?(\d{2})\s*(DST)?$//i) { # remove timezone
|
141
141
|
my $s = $1 eq '-' ? 1 : -1; # opposite sign to convert back to UTC
|
142
142
|
my $t = $2;
|
143
|
-
@tz = ($s*$
|
143
|
+
@tz = ($s*$2, $s*$3);
|
144
144
|
}
|
145
|
-
|
146
|
-
|
145
|
+
# (note: we must allow '.' as a time separator, eg. '10.30.00', with is tricky due to decimal seconds)
|
146
|
+
# YYYYmmddHHMMSS[.ss] format
|
147
|
+
my @a = ($v =~ /^[^\d]*\d{4}[^\d]*\d{1,2}[^\d]*\d{1,2}[^\d]*(\d{1,2})[^\d]*(\d{2})[^\d]*(\d{2}(?:\.\d+)?)[^\d]*$/);
|
148
|
+
# HHMMSS[.ss] format
|
149
|
+
@a or @a = ($v =~ /^[^\d]*(\d{1,2})[^\d]*(\d{2})[^\d]*(\d{2}(?:\.\d+)?)[^\d]*$/);
|
150
|
+
@a or warn('Invalid time (use HH:MM:SS[.ss][+/-HH:MM|Z])'), return undef;
|
147
151
|
if (@tz) {
|
148
152
|
# adjust to UTC
|
149
|
-
$a[
|
150
|
-
$a[
|
151
|
-
while ($a[
|
152
|
-
while ($a[
|
153
|
-
$a[
|
153
|
+
$a[1] += $tz[1];
|
154
|
+
$a[0] += $tz[0];
|
155
|
+
while ($a[1] >= 60) { $a[1] -= 60; ++$a[0] }
|
156
|
+
while ($a[1] < 0) { $a[1] += 60; --$a[0] }
|
157
|
+
$a[0] = ($a[0] + 24) % 24;
|
154
158
|
}
|
155
|
-
return
|
159
|
+
return join(':', @a);
|
156
160
|
},
|
157
161
|
},
|
158
162
|
0x0008 => {
|