exiftool_vendored 12.42.0 → 12.50.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 +189 -6
- data/bin/MANIFEST +12 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +45 -44
- data/bin/config_files/acdsee.config +2 -1
- data/bin/config_files/frameCount.config +56 -0
- data/bin/config_files/tiff_version.config +1 -1
- data/bin/exiftool +113 -95
- data/bin/fmt_files/gpx.fmt +3 -0
- data/bin/fmt_files/gpx_wpt.fmt +3 -0
- data/bin/lib/Image/ExifTool/Apple.pm +16 -3
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +23 -12
- data/bin/lib/Image/ExifTool/Canon.pm +66 -37
- data/bin/lib/Image/ExifTool/CanonRaw.pm +8 -1
- data/bin/lib/Image/ExifTool/CanonVRD.pm +7 -8
- data/bin/lib/Image/ExifTool/DJI.pm +2 -1
- data/bin/lib/Image/ExifTool/DarwinCore.pm +13 -1
- data/bin/lib/Image/ExifTool/EXE.pm +9 -1
- data/bin/lib/Image/ExifTool/Exif.pm +17 -12
- data/bin/lib/Image/ExifTool/FLAC.pm +17 -3
- data/bin/lib/Image/ExifTool/FLIR.pm +4 -3
- data/bin/lib/Image/ExifTool/FlashPix.pm +26 -3
- data/bin/lib/Image/ExifTool/FujiFilm.pm +51 -4
- data/bin/lib/Image/ExifTool/GPS.pm +21 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +25 -5
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +3 -2
- data/bin/lib/Image/ExifTool/ICO.pm +143 -0
- data/bin/lib/Image/ExifTool/ID3.pm +6 -6
- data/bin/lib/Image/ExifTool/IPTC.pm +5 -1
- data/bin/lib/Image/ExifTool/LNK.pm +5 -2
- data/bin/lib/Image/ExifTool/M2TS.pm +98 -8
- data/bin/lib/Image/ExifTool/MIE.pm +9 -3
- data/bin/lib/Image/ExifTool/MISB.pm +494 -0
- data/bin/lib/Image/ExifTool/MakerNotes.pm +3 -1
- data/bin/lib/Image/ExifTool/Matroska.pm +24 -16
- data/bin/lib/Image/ExifTool/Motorola.pm +8 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +288 -122
- data/bin/lib/Image/ExifTool/NikonSettings.pm +5 -3
- data/bin/lib/Image/ExifTool/Olympus.pm +3 -2
- data/bin/lib/Image/ExifTool/Panasonic.pm +21 -4
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +25 -5
- data/bin/lib/Image/ExifTool/Parrot.pm +96 -2
- data/bin/lib/Image/ExifTool/Pentax.pm +7 -2
- data/bin/lib/Image/ExifTool/Photoshop.pm +29 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +163 -13
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +119 -13
- data/bin/lib/Image/ExifTool/README +13 -3
- data/bin/lib/Image/ExifTool/RIFF.pm +106 -9
- data/bin/lib/Image/ExifTool/Samsung.pm +2 -2
- data/bin/lib/Image/ExifTool/Sigma.pm +27 -1
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +37 -13
- data/bin/lib/Image/ExifTool/Sony.pm +71 -43
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +3 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4737 -4517
- data/bin/lib/Image/ExifTool/TagNames.pod +1837 -1417
- data/bin/lib/Image/ExifTool/Text.pm +3 -4
- data/bin/lib/Image/ExifTool/Torrent.pm +2 -3
- data/bin/lib/Image/ExifTool/Validate.pm +3 -3
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +7 -0
- data/bin/lib/Image/ExifTool/WriteExif.pl +100 -23
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +2 -6
- data/bin/lib/Image/ExifTool/WritePhotoshop.pl +5 -5
- data/bin/lib/Image/ExifTool/WriteRIFF.pl +359 -0
- data/bin/lib/Image/ExifTool/Writer.pl +13 -5
- data/bin/lib/Image/ExifTool/XMP.pm +78 -59
- data/bin/lib/Image/ExifTool/XMP2.pl +19 -4
- data/bin/lib/Image/ExifTool.pm +111 -24
- data/bin/lib/Image/ExifTool.pod +83 -69
- data/bin/perl-Image-ExifTool.spec +43 -43
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +9 -4
@@ -2036,11 +2036,13 @@ sub ProcessNikonSettings($$$)
|
|
2036
2036
|
for ($i=0; $i<$num; ++$i) {
|
2037
2037
|
my $entry = $start + 0x18 + $i * 8;
|
2038
2038
|
my $tag = Get16u($dataPt, $entry);
|
2039
|
-
|
2039
|
+
# this is odd, but either the format is 16-bit and always big-endian,
|
2040
|
+
# or it is 8-bit and we have an unknown byte in the entry...
|
2041
|
+
my $fmt = Get8u($dataPt, $entry + 3);
|
2040
2042
|
my $val = Get32u($dataPt, $entry + 4);
|
2041
2043
|
# abort if the tag has a format that we haven't yet seen
|
2042
|
-
# (assuming this is a size/format code. So far we have only seen
|
2043
|
-
$fmt ==
|
2044
|
+
# (assuming this is a size/format code. So far we have only seen a code of 4)
|
2045
|
+
$fmt == 4 or $et->Warn(sprintf('Unknown format $fmt for NikonSettings tag 0x%.4x',$tag)), last;
|
2044
2046
|
$et->HandleTag($tagTablePtr, $tag, $val,
|
2045
2047
|
DataPt => $dataPt,
|
2046
2048
|
DataPos => $$dirInfo{DataPos},
|
@@ -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.79';
|
44
44
|
|
45
45
|
sub PrintLensInfo($$$);
|
46
46
|
|
@@ -433,6 +433,7 @@ my %olympusCameraTypes = (
|
|
433
433
|
S0092 => 'E-M1MarkIII', #IB
|
434
434
|
S0093 => 'E-P7', #IB
|
435
435
|
S0095 => 'OM-1', #IB
|
436
|
+
S0101 => 'OM-5', #IB
|
436
437
|
SR45 => 'D220',
|
437
438
|
SR55 => 'D320L',
|
438
439
|
SR83 => 'D340L',
|
@@ -1919,7 +1920,7 @@ my %indexInfo = (
|
|
1919
1920
|
PrintConv => [{
|
1920
1921
|
0 => 'Off',
|
1921
1922
|
1 => 'Motorsports',
|
1922
|
-
2 => '
|
1923
|
+
2 => 'Airplanes',
|
1923
1924
|
3 => 'Trains',
|
1924
1925
|
4 => 'Birds',
|
1925
1926
|
5 => 'Dogs & Cats',
|
@@ -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.18';
|
41
41
|
|
42
42
|
sub ProcessLeicaLEIC($$$);
|
43
43
|
sub WhiteBalanceConv($;$$);
|
@@ -543,7 +543,11 @@ my %shootingMode = (
|
|
543
543
|
0x2c => [
|
544
544
|
{
|
545
545
|
Name => 'ContrastMode',
|
546
|
-
Condition =>
|
546
|
+
Condition => q{
|
547
|
+
$$self{Model} !~ /^DMC-(FX10|G1|L1|L10|LC80|GF\d+|G2|TZ10|ZS7)$/ and
|
548
|
+
# tested for DC-GH6, but rule out other DC- models just in case - PH
|
549
|
+
$$self{Model} !~ /^DC-/
|
550
|
+
},
|
547
551
|
Flags => 'PrintHex',
|
548
552
|
Writable => 'int16u',
|
549
553
|
Notes => q{
|
@@ -1129,7 +1133,10 @@ my %shootingMode = (
|
|
1129
1133
|
8 => 'Cinelike D', #forum11194
|
1130
1134
|
9 => 'Cinelike V', #forum11194
|
1131
1135
|
11 => 'L. Monochrome', #forum11194
|
1136
|
+
12 => 'Like709', #forum14033
|
1132
1137
|
15 => 'L. Monochrome D', #forum11194
|
1138
|
+
17 => 'V-Log', #forum14033
|
1139
|
+
18 => 'Cinelike D2', #forum14033
|
1133
1140
|
},
|
1134
1141
|
},
|
1135
1142
|
0x8a => { #18
|
@@ -1255,8 +1262,9 @@ my %shootingMode = (
|
|
1255
1262
|
Writable => 'rational64u',
|
1256
1263
|
Format => 'int32u',
|
1257
1264
|
PrintConv => {
|
1258
|
-
'0 0' => 'Expressive',
|
1259
|
-
|
1265
|
+
# '0 0' => 'Expressive', #forum11194
|
1266
|
+
'0 0' => 'Off', #forum14033 (GH6)
|
1267
|
+
'0 1' => 'Expressive', #forum14033 (GH6) (have also seen this for XS1)
|
1260
1268
|
'0 2' => 'Retro',
|
1261
1269
|
'0 4' => 'High Key',
|
1262
1270
|
'0 8' => 'Sepia',
|
@@ -1435,6 +1443,15 @@ my %shootingMode = (
|
|
1435
1443
|
ValueConv => '$_=sprintf("%.4x",$val); s/(..)(..)/$2 $1/; $_',
|
1436
1444
|
ValueConvInv => '$val =~ s/(..) (..)/$2$1/; hex($val)',
|
1437
1445
|
},
|
1446
|
+
0xe8 => { #PH (DC-GH6)
|
1447
|
+
Name => 'MinimumISO',
|
1448
|
+
Writable => 'int32u',
|
1449
|
+
},
|
1450
|
+
0xee => { #PH (DC-GH6)
|
1451
|
+
Name => 'DynamicRangeBoost',
|
1452
|
+
Writable => 'int16u',
|
1453
|
+
PrintConv => { 0 => 'Off', 1 => 'On' },
|
1454
|
+
},
|
1438
1455
|
0x0e00 => {
|
1439
1456
|
Name => 'PrintIM',
|
1440
1457
|
Description => 'Print Image Matching',
|
@@ -21,7 +21,7 @@ use vars qw($VERSION);
|
|
21
21
|
use Image::ExifTool qw(:DataAccess :Utils);
|
22
22
|
use Image::ExifTool::Exif;
|
23
23
|
|
24
|
-
$VERSION = '1.
|
24
|
+
$VERSION = '1.27';
|
25
25
|
|
26
26
|
sub ProcessJpgFromRaw($$$);
|
27
27
|
sub WriteJpgFromRaw($$$);
|
@@ -218,6 +218,7 @@ my %panasonicWhiteBalance = ( #forum9396
|
|
218
218
|
0x30 => { Name => 'CropLeft', Writable => 'int16u' },
|
219
219
|
0x31 => { Name => 'CropBottom', Writable => 'int16u' },
|
220
220
|
0x32 => { Name => 'CropRight', Writable => 'int16u' },
|
221
|
+
# 0x44 - may contain another pointer to the raw data starting at byte 2 in this data (DC-GH6)
|
221
222
|
0x10f => {
|
222
223
|
Name => 'Make',
|
223
224
|
Groups => { 2 => 'Camera' },
|
@@ -737,6 +738,8 @@ sub WriteDistortionInfo($$$)
|
|
737
738
|
# 2 - value count
|
738
739
|
# 3 - reference to list of original offset values
|
739
740
|
# 4 - IFD format number
|
741
|
+
# 5 - (pointer to StripOffsets value added by this PatchRawDataOffset routine)
|
742
|
+
# 6 - flag set if this is a fixed offset (Panasonic GH6 fixed-offset hack)
|
740
743
|
sub PatchRawDataOffset($$$)
|
741
744
|
{
|
742
745
|
my ($offsetInfo, $raf, $ifd) = @_;
|
@@ -745,15 +748,32 @@ sub PatchRawDataOffset($$$)
|
|
745
748
|
my $rawDataOffset = $$offsetInfo{0x118};
|
746
749
|
my $err;
|
747
750
|
$err = 1 unless $ifd == 0;
|
748
|
-
|
749
|
-
|
751
|
+
if ($stripOffsets or $stripByteCounts) {
|
752
|
+
$err = 1 unless $stripOffsets and $stripByteCounts and $$stripOffsets[2] == 1;
|
753
|
+
} else {
|
754
|
+
# the DC-GH6 and DC-GH5M2 write RawDataOffset with no Strip tags, so we need
|
755
|
+
# to create fake StripByteCounts information for copying the data
|
756
|
+
if ($$offsetInfo{0x118}) { # (just to be safe)
|
757
|
+
$stripByteCounts = $$offsetInfo{0x117} = [ $PanasonicRaw::Main{0x117}, 0, 1, [ 0 ], 4 ];
|
758
|
+
# set flag so the offset will be fixed (GH6 hack, see https://exiftool.org/forum/index.php?topic=13861.0)
|
759
|
+
# (of course, fixing up the offset is now unnecessary, but continue to do this even
|
760
|
+
# though the fixup adjustment will be 0 because this allows us to delete the following
|
761
|
+
# line to remove the fix-offset restriction if Panasonic ever sees the light, but note
|
762
|
+
# that in this case we should investigate the purpose of the seemily-duplicate raw
|
763
|
+
# data offset contained within PanasonicRaw_0x0044)
|
764
|
+
$$offsetInfo{0x118}[6] = 1;
|
765
|
+
}
|
766
|
+
}
|
767
|
+
if ($rawDataOffset and not $err) {
|
750
768
|
$err = 1 unless $$rawDataOffset[2] == 1;
|
751
|
-
$
|
769
|
+
if ($stripOffsets) {
|
770
|
+
$err = 1 unless $$stripOffsets[3][0] == 0xffffffff or $$stripByteCounts[3][0] == 0;
|
771
|
+
}
|
752
772
|
}
|
753
773
|
$err and return 'Unsupported Panasonic/Leica RAW variant';
|
754
774
|
if ($rawDataOffset) {
|
755
775
|
# update StripOffsets along with this tag if it contains a reasonable value
|
756
|
-
|
776
|
+
if ($stripOffsets and $$stripOffsets[3][0] != 0xffffffff) {
|
757
777
|
# save pointer to StripOffsets value for updating later
|
758
778
|
push @$rawDataOffset, $$stripOffsets[1];
|
759
779
|
}
|
@@ -6,14 +6,16 @@
|
|
6
6
|
# Revisions: 2019-10-23 - P. Harvey Created
|
7
7
|
#
|
8
8
|
# References: 1) https://developer.parrot.com/docs/pdraw/metadata.html
|
9
|
+
# --> changed to https://developer.parrot.com/docs/pdraw/video-metadata.html
|
9
10
|
#------------------------------------------------------------------------------
|
10
11
|
|
11
12
|
package Image::ExifTool::Parrot;
|
12
13
|
|
13
14
|
use strict;
|
14
15
|
use vars qw($VERSION);
|
16
|
+
use Image::ExifTool qw(:DataAccess :Utils);
|
15
17
|
|
16
|
-
$VERSION = '1.
|
18
|
+
$VERSION = '1.02';
|
17
19
|
|
18
20
|
sub Process_mett($$$);
|
19
21
|
|
@@ -21,7 +23,10 @@ sub Process_mett($$$);
|
|
21
23
|
%Image::ExifTool::Parrot::mett = (
|
22
24
|
PROCESS_PROC => \&Process_mett,
|
23
25
|
# put the 'P' records first in the documentation
|
24
|
-
VARS => {
|
26
|
+
VARS => {
|
27
|
+
SORT_PROC => sub { my ($a,$b)=@_; $a=~s/P/A/; $b=~s/P/A/; $a cmp $b },
|
28
|
+
LONG_TAGS => 1
|
29
|
+
},
|
25
30
|
NOTES => q{
|
26
31
|
Streaming metadata found in Parrot drone videos. See
|
27
32
|
L<https://developer.parrot.com/docs/pdraw/metadata.html> for the
|
@@ -51,6 +56,23 @@ sub Process_mett($$$);
|
|
51
56
|
Name => 'ParrotAutomation',
|
52
57
|
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::Automation' },
|
53
58
|
},
|
59
|
+
# timed metadata written by ARCore (see forum13653)
|
60
|
+
'application/arcore-accel' => {
|
61
|
+
Name => 'ARCoreAccel',
|
62
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreAccel', ByteOrder => 'II' },
|
63
|
+
},
|
64
|
+
'application/arcore-gyro' => {
|
65
|
+
Name => 'ARCoreGyro',
|
66
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreGyro', ByteOrder => 'II' },
|
67
|
+
},
|
68
|
+
'application/arcore-video-0' => {
|
69
|
+
Name => 'ARCoreVideo',
|
70
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreVideo', ByteOrder => 'II' },
|
71
|
+
},
|
72
|
+
'application/arcore-custom-event' => {
|
73
|
+
Name => 'ARCoreCustom',
|
74
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Parrot::ARCoreCustom', ByteOrder => 'II' },
|
75
|
+
},
|
54
76
|
);
|
55
77
|
|
56
78
|
# tags found in the Parrot 'mett' V1 timed metadata (ref 1) [untested]
|
@@ -629,6 +651,69 @@ sub Process_mett($$$);
|
|
629
651
|
},
|
630
652
|
);
|
631
653
|
|
654
|
+
# ARCore Accel data (ref PH)
|
655
|
+
%Image::ExifTool::Parrot::ARCoreAccel = (
|
656
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
657
|
+
GROUPS => { 2 => 'Location' },
|
658
|
+
NOTES => 'ARCore accelerometer data.',
|
659
|
+
FIRST_ENTRY => 0,
|
660
|
+
# 00-04: always 10 34 16 1 29
|
661
|
+
4 => {
|
662
|
+
Name => 'AccelerometerUnknown',
|
663
|
+
Format => 'undef[16]',
|
664
|
+
Unknown => 1,
|
665
|
+
ValueConv => 'join " ", unpack("Cx4Cx4Cx4C", $val)',
|
666
|
+
},
|
667
|
+
5 => { # (NC)
|
668
|
+
Name => 'Accelerometer',
|
669
|
+
Format => 'undef[14]',
|
670
|
+
RawConv => 'GetFloat(\$val,0) . " " . GetFloat(\$val,5) . " " . GetFloat(\$val,10)',
|
671
|
+
},
|
672
|
+
# 05-08: float Accelerometer X
|
673
|
+
# 09: 37
|
674
|
+
# 10-13: float Accelerometer Y
|
675
|
+
# 14: 45
|
676
|
+
# 15-18: float Accelerometer Z
|
677
|
+
# 19: 48
|
678
|
+
# 20-24: 128-255
|
679
|
+
# 25: 246 then 247
|
680
|
+
# 26: 188
|
681
|
+
# 27: 2
|
682
|
+
# 28: 56
|
683
|
+
# 29-32: 128-255
|
684
|
+
# 33: increments slowly (about once every 56 samples or so)
|
685
|
+
);
|
686
|
+
|
687
|
+
# ARCore Gyro data (ref PH)
|
688
|
+
%Image::ExifTool::Parrot::ARCoreGyro = (
|
689
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
690
|
+
GROUPS => { 2 => 'Location' },
|
691
|
+
NOTES => 'ARCore accelerometer data.',
|
692
|
+
FIRST_ENTRY => 0,
|
693
|
+
# 00-04: always 10 34 16 3 29
|
694
|
+
4 => {
|
695
|
+
Name => 'GyroscopeUnknown',
|
696
|
+
Format => 'undef[16]',
|
697
|
+
Unknown => 1, # always "29 37 45 48" in my sample, just like AccelerometerUnknown
|
698
|
+
ValueConv => 'join " ", unpack("Cx4Cx4Cx4C", $val)',
|
699
|
+
},
|
700
|
+
5 => { # (NC)
|
701
|
+
Name => 'Gyroscope',
|
702
|
+
Format => 'undef[14]',
|
703
|
+
RawConv => 'GetFloat(\$val,0) . " " . GetFloat(\$val,5) . " " . GetFloat(\$val,10)',
|
704
|
+
},
|
705
|
+
);
|
706
|
+
|
707
|
+
%Image::ExifTool::Parrot::ARCoreVideo = (
|
708
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
709
|
+
FIRST_ENTRY => 0,
|
710
|
+
);
|
711
|
+
|
712
|
+
%Image::ExifTool::Parrot::ARCoreCustom = (
|
713
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
714
|
+
FIRST_ENTRY => 0,
|
715
|
+
);
|
716
|
+
|
632
717
|
%Image::ExifTool::Parrot::Composite = (
|
633
718
|
GPSDateTime => {
|
634
719
|
Description => 'GPS Date/Time',
|
@@ -676,9 +761,18 @@ sub Process_mett($$$)
|
|
676
761
|
my $dataPos = $$dirInfo{DataPos};
|
677
762
|
my $dirEnd = length $$dataPt;
|
678
763
|
my $pos = $$dirInfo{DirStart} || 0;
|
764
|
+
my $metaType = $$et{MetaType} || '';
|
679
765
|
|
680
766
|
$et->VerboseDir('Parrot mett', undef, $dirEnd);
|
681
767
|
|
768
|
+
if ($$tagTbl{$metaType}) {
|
769
|
+
$et->HandleTag($tagTbl, $metaType, undef,
|
770
|
+
DataPt => $dataPt,
|
771
|
+
DataPos => $dataPos,
|
772
|
+
Base => $$dirInfo{Base},
|
773
|
+
);
|
774
|
+
return 1;
|
775
|
+
}
|
682
776
|
while ($pos + 4 < $dirEnd) {
|
683
777
|
my ($id, $nwords) = unpack("x${pos}a2n", $$dataPt);
|
684
778
|
my $size;
|
@@ -58,7 +58,7 @@ use Image::ExifTool::Exif;
|
|
58
58
|
use Image::ExifTool::GPS;
|
59
59
|
use Image::ExifTool::HP;
|
60
60
|
|
61
|
-
$VERSION = '3.
|
61
|
+
$VERSION = '3.41';
|
62
62
|
|
63
63
|
sub CryptShutterCount($$);
|
64
64
|
sub PrintFilter($$$);
|
@@ -365,10 +365,15 @@ sub DecodeAFPoints($$$$;$);
|
|
365
365
|
'8 255.4' => 'Sigma 4.5mm F2.8 EX DC HSM Circular Fisheye', #PH
|
366
366
|
'8 255.5' => 'Sigma 50-200mm F4-5.6 DC OS', #26
|
367
367
|
'8 255.6' => 'Sigma 24-70mm F2.8 EX DG HSM', #29
|
368
|
+
|
369
|
+
'9 0' => '645 Manual Lens', #PH (NC)
|
370
|
+
'9 3' => 'HD PENTAX-FA 43mm F1.9 Limited', #IB
|
371
|
+
'9 24' => 'HD PENTAX-FA 77mm F1.8 Limited', #IB
|
372
|
+
'9 39' => 'HD PENTAX-FA 31mm F1.8 AL Limited', #IB
|
373
|
+
'9 247' => 'HD PENTAX-DA FISH-EYE 10-17mm F3.5-4.5 ED [IF]', #IB
|
368
374
|
#
|
369
375
|
# 645 lenses
|
370
376
|
#
|
371
|
-
'9 0' => '645 Manual Lens', #PH (NC)
|
372
377
|
'10 0' => '645 A Series Lens', #PH
|
373
378
|
'11 1' => 'smc PENTAX-FA 645 75mm F2.8', #PH
|
374
379
|
'11 2' => 'smc PENTAX-FA 645 45mm F2.8', #PH
|
@@ -25,15 +25,28 @@
|
|
25
25
|
package Image::ExifTool::Photoshop;
|
26
26
|
|
27
27
|
use strict;
|
28
|
-
use vars qw($VERSION $AUTOLOAD $iptcDigestInfo);
|
28
|
+
use vars qw($VERSION $AUTOLOAD $iptcDigestInfo %printFlags);
|
29
29
|
use Image::ExifTool qw(:DataAccess :Utils);
|
30
30
|
|
31
|
-
$VERSION = '1.
|
31
|
+
$VERSION = '1.67';
|
32
32
|
|
33
33
|
sub ProcessPhotoshop($$$);
|
34
34
|
sub WritePhotoshop($$$);
|
35
35
|
sub ProcessLayers($$$);
|
36
36
|
|
37
|
+
# PrintFlags bit definitions (ref forum13785)
|
38
|
+
%printFlags = (
|
39
|
+
0 => 'Labels',
|
40
|
+
1 => 'Corner crop marks',
|
41
|
+
2 => 'Color bars', # (deprecated)
|
42
|
+
3 => 'Registration marks',
|
43
|
+
4 => 'Negative',
|
44
|
+
5 => 'Emulsion down',
|
45
|
+
6 => 'Interpolate', # (deprecated)
|
46
|
+
7 => 'Description',
|
47
|
+
8 => 'Print flags',
|
48
|
+
);
|
49
|
+
|
37
50
|
# map of where information is stored in PSD image
|
38
51
|
my %psdMap = (
|
39
52
|
IPTC => 'Photoshop',
|
@@ -106,7 +119,17 @@ my %unicodeString = (
|
|
106
119
|
0x03f0 => { Unknown => 1, Name => 'PStringCaption' },
|
107
120
|
0x03f1 => { Unknown => 1, Name => 'BorderInformation' },
|
108
121
|
0x03f2 => { Unknown => 1, Name => 'BackgroundColor' },
|
109
|
-
0x03f3 => {
|
122
|
+
0x03f3 => {
|
123
|
+
Unknown => 1,
|
124
|
+
Name => 'PrintFlags',
|
125
|
+
Format => 'int8u',
|
126
|
+
PrintConv => q{
|
127
|
+
my $byte = 0;
|
128
|
+
my @bits = $val =~ /\d+/g;
|
129
|
+
$byte = ($byte << 1) | ($_ ? 1 : 0) foreach reverse @bits;
|
130
|
+
return DecodeBits($byte, \%Image::ExifTool::Photoshop::printFlags);
|
131
|
+
},
|
132
|
+
},
|
110
133
|
0x03f4 => { Unknown => 1, Name => 'BW_HalftoningInfo' },
|
111
134
|
0x03f5 => { Unknown => 1, Name => 'ColorHalftoningInfo' },
|
112
135
|
0x03f6 => { Unknown => 1, Name => 'DuotoneHalftoningInfo' },
|
@@ -332,6 +355,7 @@ my %unicodeString = (
|
|
332
355
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
333
356
|
WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
|
334
357
|
CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
358
|
+
DATAMEMBER => [ 1 ],
|
335
359
|
FORMAT => 'int16s',
|
336
360
|
GROUPS => { 2 => 'Image' },
|
337
361
|
0 => {
|
@@ -342,6 +366,7 @@ my %unicodeString = (
|
|
342
366
|
},
|
343
367
|
1 => {
|
344
368
|
Name => 'PhotoshopFormat',
|
369
|
+
RawConv => '$$self{PhotoshopFormat} = $val',
|
345
370
|
PrintConv => {
|
346
371
|
0x0000 => 'Standard',
|
347
372
|
0x0001 => 'Optimized',
|
@@ -350,6 +375,7 @@ my %unicodeString = (
|
|
350
375
|
},
|
351
376
|
2 => {
|
352
377
|
Name => 'ProgressiveScans',
|
378
|
+
Condition => '$$self{PhotoshopFormat} == 0x0101',
|
353
379
|
PrintConv => {
|
354
380
|
1 => '3 Scans',
|
355
381
|
2 => '4 Scans',
|