exiftool_vendored 12.06.0 → 12.12.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.
Potentially problematic release.
This version of exiftool_vendored might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/bin/Changes +96 -2
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +43 -42
- data/bin/exiftool +156 -82
- data/bin/lib/Image/ExifTool.pm +22 -13
- data/bin/lib/Image/ExifTool.pod +59 -50
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +11 -5
- data/bin/lib/Image/ExifTool/Canon.pm +202 -13
- data/bin/lib/Image/ExifTool/DarwinCore.pm +9 -3
- data/bin/lib/Image/ExifTool/EXE.pm +8 -5
- data/bin/lib/Image/ExifTool/GIF.pm +2 -2
- data/bin/lib/Image/ExifTool/Geotag.pm +30 -11
- data/bin/lib/Image/ExifTool/GoPro.pm +47 -30
- data/bin/lib/Image/ExifTool/IPTC.pm +1 -0
- data/bin/lib/Image/ExifTool/Import.pm +14 -11
- data/bin/lib/Image/ExifTool/JSON.pm +27 -4
- data/bin/lib/Image/ExifTool/MPF.pm +2 -2
- data/bin/lib/Image/ExifTool/MacOS.pm +153 -37
- data/bin/lib/Image/ExifTool/Matroska.pm +3 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +5 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +11 -3
- data/bin/lib/Image/ExifTool/Olympus.pm +8 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +12 -12
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -0
- data/bin/lib/Image/ExifTool/Pentax.pm +10 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +51 -16
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +68 -45
- data/bin/lib/Image/ExifTool/README +5 -2
- data/bin/lib/Image/ExifTool/RSRC.pm +17 -11
- data/bin/lib/Image/ExifTool/Radiance.pm +7 -2
- data/bin/lib/Image/ExifTool/Sony.pm +56 -35
- data/bin/lib/Image/ExifTool/Stim.pm +2 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +5756 -5710
- data/bin/lib/Image/ExifTool/TagNames.pod +248 -49
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +7 -6
- data/bin/lib/Image/ExifTool/Writer.pl +5 -3
- data/bin/lib/Image/ExifTool/XMP.pm +63 -18
- data/bin/lib/Image/ExifTool/XMP2.pl +1 -0
- data/bin/perl-Image-ExifTool.spec +42 -41
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +7 -7
@@ -14,16 +14,33 @@ use vars qw($VERSION);
|
|
14
14
|
use Image::ExifTool qw(:DataAccess :Utils);
|
15
15
|
use Image::ExifTool::Import;
|
16
16
|
|
17
|
-
$VERSION = '1.
|
17
|
+
$VERSION = '1.02';
|
18
18
|
|
19
19
|
sub ProcessTag($$$$%);
|
20
20
|
|
21
21
|
%Image::ExifTool::JSON::Main = (
|
22
22
|
GROUPS => { 0 => 'JSON', 1 => 'JSON', 2 => 'Other' },
|
23
|
+
VARS => { NO_ID => 1 },
|
23
24
|
NOTES => q{
|
24
|
-
|
25
|
-
tags from basic
|
25
|
+
Other than a few tags in the table below, JSON tags have not been
|
26
|
+
pre-defined. However, ExifTool will read any existing tags from basic
|
27
|
+
JSON-formatted files.
|
26
28
|
},
|
29
|
+
# ON1 settings tags
|
30
|
+
ON1_SettingsData => {
|
31
|
+
RawConv => q{
|
32
|
+
require Image::ExifTool::XMP;
|
33
|
+
$val = Image::ExifTool::XMP::DecodeBase64($val);
|
34
|
+
},
|
35
|
+
SubDirectory => { TagTable => 'Image::ExifTool::PLIST::Main' },
|
36
|
+
},
|
37
|
+
ON1_SettingsMetadataCreated => { Groups => { 2 => 'Time' } },
|
38
|
+
ON1_SettingsMetadataModified => { Groups => { 2 => 'Time' } },
|
39
|
+
ON1_SettingsMetadataName => { },
|
40
|
+
ON1_SettingsMetadataPluginID => { },
|
41
|
+
ON1_SettingsMetadataTimestamp => { Groups => { 2 => 'Time' } },
|
42
|
+
ON1_SettingsMetadataUsage => { },
|
43
|
+
ON1_SettingsMetadataVisibleToUser=>{ },
|
27
44
|
);
|
28
45
|
|
29
46
|
#------------------------------------------------------------------------------
|
@@ -33,12 +50,18 @@ sub FoundTag($$$$%)
|
|
33
50
|
{
|
34
51
|
my ($et, $tagTablePtr, $tag, $val, %flags) = @_;
|
35
52
|
|
53
|
+
# special case to reformat ON1 tag names
|
54
|
+
if ($tag =~ s/^settings\w{8}-\w{4}-\w{4}-\w{4}-\w{12}(Data|Metadata.+)$/ON1_Settings$1/) {
|
55
|
+
$et->OverrideFileType('ONP','application/on1') if $$et{FILE_TYPE} eq 'JSON';
|
56
|
+
}
|
57
|
+
|
36
58
|
# avoid conflict with special table entries
|
37
59
|
$tag .= '!' if $Image::ExifTool::specialTags{$tag};
|
38
60
|
|
39
61
|
AddTagToTable($tagTablePtr, $tag, {
|
40
62
|
Name => Image::ExifTool::MakeTagName($tag),
|
41
63
|
%flags,
|
64
|
+
Temporary => 1,
|
42
65
|
}) unless $$tagTablePtr{$tag};
|
43
66
|
|
44
67
|
$et->HandleTag($tagTablePtr, $tag, $val);
|
@@ -94,7 +117,7 @@ sub ProcessJSON($$)
|
|
94
117
|
|
95
118
|
# remove any old tag definitions in case they change flags
|
96
119
|
foreach $key (TagTableKeys($tagTablePtr)) {
|
97
|
-
delete $$tagTablePtr{$key};
|
120
|
+
delete $$tagTablePtr{$key} if $$tagTablePtr{$key}{Temporary};
|
98
121
|
}
|
99
122
|
|
100
123
|
# extract tags from JSON database
|
@@ -28,8 +28,8 @@ sub ProcessMPImageList($$$);
|
|
28
28
|
from this segment is stored as a JPEG trailer. The MPF tags are not
|
29
29
|
writable, however the MPF segment may be deleted as a group (with "MPF:All")
|
30
30
|
but then the JPEG trailer should also be deleted (with "Trailer:All"). See
|
31
|
-
L<http://www.cipa.jp/std/documents/e/DC-007_E.pdf>
|
32
|
-
specification.
|
31
|
+
L<https://web.archive.org/web/20190713230858/http://www.cipa.jp/std/documents/e/DC-007_E.pdf>
|
32
|
+
for the official specification.
|
33
33
|
},
|
34
34
|
0xb000 => 'MPFVersion',
|
35
35
|
0xb001 => 'NumberOfImages',
|
@@ -4,6 +4,7 @@
|
|
4
4
|
# Description: Read/write MacOS system tags
|
5
5
|
#
|
6
6
|
# Revisions: 2017/03/01 - P. Harvey Created
|
7
|
+
# 2020/10/13 - PH Added ability to read MacOS "._" files
|
7
8
|
#------------------------------------------------------------------------------
|
8
9
|
|
9
10
|
package Image::ExifTool::MacOS;
|
@@ -11,15 +12,38 @@ use strict;
|
|
11
12
|
use vars qw($VERSION);
|
12
13
|
use Image::ExifTool qw(:DataAccess :Utils);
|
13
14
|
|
14
|
-
$VERSION = '1.
|
15
|
+
$VERSION = '1.11';
|
15
16
|
|
16
17
|
sub MDItemLocalTime($);
|
18
|
+
sub ProcessATTR($$$);
|
17
19
|
|
18
20
|
my %mdDateInfo = (
|
19
21
|
ValueConv => \&MDItemLocalTime,
|
20
22
|
PrintConv => '$self->ConvertDateTime($val)',
|
21
23
|
);
|
22
24
|
|
25
|
+
# Information decoded from Mac OS sidecar files
|
26
|
+
%Image::ExifTool::MacOS::Main = (
|
27
|
+
GROUPS => { 0 => 'File', 1 => 'MacOS' },
|
28
|
+
NOTES => q{
|
29
|
+
Note that on some filesystems, MacOS creates sidecar files with names that
|
30
|
+
begin with "._". ExifTool will read these files if specified, and extract
|
31
|
+
the information listed in the following table without the need for extra
|
32
|
+
options, but these files are not writable directly.
|
33
|
+
},
|
34
|
+
2 => {
|
35
|
+
Name => 'RSRC',
|
36
|
+
SubDirectory => { TagTable => 'Image::ExifTool::RSRC::Main' },
|
37
|
+
},
|
38
|
+
9 => {
|
39
|
+
Name => 'ATTR',
|
40
|
+
SubDirectory => {
|
41
|
+
TagTable => 'Image::ExifTool::MacOS::XAttr',
|
42
|
+
ProcessProc => \&ProcessATTR,
|
43
|
+
},
|
44
|
+
},
|
45
|
+
);
|
46
|
+
|
23
47
|
# "mdls" tags (ref PH)
|
24
48
|
%Image::ExifTool::MacOS::MDItem = (
|
25
49
|
WRITE_PROC => \&Image::ExifTool::DummyWriteProc,
|
@@ -221,6 +245,8 @@ my %mdDateInfo = (
|
|
221
245
|
XAttr tags are extracted using the "xattr" utility. They are extracted if
|
222
246
|
any "XAttr*" tag or the MacOS group is specifically requested, or by setting
|
223
247
|
the L<XAttrTags|../ExifTool.html#XAttrTags> API option to 1 or the L<RequestAll|../ExifTool.html#RequestAll> API option to 2 or higher.
|
248
|
+
And they extracted by default from MacOS "._" files when reading
|
249
|
+
these files directly.
|
224
250
|
},
|
225
251
|
'com.apple.FinderInfo' => {
|
226
252
|
Name => 'XAttrFinderInfo',
|
@@ -486,8 +512,50 @@ sub ExtractMDItemTags($$)
|
|
486
512
|
$$et{INDENT} =~ s/\| $//;
|
487
513
|
}
|
488
514
|
|
515
|
+
|
516
|
+
#------------------------------------------------------------------------------
|
517
|
+
# Read MacOS XAttr value
|
518
|
+
# Inputs: 0) ExifTool object ref, 1) file name
|
519
|
+
sub ReadXAttrValue($$$$)
|
520
|
+
{
|
521
|
+
my ($et, $tagTablePtr, $tag, $val) = @_;
|
522
|
+
# add to our table if necessary
|
523
|
+
unless ($$tagTablePtr{$tag}) {
|
524
|
+
my $name;
|
525
|
+
# generate tag name from attribute name
|
526
|
+
if ($tag =~ /^com\.apple\.(.*)$/) {
|
527
|
+
($name = $1) =~ s/^metadata:_?k//;
|
528
|
+
$name =~ s/^metadata:(com_)?//;
|
529
|
+
} else {
|
530
|
+
$name = $tag;
|
531
|
+
}
|
532
|
+
$name =~ s/[.:_]([a-z])/\U$1/g;
|
533
|
+
$name = 'XAttr' . ucfirst $name;
|
534
|
+
my %tagInfo = ( Name => $name );
|
535
|
+
$tagInfo{Groups} = { 2 => 'Time' } if $tag=~/Date$/;
|
536
|
+
$et->VPrint(0, " [adding $tag]\n");
|
537
|
+
AddTagToTable($tagTablePtr, $tag, \%tagInfo);
|
538
|
+
}
|
539
|
+
if ($val =~ /^bplist0/) {
|
540
|
+
my %dirInfo = ( DataPt => \$val );
|
541
|
+
require Image::ExifTool::PLIST;
|
542
|
+
if (Image::ExifTool::PLIST::ProcessBinaryPLIST($et, \%dirInfo, $tagTablePtr)) {
|
543
|
+
return undef if ref $dirInfo{Value} eq 'HASH';
|
544
|
+
$val = $dirInfo{Value}
|
545
|
+
} else {
|
546
|
+
$et->Warn("Error decoding $$tagTablePtr{$tag}{Name}");
|
547
|
+
return undef;
|
548
|
+
}
|
549
|
+
}
|
550
|
+
if (not ref $val and ($val =~ /\0/ or length($val) > 200) or $tag eq 'XAttrMDLabel') {
|
551
|
+
my $buff = $val;
|
552
|
+
$val = \$buff;
|
553
|
+
}
|
554
|
+
return $val;
|
555
|
+
}
|
556
|
+
|
489
557
|
#------------------------------------------------------------------------------
|
490
|
-
#
|
558
|
+
# Read MacOS extended attribute tags using 'xattr' utility
|
491
559
|
# Inputs: 0) ExifTool object ref, 1) file name
|
492
560
|
sub ExtractXAttrTags($$)
|
493
561
|
{
|
@@ -517,39 +585,8 @@ sub ExtractXAttrTags($$)
|
|
517
585
|
$val .= pack('H*', $_);
|
518
586
|
next;
|
519
587
|
} elsif ($tag and defined $val) {
|
520
|
-
|
521
|
-
|
522
|
-
my $name;
|
523
|
-
# generate tag name from attribute name
|
524
|
-
if ($tag =~ /^com\.apple\.(.*)$/) {
|
525
|
-
($name = $1) =~ s/^metadata:_?k//;
|
526
|
-
$name =~ s/^metadata:(com_)?//;
|
527
|
-
} else {
|
528
|
-
$name = $tag;
|
529
|
-
}
|
530
|
-
$name =~ s/[.:_]([a-z])/\U$1/g;
|
531
|
-
$name = 'XAttr' . ucfirst $name;
|
532
|
-
my %tagInfo = ( Name => $name );
|
533
|
-
$tagInfo{Groups} = { 2 => 'Time' } if $tag=~/Date$/;
|
534
|
-
$et->VPrint(0, " [adding $tag]\n");
|
535
|
-
AddTagToTable($tagTablePtr, $tag, \%tagInfo);
|
536
|
-
}
|
537
|
-
if ($val =~ /^bplist0/) {
|
538
|
-
my %dirInfo = ( DataPt => \$val );
|
539
|
-
require Image::ExifTool::PLIST;
|
540
|
-
if (Image::ExifTool::PLIST::ProcessBinaryPLIST($et, \%dirInfo, $tagTablePtr)) {
|
541
|
-
next if ref $dirInfo{Value} eq 'HASH';
|
542
|
-
$val = $dirInfo{Value}
|
543
|
-
} else {
|
544
|
-
$et->Warn("Error decoding $$tagTablePtr{$tag}{Name}");
|
545
|
-
next;
|
546
|
-
}
|
547
|
-
}
|
548
|
-
if (not ref $val and ($val =~ /\0/ or length($val) > 200) or $tag eq 'XAttrMDLabel') {
|
549
|
-
my $buff = $val;
|
550
|
-
$val = \$buff;
|
551
|
-
}
|
552
|
-
$et->HandleTag($tagTablePtr, $tag, $val);
|
588
|
+
$val = ReadXAttrValue($et, $tagTablePtr, $tag, $val);
|
589
|
+
$et->HandleTag($tagTablePtr, $tag, $val) if defined $val;
|
553
590
|
undef $tag;
|
554
591
|
undef $val;
|
555
592
|
}
|
@@ -584,6 +621,84 @@ sub GetFileCreateDate($$)
|
|
584
621
|
delete $$et{SET_GROUP1};
|
585
622
|
}
|
586
623
|
|
624
|
+
#------------------------------------------------------------------------------
|
625
|
+
# Read ATTR metadata from "._" file
|
626
|
+
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
627
|
+
# Return: 1 on success
|
628
|
+
# (ref https://www.swiftforensics.com/2018/11/the-dot-underscore-file-format.html)
|
629
|
+
sub ProcessATTR($$$)
|
630
|
+
{
|
631
|
+
my ($et, $dirInfo, $tagTablePtr) = @_;
|
632
|
+
my $dataPt = $$dirInfo{DataPt};
|
633
|
+
my $dataPos = $$dirInfo{DataPos};
|
634
|
+
my $dataLen = length $$dataPt;
|
635
|
+
|
636
|
+
$dataLen >= 58 and $$dataPt =~ /^.{34}ATTR/s or $et->Warn('Invalid ATTR header'), return 0;
|
637
|
+
my $entries = Get32u($dataPt, 66);
|
638
|
+
$et->VerboseDir('ATTR', $entries);
|
639
|
+
# (Note: The RAF is not in $dirInfo because it would break RSRC reading --
|
640
|
+
# the RSCR block uses relative offsets, while the ATTR block uses absolute! grrr!)
|
641
|
+
my $raf = $$et{RAF};
|
642
|
+
my $pos = 70; # first entry is after ATTR header
|
643
|
+
my $i;
|
644
|
+
for ($i=0; $i<$entries; ++$i) {
|
645
|
+
$pos + 12 > $dataLen and $et->Warn('Truncated ATTR entry'), last;
|
646
|
+
my $off = Get32u($dataPt, $pos);
|
647
|
+
my $len = Get32u($dataPt, $pos + 4);
|
648
|
+
my $n = Get8u($dataPt, $pos + 10); # number of characters in tag name
|
649
|
+
$pos + 11 + $n > $dataLen and $et->Warn('Truncated ATTR name'), last;
|
650
|
+
$off -= $dataPos; # convert to relative offset (grrr!)
|
651
|
+
$off < 0 or $off > $dataLen and $et->Warn('Invalid ATTR offset'), last;
|
652
|
+
my $tag = substr($$dataPt, $pos + 11, $n);
|
653
|
+
$tag =~ s/\0+$//; # remove null terminator
|
654
|
+
# remove random ID after kMDLabel in tag ID
|
655
|
+
$tag =~ s/^com.apple.metadata:kMDLabel_.*/com.apple.metadata:kMDLabel/s;
|
656
|
+
$off + $len > $dataLen and $et->Warn('Truncated ATTR value'), last;
|
657
|
+
my $val = ReadXAttrValue($et, $tagTablePtr, $tag, substr($$dataPt, $off, $len));
|
658
|
+
$et->HandleTag($tagTablePtr, $tag, $val,
|
659
|
+
DataPt => $dataPt,
|
660
|
+
DataPos => $dataPos,
|
661
|
+
Start => $off,
|
662
|
+
Size => $len,
|
663
|
+
) if defined $val;
|
664
|
+
$pos += (11 + $n + 3) & -4; # step to next entry (on even 4-byte boundary)
|
665
|
+
}
|
666
|
+
return 1;
|
667
|
+
}
|
668
|
+
|
669
|
+
#------------------------------------------------------------------------------
|
670
|
+
# Read information from a MacOS "._" sidecar file
|
671
|
+
# Inputs: 0) ExifTool ref, 1) dirInfo ref
|
672
|
+
# Returns: 1 on success, 0 if this wasn't a valid "._" file
|
673
|
+
# (ref https://www.swiftforensics.com/2018/11/the-dot-underscore-file-format.html)
|
674
|
+
sub ProcessMacOS($$)
|
675
|
+
{
|
676
|
+
my ($et, $dirInfo) = @_;
|
677
|
+
my $raf = $$dirInfo{RAF};
|
678
|
+
my ($hdr, $buff, $i);
|
679
|
+
|
680
|
+
return 0 unless $raf->Read($hdr, 26) == 26 and $hdr =~ /^\0\x05\x16\x07\0(.)\0\0Mac OS X /s;
|
681
|
+
my $ver = ord $1;
|
682
|
+
# (extension may be anything, so just echo back the incoming file extension if it exists)
|
683
|
+
$et->SetFileType(undef, undef, $$et{FILE_EXT});
|
684
|
+
$ver == 2 or $et->Warn("Unsupported file version $ver"), return 1;
|
685
|
+
SetByteOrder('MM');
|
686
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::MacOS::Main');
|
687
|
+
my $entries = Get16u(\$hdr, 0x18);
|
688
|
+
$et->VerboseDir('MacOS', $entries);
|
689
|
+
$raf->Read($hdr, $entries * 12) == $entries * 12 or $et->Warn('Truncated header'), return 1;
|
690
|
+
for ($i=0; $i<$entries; ++$i) {
|
691
|
+
my $pos = $i * 12;
|
692
|
+
my $tag = Get32u(\$hdr, $pos);
|
693
|
+
my $off = Get32u(\$hdr, $pos + 4);
|
694
|
+
my $len = Get32u(\$hdr, $pos + 8);
|
695
|
+
$len > 100000000 and $et->Warn('Record size too large'), last;
|
696
|
+
$raf->Seek($off,0) and $raf->Read($buff,$len) == $len or $et->Warn('Truncated record'), last;
|
697
|
+
$et->HandleTag($tagTablePtr, $tag, undef, DataPt => \$buff, DataPos => $off, Index => $i);
|
698
|
+
}
|
699
|
+
return 1;
|
700
|
+
}
|
701
|
+
|
587
702
|
1; # end
|
588
703
|
|
589
704
|
__END__
|
@@ -600,8 +715,9 @@ This module is used by Image::ExifTool
|
|
600
715
|
|
601
716
|
This module contains definitions required by Image::ExifTool to extract
|
602
717
|
MDItem* and XAttr* tags on MacOS systems using the "mdls" and "xattr"
|
603
|
-
utilities respectively.
|
604
|
-
|
718
|
+
utilities respectively. It also reads metadata directly from the MacOS "_."
|
719
|
+
sidecar files that are used on some filesystems to store file attributes.
|
720
|
+
Writable tags use "xattr", "setfile" or "osascript" for writing.
|
605
721
|
|
606
722
|
=head1 AUTHOR
|
607
723
|
|
@@ -14,7 +14,7 @@ use strict;
|
|
14
14
|
use vars qw($VERSION);
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
16
16
|
|
17
|
-
$VERSION = '1.
|
17
|
+
$VERSION = '1.10';
|
18
18
|
|
19
19
|
my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
20
20
|
|
@@ -221,6 +221,8 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
|
221
221
|
},
|
222
222
|
0x2e => {
|
223
223
|
Name => 'TrackEntry',
|
224
|
+
# reset TrackType member at the start of each track
|
225
|
+
Condition => 'delete $$self{TrackType}; 1',
|
224
226
|
SubDirectory => { TagTable => 'Image::ExifTool::Matroska::Main' },
|
225
227
|
},
|
226
228
|
0x57 => { Name => 'TrackNumber', Format => 'unsigned' },
|
@@ -49,7 +49,7 @@ use vars qw($VERSION %minoltaLensTypes %minoltaTeleconverters %minoltaColorMode
|
|
49
49
|
use Image::ExifTool qw(:DataAccess :Utils);
|
50
50
|
use Image::ExifTool::Exif;
|
51
51
|
|
52
|
-
$VERSION = '2.
|
52
|
+
$VERSION = '2.87';
|
53
53
|
|
54
54
|
# Full list of product codes for Sony-compatible Minolta lenses
|
55
55
|
# (ref http://www.kb.sony.com/selfservice/documentLink.do?externalId=C1000570)
|
@@ -602,6 +602,10 @@ $VERSION = '2.84';
|
|
602
602
|
15 => 'Light', #JR (NC)
|
603
603
|
16 => 'Autumn Leaves', #JR (NC)
|
604
604
|
17 => 'Sepia', #JR
|
605
|
+
18 => 'FL', #JR (7SM3)
|
606
|
+
19 => 'Vivid 2', #JR (7SM3)
|
607
|
+
20 => 'IN', #JR (7SM3)
|
608
|
+
21 => 'SH', #JR (7SM3)
|
605
609
|
100 => 'Neutral', #JD
|
606
610
|
101 => 'Clear', #JD
|
607
611
|
102 => 'Deep', #JD
|
@@ -62,7 +62,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
62
62
|
use Image::ExifTool::Exif;
|
63
63
|
use Image::ExifTool::GPS;
|
64
64
|
|
65
|
-
$VERSION = '3.
|
65
|
+
$VERSION = '3.89';
|
66
66
|
|
67
67
|
sub LensIDConv($$$);
|
68
68
|
sub ProcessNikonAVI($$$);
|
@@ -349,6 +349,7 @@ sub GetAFPointGrid($$;$);
|
|
349
349
|
'FE 47 00 00 24 24 4B 06' => 'Sigma 4.5mm F2.8 EX DC HSM Circular Fisheye', #JD
|
350
350
|
'26 48 11 11 30 30 1C 02' => 'Sigma 8mm F4 EX Circular Fisheye',
|
351
351
|
'79 40 11 11 2C 2C 1C 06' => 'Sigma 8mm F3.5 EX Circular Fisheye', #JD
|
352
|
+
'DB 40 11 11 2C 2C 1C 06' => 'Sigma 8mm F3.5 EX DG Circular Fisheye', #30
|
352
353
|
'DC 48 19 19 24 24 4B 06' => 'Sigma 10mm F2.8 EX DC HSM Fisheye',
|
353
354
|
'C2 4C 24 24 14 14 4B 06' => 'Sigma 14mm F1.8 DG HSM | A', #IB
|
354
355
|
'48 48 24 24 24 24 4B 02' => 'Sigma 14mm F2.8 EX Aspherical HSM',
|
@@ -1400,6 +1401,7 @@ my %binaryDataAttrs = (
|
|
1400
1401
|
16 => 'Electronic',
|
1401
1402
|
# 33 => ? seen for 1J2
|
1402
1403
|
48 => 'Electronic Front Curtain',
|
1404
|
+
# 80 => ? seen for the Z6II
|
1403
1405
|
# 81 => ? seen for Z50
|
1404
1406
|
},
|
1405
1407
|
},
|
@@ -2082,7 +2084,7 @@ my %binaryDataAttrs = (
|
|
2082
2084
|
},
|
2083
2085
|
},
|
2084
2086
|
{
|
2085
|
-
Condition => '$$valPt =~ /^
|
2087
|
+
Condition => '$$valPt =~ /^080[01]/', # Z6/Z7
|
2086
2088
|
Name => 'LensData0800',
|
2087
2089
|
SubDirectory => {
|
2088
2090
|
TagTable => 'Image::ExifTool::Nikon::LensData0800',
|
@@ -4657,6 +4659,12 @@ my %nikonFocalConversions = (
|
|
4657
4659
|
13 => 'Nikkor Z 24-70mm f/2.8 S',
|
4658
4660
|
14 => 'Nikkor Z 85mm f/1.8 S',
|
4659
4661
|
15 => 'Nikkor Z 24mm f/1.8 S', #IB
|
4662
|
+
16 => 'Nikkor Z 70-200mm f/2.8 VR S', #IB
|
4663
|
+
17 => 'Nikkor Z 20mm f/1.8 S', #IB
|
4664
|
+
18 => 'Nikkor Z 24-200mm f/4-6.3 VR', #IB
|
4665
|
+
21 => 'Nikkor Z 50mm f/1.2 S', #IB
|
4666
|
+
22 => 'Nikkor Z 24-50mm f/4-6.3', #IB
|
4667
|
+
23 => 'Nikkor Z 14-24mm f/2.8 S', #IB
|
4660
4668
|
},
|
4661
4669
|
},
|
4662
4670
|
0x36 => {
|
@@ -8992,7 +9000,7 @@ my %nikonFocalConversions = (
|
|
8992
9000
|
},
|
8993
9001
|
},
|
8994
9002
|
{
|
8995
|
-
Condition => '$$valPt =~ /^
|
9003
|
+
Condition => '$$valPt =~ /^080[01]/', # Z6/Z7
|
8996
9004
|
Name => 'LensData0800',
|
8997
9005
|
SubDirectory => {
|
8998
9006
|
TagTable => 'Image::ExifTool::Nikon::LensData0800',
|
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
40
40
|
use Image::ExifTool::Exif;
|
41
41
|
use Image::ExifTool::APP12;
|
42
42
|
|
43
|
-
$VERSION = '2.
|
43
|
+
$VERSION = '2.70';
|
44
44
|
|
45
45
|
sub PrintLensInfo($$$);
|
46
46
|
|
@@ -109,6 +109,7 @@ my %olympusLensTypes = (
|
|
109
109
|
'0 32 00' => 'Olympus Zuiko Digital ED 14-35mm F2.0 SWD', #PH
|
110
110
|
'0 32 10' => 'Olympus M.Zuiko Digital ED 12-200mm F3.5-6.3', #IB
|
111
111
|
'0 33 00' => 'Olympus Zuiko Digital 25mm F2.8', #PH
|
112
|
+
'0 33 10' => 'Olympus M.Zuiko Digital 150-400mm F4.5 TC1.25x IS Pro', #IB
|
112
113
|
'0 34 00' => 'Olympus Zuiko Digital ED 9-18mm F4.0-5.6', #7
|
113
114
|
'0 34 10' => 'Olympus M.Zuiko Digital ED 12-45mm F4.0 Pro', #IB
|
114
115
|
'0 35 00' => 'Olympus Zuiko Digital 14-54mm F2.8-3.5 II', #PH
|
@@ -137,6 +138,7 @@ my %olympusLensTypes = (
|
|
137
138
|
'1 15 00' => 'Sigma 10-20mm F4.0-5.6 EX DC HSM', #11
|
138
139
|
'1 16 00' => 'Sigma APO 70-200mm F2.8 II EX DG Macro HSM', #11
|
139
140
|
'1 17 00' => 'Sigma 50mm F1.4 EX DG HSM', #11
|
141
|
+
'1 18 60' => 'Test',
|
140
142
|
# Panasonic/Leica lenses
|
141
143
|
'2 01 00' => 'Leica D Vario Elmarit 14-50mm F2.8-3.5 Asph.', #11
|
142
144
|
'2 01 10' => 'Lumix G Vario 14-45mm F3.5-5.6 Asph. Mega OIS', #16
|
@@ -2129,6 +2131,11 @@ my %indexInfo = (
|
|
2129
2131
|
67 => 'Soft Background Shot', #11
|
2130
2132
|
142 => 'Hand-held Starlight', #PH (SH-21)
|
2131
2133
|
154 => 'HDR', #PH (XZ-2)
|
2134
|
+
197 => 'Panning', #forum11631 (EM5iii)
|
2135
|
+
203 => 'Light Trails', #forum11631 (EM5iii)
|
2136
|
+
204 => 'Backlight HDR', #forum11631 (EM5iii)
|
2137
|
+
205 => 'Silent', #forum11631 (EM5iii)
|
2138
|
+
206 => 'Multi Focus Shot', #forum11631 (EM5iii)
|
2132
2139
|
},
|
2133
2140
|
},
|
2134
2141
|
0x50a => { #PH/4/6
|
@@ -37,7 +37,7 @@ use vars qw($VERSION %leicaLensTypes);
|
|
37
37
|
use Image::ExifTool qw(:DataAccess :Utils);
|
38
38
|
use Image::ExifTool::Exif;
|
39
39
|
|
40
|
-
$VERSION = '2.
|
40
|
+
$VERSION = '2.14';
|
41
41
|
|
42
42
|
sub ProcessLeicaLEIC($$$);
|
43
43
|
sub WhiteBalanceConv($;$$);
|
@@ -2471,7 +2471,8 @@ my %shootingMode = (
|
|
2471
2471
|
# AdvancedSceneType=5 for automatic mode iA (ref 19)
|
2472
2472
|
if ($prt) {
|
2473
2473
|
return $prt if $v[1] == 1;
|
2474
|
-
return "$prt (intelligent auto)" if $v[1] == 5;
|
2474
|
+
return "$prt (intelligent auto)" if $v[1] == 5; #forum11523
|
2475
|
+
return "$prt (intelligent auto plus)" if $v[1] == 7; #forum11523
|
2475
2476
|
return "$prt ($v[1])";
|
2476
2477
|
}
|
2477
2478
|
return "Unknown ($val)";
|
@@ -2494,10 +2495,19 @@ my %shootingMode = (
|
|
2494
2495
|
'9 3' => 'Objects', #(FZ28)
|
2495
2496
|
'9 4' => 'Creative Macro', #(FZ28)
|
2496
2497
|
#'9 5' - ? (GF3)
|
2498
|
+
'18 1' => 'High Sensitivity', #forum11523 (TZ5)
|
2499
|
+
'20 1' => 'Fireworks', #forum11523 (TZ5)
|
2497
2500
|
'21 2' => 'Illuminations', #(FZ28)
|
2498
2501
|
'21 4' => 'Creative Night Scenery', #(FZ28)
|
2499
2502
|
#'21 5' - ? (LX3)
|
2503
|
+
'26 1' => 'High-speed Burst (shot 1)', #forum11523 (TZ5)
|
2504
|
+
'27 1' => 'High-speed Burst (shot 2)', #forum11523 (TZ5)
|
2505
|
+
'29 1' => 'Snow', #forum11523 (TZ5)
|
2506
|
+
'30 1' => 'Starry Sky', #forum11523 (TZ5)
|
2507
|
+
'31 1' => 'Beach', #forum11523 (TZ5)
|
2508
|
+
'36 1' => 'High-speed Burst (shot 3)', #forum11523 (TZ5)
|
2500
2509
|
#'37 5' - ? (various)
|
2510
|
+
'39 1' => 'Aerial Photo / Underwater / Multi-aspect', #forum11523 (TZ5)
|
2501
2511
|
'45 2' => 'Cinema', #(GF2)
|
2502
2512
|
'45 7' => 'Expressive', #(GF1,GF2)
|
2503
2513
|
'45 8' => 'Retro', #(GF1,GF2)
|
@@ -2542,16 +2552,6 @@ my %shootingMode = (
|
|
2542
2552
|
'DMC-TZ40 90 10' => 'Toy Effect',
|
2543
2553
|
'DMC-TZ40 90 11' => 'Dynamic Monochrome',
|
2544
2554
|
'DMC-TZ40 90 12' => 'Soft',
|
2545
|
-
# some TZ5 modes are different (forum11523)
|
2546
|
-
# (these may be the same for the TZ4, TZ11 and TZ15)
|
2547
|
-
'DMC-TZ5 18 1' => 'High Sensitivity',
|
2548
|
-
'DMC-TZ5 26 1' => 'High-speed Burst (shot 1)',
|
2549
|
-
'DMC-TZ5 27 1' => 'High-speed Burst (shot 2)',
|
2550
|
-
'DMC-TZ5 29 1' => 'Snow',
|
2551
|
-
'DMC-TZ5 30 1' => 'Starry Sky',
|
2552
|
-
'DMC-TZ5 31 1' => 'Beach',
|
2553
|
-
'DMC-TZ5 36 1' => 'High-speed Burst (shot 3)',
|
2554
|
-
'DMC-TZ5 39 1' => 'Aerial Photo / Underwater / Multi-aspect',
|
2555
2555
|
},
|
2556
2556
|
},
|
2557
2557
|
);
|