exiftool_vendored 12.36.0 → 12.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/Changes +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 => {
|