exiftool-vendored.exe 12.26.0 → 12.33.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.
- package/bin/exiftool_files/Changes +119 -4
- package/bin/exiftool_files/README +44 -43
- package/bin/exiftool_files/arg_files/xmp2exif.args +2 -1
- package/bin/exiftool_files/config_files/convert_regions.config +25 -14
- package/bin/exiftool_files/config_files/example.config +1 -1
- package/bin/exiftool_files/exiftool.pl +79 -66
- package/bin/exiftool_files/fmt_files/gpx.fmt +1 -1
- package/bin/exiftool_files/fmt_files/gpx_wpt.fmt +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +11 -3
- package/bin/exiftool_files/lib/Image/ExifTool/CBOR.pm +331 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +26 -7
- package/bin/exiftool_files/lib/Image/ExifTool/DPX.pm +13 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +98 -4
- package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +35 -10
- package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +1 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +13 -2
- package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +16 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +15 -3
- package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +7 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +60 -26
- package/bin/exiftool_files/lib/Image/ExifTool/LIF.pm +153 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/nl.pm +60 -59
- package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +103 -7
- package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +14 -3
- package/bin/exiftool_files/lib/Image/ExifTool/NikonSettings.pm +10 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +9 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Other.pm +93 -0
- package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +9 -12
- package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +7 -6
- package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +14 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +27 -5
- package/bin/exiftool_files/lib/Image/ExifTool/Photoshop.pm +6 -0
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +105 -24
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +203 -121
- package/bin/exiftool_files/lib/Image/ExifTool/README +5 -2
- package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +6 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +47 -10
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +85 -34
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +65 -5
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +153 -32
- package/bin/exiftool_files/lib/Image/ExifTool/Torrent.pm +18 -11
- package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +1 -0
- package/bin/exiftool_files/lib/Image/ExifTool/WritePNG.pl +2 -0
- package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +8 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +3 -0
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +21 -4
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +3 -1
- package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +3 -1
- package/bin/exiftool_files/lib/Image/ExifTool/ZISRAW.pm +121 -2
- package/bin/exiftool_files/lib/Image/ExifTool.pm +8867 -8835
- package/bin/exiftool_files/lib/Image/ExifTool.pod +58 -56
- package/package.json +3 -3
|
@@ -16,7 +16,7 @@ use strict;
|
|
|
16
16
|
use vars qw($VERSION);
|
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.31';
|
|
20
20
|
|
|
21
21
|
sub ProcessJpeg2000Box($$$);
|
|
22
22
|
sub ProcessJUMD($$$);
|
|
@@ -116,9 +116,6 @@ my %j2cMarker = (
|
|
|
116
116
|
0x76 => 'NLT', # non-linearity point transformation
|
|
117
117
|
);
|
|
118
118
|
|
|
119
|
-
my %jumbfTypes = (
|
|
120
|
-
);
|
|
121
|
-
|
|
122
119
|
# JPEG 2000 "box" (ie. atom) names
|
|
123
120
|
# Note: only tags with a defined "Format" are extracted
|
|
124
121
|
%Image::ExifTool::Jpeg2000::Main = (
|
|
@@ -127,10 +124,13 @@ my %jumbfTypes = (
|
|
|
127
124
|
WRITE_PROC => \&ProcessJpeg2000Box,
|
|
128
125
|
PREFERRED => 1, # always add these tags when writing
|
|
129
126
|
NOTES => q{
|
|
130
|
-
The tags below are
|
|
131
|
-
|
|
132
|
-
tags in Jpeg2000 images.
|
|
127
|
+
The tags below are found in JPEG 2000 images and the JUMBF metadata in JPEG
|
|
128
|
+
images, but not all of these are extracted. Note that ExifTool currently
|
|
129
|
+
writes only EXIF, IPTC and XMP tags in Jpeg2000 images.
|
|
133
130
|
},
|
|
131
|
+
#
|
|
132
|
+
# NOTE: ONLY TAGS WITH "Format" DEFINED ARE EXTRACTED!
|
|
133
|
+
#
|
|
134
134
|
'jP ' => 'JP2Signature', # (ref 1)
|
|
135
135
|
"jP\x1a\x1a" => 'JP2Signature', # (ref 2)
|
|
136
136
|
prfl => 'Profile',
|
|
@@ -340,10 +340,20 @@ my %jumbfTypes = (
|
|
|
340
340
|
},
|
|
341
341
|
{
|
|
342
342
|
Name => 'UUID-Signature', # (seen in JUMB data of JPEG images)
|
|
343
|
+
# (may be able to remove this when JUMBF specification is finalized)
|
|
343
344
|
Condition => '$$valPt=~/^casg\x00\x11\x00\x10\x80\x00\x00\xaa\x00\x38\x9b\x71/',
|
|
344
345
|
Format => 'undef',
|
|
345
346
|
ValueConv => 'substr($val,16)',
|
|
346
347
|
},
|
|
348
|
+
{
|
|
349
|
+
Name => 'UUID-C2PAClaimSignature', # (seen in incorrectly-formatted JUMB data of JPEG images)
|
|
350
|
+
# (may be able to remove this when JUMBF specification is finalized)
|
|
351
|
+
Condition => '$$valPt=~/^c2cs\x00\x11\x00\x10\x80\x00\x00\xaa\x00\x38\x9b\x71/',
|
|
352
|
+
SubDirectory => {
|
|
353
|
+
TagTable => 'Image::ExifTool::CBOR::Main',
|
|
354
|
+
Start => '$valuePtr + 16',
|
|
355
|
+
},
|
|
356
|
+
},
|
|
347
357
|
{
|
|
348
358
|
Name => 'UUID-Unknown',
|
|
349
359
|
},
|
|
@@ -386,6 +396,27 @@ my %jumbfTypes = (
|
|
|
386
396
|
},
|
|
387
397
|
SubDirectory => { TagTable => 'Image::ExifTool::JSON::Main' },
|
|
388
398
|
},
|
|
399
|
+
cbor => {
|
|
400
|
+
Name => 'CBORData',
|
|
401
|
+
Flags => [ 'Binary', 'Protected' ],
|
|
402
|
+
SubDirectory => { TagTable => 'Image::ExifTool::CBOR::Main' },
|
|
403
|
+
},
|
|
404
|
+
bfdb => { # used in JUMBF (see # (used when tag is renamed according to JUMDLabel)
|
|
405
|
+
Name => 'BinaryDataType',
|
|
406
|
+
Notes => 'JUMBF, MIME type and optional file name',
|
|
407
|
+
Format => 'undef',
|
|
408
|
+
# (ignore "toggles" byte and just extract MIME type and file name)
|
|
409
|
+
ValueConv => '$_=substr($val,1); s/\0+$//; s/\0/, /; $_',
|
|
410
|
+
JUMBF_Suffix => 'Type', # (used when tag is renamed according to JUMDLabel)
|
|
411
|
+
},
|
|
412
|
+
bidb => { # used in JUMBF
|
|
413
|
+
Name => 'BinaryData',
|
|
414
|
+
Notes => 'JUMBF',
|
|
415
|
+
Groups => { 2 => 'Preview' },
|
|
416
|
+
Format => 'undef',
|
|
417
|
+
Binary => 1,
|
|
418
|
+
JUMBF_Suffix => 'Data', # (used when tag is renamed according to JUMDLabel)
|
|
419
|
+
},
|
|
389
420
|
#
|
|
390
421
|
# stuff seen in JPEG XL images:
|
|
391
422
|
#
|
|
@@ -607,23 +638,24 @@ my %jumbfTypes = (
|
|
|
607
638
|
PROCESS_PROC => \&ProcessJUMD,
|
|
608
639
|
GROUPS => { 0 => 'JUMBF', 1 => 'JUMBF', 2 => 'Image' },
|
|
609
640
|
NOTES => 'Information extracted from the JUMBF description box.',
|
|
610
|
-
'
|
|
641
|
+
'type' => {
|
|
611
642
|
Name => 'JUMDType',
|
|
612
643
|
ValueConv => 'unpack "H*", $val',
|
|
613
644
|
PrintConv => q{
|
|
614
645
|
my @a = $val =~ /^(\w{8})(\w{4})(\w{4})(\w{16})$/;
|
|
615
646
|
return $val unless @a;
|
|
616
647
|
my $ascii = pack 'H*', $a[0];
|
|
617
|
-
$a[0] = $ascii if $ascii =~ /^[a-zA-Z0-9]{4}$/;
|
|
648
|
+
$a[0] = "($ascii)" if $ascii =~ /^[a-zA-Z0-9]{4}$/;
|
|
618
649
|
return join '-', @a;
|
|
619
650
|
},
|
|
620
651
|
# seen:
|
|
621
652
|
# cacb/cast/caas/cacl/casg/json-00110010800000aa00389b71
|
|
622
653
|
# 6579d6fbdba2446bb2ac1b82feeb89d1 - JPEG image
|
|
623
654
|
},
|
|
624
|
-
'
|
|
625
|
-
'
|
|
626
|
-
Name => '
|
|
655
|
+
'label' => { Name => 'JUMDLabel' },
|
|
656
|
+
'toggles' => {
|
|
657
|
+
Name => 'JUMDToggles',
|
|
658
|
+
Unknown => 1,
|
|
627
659
|
PrintConv => { BITMASK => {
|
|
628
660
|
0 => 'Requestable',
|
|
629
661
|
1 => 'Label',
|
|
@@ -631,8 +663,8 @@ my %jumbfTypes = (
|
|
|
631
663
|
3 => 'Signature',
|
|
632
664
|
}},
|
|
633
665
|
},
|
|
634
|
-
'
|
|
635
|
-
'
|
|
666
|
+
'id' => { Name => 'JUMDID', Description => 'JUMD ID' },
|
|
667
|
+
'sig' => { Name => 'JUMDSignature', PrintConv => 'unpack "H*", $val' },
|
|
636
668
|
);
|
|
637
669
|
|
|
638
670
|
#------------------------------------------------------------------------------
|
|
@@ -675,20 +707,21 @@ sub ProcessJUMD($$$)
|
|
|
675
707
|
delete $$et{JUMBFLabel};
|
|
676
708
|
$$dirInfo{DirLen} < 17 and $et->Warn('Truncated JUMD directory'), return 0;
|
|
677
709
|
my $type = substr($$dataPt, $pos, 4);
|
|
678
|
-
$et->HandleTag($tagTablePtr, '
|
|
710
|
+
$et->HandleTag($tagTablePtr, 'type', substr($$dataPt, $pos, 16));
|
|
679
711
|
$pos += 16;
|
|
680
712
|
my $flags = Get8u($dataPt, $pos++);
|
|
681
|
-
$et->HandleTag($tagTablePtr, '
|
|
713
|
+
$et->HandleTag($tagTablePtr, 'toggles', $flags);
|
|
682
714
|
if ($flags & 0x02) { # label exists?
|
|
683
715
|
pos($$dataPt) = $pos;
|
|
684
716
|
$$dataPt =~ /\0/g or $et->Warn('Missing JUMD label terminator'), return 0;
|
|
685
717
|
my $len = pos($$dataPt) - $pos;
|
|
686
718
|
my $name = substr($$dataPt, $pos, $len);
|
|
687
|
-
$et->HandleTag($tagTablePtr, '
|
|
719
|
+
$et->HandleTag($tagTablePtr, 'label', $name);
|
|
688
720
|
$pos += $len;
|
|
689
721
|
if ($len) {
|
|
690
722
|
$name =~ s/[^-_a-zA-Z0-9]([a-z])/\U$1/g; # capitalize characters after illegal characters
|
|
691
723
|
$name =~ tr/-_a-zA-Z0-9//dc; # remove other illegal characters
|
|
724
|
+
$name =~ s/__/_/; # collapse double underlines
|
|
692
725
|
$name = ucfirst $name; # capitalize first letter
|
|
693
726
|
$name = "Tag$name" if length($name) < 2; # must at least 2 characters long
|
|
694
727
|
$$et{JUMBFLabel} = $name;
|
|
@@ -696,12 +729,12 @@ sub ProcessJUMD($$$)
|
|
|
696
729
|
}
|
|
697
730
|
if ($flags & 0x04) { # ID exists?
|
|
698
731
|
$pos + 4 > $end and $et->Warn('Missing JUMD ID'), return 0;
|
|
699
|
-
$et->HandleTag($tagTablePtr, '
|
|
732
|
+
$et->HandleTag($tagTablePtr, 'id', Get32u($dataPt, $pos));
|
|
700
733
|
$pos += 4;
|
|
701
734
|
}
|
|
702
735
|
if ($flags & 0x08) { # signature exists?
|
|
703
736
|
$pos + 32 > $end and $et->Warn('Missing JUMD signature'), return 0;
|
|
704
|
-
$et->HandleTag($tagTablePtr, '
|
|
737
|
+
$et->HandleTag($tagTablePtr, 'sig', substr($$dataPt, $pos, 32));
|
|
705
738
|
$pos += 32;
|
|
706
739
|
}
|
|
707
740
|
$pos == $end or $et->Warn('Extra data in JUMD box'." $pos $end", 1);
|
|
@@ -931,6 +964,14 @@ sub ProcessJpeg2000Box($$$)
|
|
|
931
964
|
}
|
|
932
965
|
}
|
|
933
966
|
}
|
|
967
|
+
# create new tag for JUMBF data values with name corresponding to JUMBFLabel
|
|
968
|
+
if ($tagInfo and $$et{JUMBFLabel} and (not $$tagInfo{SubDirectory} or $$tagInfo{BlockExtract})) {
|
|
969
|
+
$tagInfo = { %$tagInfo, Name => $$et{JUMBFLabel} . ($$tagInfo{JUMBF_Suffix} || '') };
|
|
970
|
+
delete $$tagInfo{Description};
|
|
971
|
+
AddTagToTable($tagTablePtr, '_JUMBF_' . $$et{JUMBFLabel}, $tagInfo);
|
|
972
|
+
delete $$tagInfo{Protected}; # (must do this so -j -b returns JUMBF binary data)
|
|
973
|
+
$$tagInfo{TagID} = $boxID;
|
|
974
|
+
}
|
|
934
975
|
if ($verbose) {
|
|
935
976
|
$et->VerboseInfo($boxID, $tagInfo,
|
|
936
977
|
Table => $tagTablePtr,
|
|
@@ -941,13 +982,6 @@ sub ProcessJpeg2000Box($$$)
|
|
|
941
982
|
);
|
|
942
983
|
next unless $tagInfo;
|
|
943
984
|
}
|
|
944
|
-
# create new tag for JUMBF data values with name corresponding to JUMBFLabel
|
|
945
|
-
if ($$et{JUMBFLabel} and (not $$tagInfo{SubDirectory} or $$tagInfo{BlockExtract})) {
|
|
946
|
-
$tagInfo = { %$tagInfo, Name => $$et{JUMBFLabel} };
|
|
947
|
-
AddTagToTable($tagTablePtr, '_JUMBF_' . $$et{JUMBFLabel}, $tagInfo);
|
|
948
|
-
delete $$tagInfo{Protected}; # (must do this so -j -b returns JUMBF binary data)
|
|
949
|
-
$$tagInfo{TagID} = $boxID;
|
|
950
|
-
}
|
|
951
985
|
if ($$tagInfo{SubDirectory}) {
|
|
952
986
|
my $subdir = $$tagInfo{SubDirectory};
|
|
953
987
|
my $subdirStart = $valuePtr;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
#------------------------------------------------------------------------------
|
|
2
|
+
# File: LIF.pm
|
|
3
|
+
#
|
|
4
|
+
# Description: Read LIF (Leica Image File) files
|
|
5
|
+
#
|
|
6
|
+
# Revisions: 2021-06-21 - P. Harvey Created
|
|
7
|
+
#------------------------------------------------------------------------------
|
|
8
|
+
|
|
9
|
+
package Image::ExifTool::LIF;
|
|
10
|
+
|
|
11
|
+
use strict;
|
|
12
|
+
use vars qw($VERSION);
|
|
13
|
+
use Image::ExifTool qw(:DataAccess :Utils);
|
|
14
|
+
use Image::ExifTool::XMP;
|
|
15
|
+
|
|
16
|
+
$VERSION = '1.00';
|
|
17
|
+
|
|
18
|
+
%Image::ExifTool::LIF::Main = (
|
|
19
|
+
GROUPS => { 0 => 'XML', 1 => 'XML', 2 => 'Image' },
|
|
20
|
+
PROCESS_PROC => \&Image::ExifTool::XMP::ProcessXMP,
|
|
21
|
+
VARS => { NO_ID => 1 },
|
|
22
|
+
NOTES => q{
|
|
23
|
+
Tags extracted from Leica Image Format (LIF) imaging files. As well as the
|
|
24
|
+
tags listed below, all available information is extracted from the
|
|
25
|
+
XML-format metadata in the LIF header.
|
|
26
|
+
},
|
|
27
|
+
TimeStampList => {
|
|
28
|
+
Groups => { 2 => 'Time' },
|
|
29
|
+
ValueConv => q{
|
|
30
|
+
my $unixTimeZero = 134774 * 24 * 3600;
|
|
31
|
+
my @vals = split ' ', $val;
|
|
32
|
+
foreach (@vals) {
|
|
33
|
+
$_ = 1e-7 * hex($_);
|
|
34
|
+
# shift from Jan 1, 1601 to Jan 1, 1970
|
|
35
|
+
$_ = Image::ExifTool::ConvertUnixTime($_ - $unixTimeZero);
|
|
36
|
+
}
|
|
37
|
+
return \@vals;
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
#------------------------------------------------------------------------------
|
|
43
|
+
# Shorten obscenely long LIF tag names
|
|
44
|
+
# Inputs: Tag name
|
|
45
|
+
# Returns: Shortened tag name
|
|
46
|
+
sub ShortenTagNames($)
|
|
47
|
+
{
|
|
48
|
+
local $_;
|
|
49
|
+
$_ = shift;
|
|
50
|
+
s/DescriptionDimensionsDimensionDescription/Dimensions/;
|
|
51
|
+
s/DescriptionChannelsChannelDescription/Channel/;
|
|
52
|
+
s/ShutterListShutter/Shutter/;
|
|
53
|
+
s/SettingDefinition/Setting/;
|
|
54
|
+
s/AdditionalZPositionListAdditionalZPosition/AdditionalZPosition/;
|
|
55
|
+
s/LMSDataContainerHeader//g;
|
|
56
|
+
s/FilterWheelWheel/FilterWheel/;
|
|
57
|
+
s/FilterWheelFilter/FilterWheel/;
|
|
58
|
+
s/DetectorListDetector/Detector/;
|
|
59
|
+
s/OnlineDyeSeparationOnlineDyeSeparation/OnlineDyeSeparation/;
|
|
60
|
+
s/AotfListAotf/Aotf/;
|
|
61
|
+
s/SettingAotfLaserLineSetting/SettingAotfLaser/;
|
|
62
|
+
s/DataROISetROISet/DataROISet/;
|
|
63
|
+
s/AdditionalZPosition/AddZPos/;
|
|
64
|
+
s/FRAPplusBlock_FRAPBlock_FRAP_PrePost_Info/FRAP_/;
|
|
65
|
+
s/FRAPplusBlock_FRAPBlock_FRAP_(Master)?/FRAP_/;
|
|
66
|
+
s/LDM_Block_SequentialLDM_Block_Sequential_/LDM_/;
|
|
67
|
+
s/ATLConfocalSetting/ATLConfocal/;
|
|
68
|
+
s/LaserArrayLaser/Laser/;
|
|
69
|
+
s/LDM_Master/LDM_/;
|
|
70
|
+
s/(List)?ATLConfocal/ATL_/;
|
|
71
|
+
s/Separation/Sep/;
|
|
72
|
+
s/BleachPointsElement/BleachPoint/;
|
|
73
|
+
s/BeamPositionBeamPosition/BeamPosition/;
|
|
74
|
+
s/DataROISetPossible(ROI)?/DataROISet/;
|
|
75
|
+
s/RoiElementChildrenElementDataROISingle(Roi)?/Roi/;
|
|
76
|
+
s/InfoLaserLineSettingArrayLaserLineSetting/LastLineSetting/;
|
|
77
|
+
s/FilterWheelWheelNameFilterName/FilterWheelFilterName/;
|
|
78
|
+
s/LUT_ListLut/Lut/;
|
|
79
|
+
s/ROI_ListRoiRoidata/ROI_/;
|
|
80
|
+
s/LaserLineSettingArrayLaserLineSetting/LaserLineSetting/;
|
|
81
|
+
return $_;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
#------------------------------------------------------------------------------
|
|
85
|
+
# Extract metadata from a LIF image
|
|
86
|
+
# Inputs: 0) ExifTool object reference, 1) dirInfo reference
|
|
87
|
+
# Returns: 1 on success, 0 if this wasn't a valid LIF file
|
|
88
|
+
sub ProcessLIF($$)
|
|
89
|
+
{
|
|
90
|
+
my ($et, $dirInfo) = @_;
|
|
91
|
+
my $raf = $$dirInfo{RAF};
|
|
92
|
+
my $buff;
|
|
93
|
+
|
|
94
|
+
# verify this is a valid LIF file
|
|
95
|
+
return 0 unless $raf->Read($buff, 15) == 15 and $buff =~ /^\x70\0{3}.{4}\x2a.{4}<\0/s;
|
|
96
|
+
|
|
97
|
+
$et->SetFileType();
|
|
98
|
+
SetByteOrder('II');
|
|
99
|
+
|
|
100
|
+
my $size = Get32u(\$buff, 4); # XML chunk size
|
|
101
|
+
my $len = Get32u(\$buff, 9) * 2; # XML data length
|
|
102
|
+
|
|
103
|
+
$size < $len and $et->Error('Corrupted LIF XML block'), return 1;
|
|
104
|
+
$size > 100000000 and $et->Error('LIF XML block too large'), return 1;
|
|
105
|
+
|
|
106
|
+
$raf->Seek(-2, 1) and $raf->Read($buff, $len) == $len or $et->Error('Truncated LIF XML block'), return 1;
|
|
107
|
+
|
|
108
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::LIF::Main');
|
|
109
|
+
|
|
110
|
+
# convert from UCS2 to UTF8
|
|
111
|
+
my $xml = Image::ExifTool::Decode($et, $buff, 'UCS2', 'II', 'UTF8');
|
|
112
|
+
|
|
113
|
+
my %dirInfo = ( DataPt => \$xml );
|
|
114
|
+
|
|
115
|
+
$$et{XmpIgnoreProps} = [ 'LMSDataContainerHeader', 'Element', 'Children', 'Data', 'Image', 'Attachment' ];
|
|
116
|
+
$$et{ShortenXmpTags} = \&ShortenTagNames;
|
|
117
|
+
|
|
118
|
+
$et->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
|
119
|
+
|
|
120
|
+
return 1;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
1; # end
|
|
124
|
+
|
|
125
|
+
__END__
|
|
126
|
+
|
|
127
|
+
=head1 NAME
|
|
128
|
+
|
|
129
|
+
Image::ExifTool::LIF - Read LIF meta information
|
|
130
|
+
|
|
131
|
+
=head1 SYNOPSIS
|
|
132
|
+
|
|
133
|
+
This module is used by Image::ExifTool
|
|
134
|
+
|
|
135
|
+
=head1 DESCRIPTION
|
|
136
|
+
|
|
137
|
+
This module contains definitions required by Image::ExifTool to read
|
|
138
|
+
metadata from Leica Image File (LIF) images.
|
|
139
|
+
|
|
140
|
+
=head1 AUTHOR
|
|
141
|
+
|
|
142
|
+
Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
|
|
143
|
+
|
|
144
|
+
This library is free software; you can redistribute it and/or modify it
|
|
145
|
+
under the same terms as Perl itself.
|
|
146
|
+
|
|
147
|
+
=head1 SEE ALSO
|
|
148
|
+
|
|
149
|
+
L<Image::ExifTool::TagNames/LIF Tags>,
|
|
150
|
+
L<Image::ExifTool(3pm)|Image::ExifTool>
|
|
151
|
+
|
|
152
|
+
=cut
|
|
153
|
+
|
|
@@ -11,7 +11,7 @@ package Image::ExifTool::Lang::nl;
|
|
|
11
11
|
use strict;
|
|
12
12
|
use vars qw($VERSION);
|
|
13
13
|
|
|
14
|
-
$VERSION = '1.
|
|
14
|
+
$VERSION = '1.13';
|
|
15
15
|
|
|
16
16
|
%Image::ExifTool::Lang::nl::Translate = (
|
|
17
17
|
'AEBAutoCancel' => {
|
|
@@ -1502,97 +1502,98 @@ $VERSION = '1.12';
|
|
|
1502
1502
|
'GIFVersion' => 'GIF versie',
|
|
1503
1503
|
'GPSAltitude' => 'Hoogte',
|
|
1504
1504
|
'GPSAltitudeRef' => {
|
|
1505
|
-
Description => '
|
|
1505
|
+
Description => 'GPS hoogte - referentie',
|
|
1506
1506
|
PrintConv => {
|
|
1507
|
-
'Above Sea Level' => '
|
|
1508
|
-
'Below Sea Level' => '
|
|
1507
|
+
'Above Sea Level' => 'Boven zeeniveau',
|
|
1508
|
+
'Below Sea Level' => 'Onder zeeniveau',
|
|
1509
1509
|
},
|
|
1510
1510
|
},
|
|
1511
|
-
'GPSAreaInformation' => '
|
|
1512
|
-
'GPSDOP' => '
|
|
1513
|
-
'GPSDateStamp' => 'GPS datum',
|
|
1514
|
-
'GPSDateTime' => 'GPS tijd
|
|
1515
|
-
'GPSDestBearing' => '
|
|
1511
|
+
'GPSAreaInformation' => 'GPS naam van het gebied',
|
|
1512
|
+
'GPSDOP' => 'GPS meetnauwkeurigheid',
|
|
1513
|
+
'GPSDateStamp' => 'GPS UTC datum',
|
|
1514
|
+
'GPSDateTime' => 'GPS UTC datum en tijd',
|
|
1515
|
+
'GPSDestBearing' => 'GPS peiling van bestemming',
|
|
1516
1516
|
'GPSDestBearingRef' => {
|
|
1517
|
-
Description => '
|
|
1517
|
+
Description => 'GPS peiling van bestemming - referentie',
|
|
1518
1518
|
PrintConv => {
|
|
1519
|
-
'Magnetic North' => 'Magnetische
|
|
1520
|
-
'True North' => 'Geografische
|
|
1519
|
+
'Magnetic North' => 'Magnetische noorden',
|
|
1520
|
+
'True North' => 'Geografische noorden',
|
|
1521
1521
|
},
|
|
1522
1522
|
},
|
|
1523
|
-
'GPSDestDistance' => '
|
|
1523
|
+
'GPSDestDistance' => 'GPS afstand tot bestemming',
|
|
1524
1524
|
'GPSDestDistanceRef' => {
|
|
1525
|
-
Description => '
|
|
1525
|
+
Description => 'GPS afstand tot bestemming - referentie',
|
|
1526
1526
|
PrintConv => {
|
|
1527
|
-
'Miles' => '
|
|
1528
|
-
'Nautical Miles' => '
|
|
1527
|
+
'Miles' => 'Engelse mijlen',
|
|
1528
|
+
'Nautical Miles' => 'Zeemijlen',
|
|
1529
1529
|
},
|
|
1530
1530
|
},
|
|
1531
|
-
'GPSDestLatitude' => '
|
|
1531
|
+
'GPSDestLatitude' => 'GPS breedtegraad van bestemming',
|
|
1532
1532
|
'GPSDestLatitudeRef' => {
|
|
1533
|
-
Description => '
|
|
1533
|
+
Description => 'GPS breedtegraad van bestemming - referentie',
|
|
1534
1534
|
PrintConv => {
|
|
1535
|
-
'North' => '
|
|
1536
|
-
'South' => '
|
|
1535
|
+
'North' => 'Noorderbreedte',
|
|
1536
|
+
'South' => 'Zuiderbreedte',
|
|
1537
1537
|
},
|
|
1538
1538
|
},
|
|
1539
|
-
'GPSDestLongitude' => '
|
|
1539
|
+
'GPSDestLongitude' => 'GPS lengtegraad van bestemming',
|
|
1540
1540
|
'GPSDestLongitudeRef' => {
|
|
1541
|
-
Description => '
|
|
1541
|
+
Description => 'GPS lengtegraad van bestemming - referentie',
|
|
1542
1542
|
PrintConv => {
|
|
1543
|
-
'East' => '
|
|
1544
|
-
'West' => '
|
|
1543
|
+
'East' => 'Oosterlengte',
|
|
1544
|
+
'West' => 'Westerlengte',
|
|
1545
1545
|
},
|
|
1546
1546
|
},
|
|
1547
1547
|
'GPSDifferential' => {
|
|
1548
1548
|
Description => 'GPS differentiaal correctie',
|
|
1549
1549
|
PrintConv => {
|
|
1550
|
-
'Differential Corrected' => '
|
|
1551
|
-
'No Correction' => '
|
|
1550
|
+
'Differential Corrected' => 'Met differentiaal correctie',
|
|
1551
|
+
'No Correction' => 'Zonder differentiaal correctie',
|
|
1552
1552
|
},
|
|
1553
1553
|
},
|
|
1554
|
-
'GPSImgDirection' => '
|
|
1554
|
+
'GPSImgDirection' => 'GPS peiling van de afbeelding',
|
|
1555
1555
|
'GPSImgDirectionRef' => {
|
|
1556
|
-
Description => '
|
|
1556
|
+
Description => 'GPS peiling van de afbeelding - referentie',
|
|
1557
1557
|
PrintConv => {
|
|
1558
|
-
'Magnetic North' => 'Magnetische
|
|
1559
|
-
'True North' => 'Geografische
|
|
1558
|
+
'Magnetic North' => 'Magnetische noorden',
|
|
1559
|
+
'True North' => 'Geografische noorden',
|
|
1560
1560
|
},
|
|
1561
1561
|
},
|
|
1562
|
-
'GPSInfo' => 'GPS Info
|
|
1563
|
-
'GPSLatitude' => '
|
|
1562
|
+
'GPSInfo' => 'GPS Info',
|
|
1563
|
+
'GPSLatitude' => 'GPS breedtegraad',
|
|
1564
1564
|
'GPSLatitudeRef' => {
|
|
1565
|
-
Description => '
|
|
1565
|
+
Description => 'GPS breedtegraad - referentie',
|
|
1566
1566
|
PrintConv => {
|
|
1567
|
-
'North' => '
|
|
1568
|
-
'South' => '
|
|
1567
|
+
'North' => 'Noorderbreedte',
|
|
1568
|
+
'South' => 'Zuiderbreedte',
|
|
1569
1569
|
},
|
|
1570
1570
|
},
|
|
1571
|
-
'GPSLongitude' => '
|
|
1571
|
+
'GPSLongitude' => 'GPS lengtegraad',
|
|
1572
1572
|
'GPSLongitudeRef' => {
|
|
1573
|
-
Description => '
|
|
1573
|
+
Description => 'GPS lengtegraad - referentie',
|
|
1574
1574
|
PrintConv => {
|
|
1575
|
-
'East' => '
|
|
1576
|
-
'West' => '
|
|
1575
|
+
'East' => 'Oosterlengte',
|
|
1576
|
+
'West' => 'Westerlengte',
|
|
1577
1577
|
},
|
|
1578
1578
|
},
|
|
1579
|
-
'GPSMapDatum' => '
|
|
1579
|
+
'GPSMapDatum' => 'GPS geodetisch datum',
|
|
1580
1580
|
'GPSMeasureMode' => {
|
|
1581
|
-
Description => 'GPS
|
|
1581
|
+
Description => 'GPS meetmethode',
|
|
1582
1582
|
PrintConv => {
|
|
1583
|
-
'2-D' => '
|
|
1584
|
-
'2-Dimensional' => '
|
|
1585
|
-
'2-Dimensional Measurement' => '
|
|
1586
|
-
'3-D' => '
|
|
1587
|
-
'3-Dimensional' => '
|
|
1588
|
-
'3-Dimensional Measurement' => '
|
|
1583
|
+
'2-D' => 'Tweedimensionale meting',
|
|
1584
|
+
'2-Dimensional' => 'Tweedimensionale meting',
|
|
1585
|
+
'2-Dimensional Measurement' => 'Tweedimensionale meting',
|
|
1586
|
+
'3-D' => 'Driedimensionale meting',
|
|
1587
|
+
'3-Dimensional' => 'Driedimensionale meting',
|
|
1588
|
+
'3-Dimensional Measurement' => 'Driedimensionale meting',
|
|
1589
1589
|
},
|
|
1590
1590
|
},
|
|
1591
|
-
'
|
|
1592
|
-
'
|
|
1593
|
-
'
|
|
1591
|
+
'GPSPosition' => 'GPS positie',
|
|
1592
|
+
'GPSProcessingMethod' => 'GPS verwerkingsmethode',
|
|
1593
|
+
'GPSSatellites' => 'GPS satellieten gebruikt voor de meting',
|
|
1594
|
+
'GPSSpeed' => 'GPS ontvanger bewegingssnelheid',
|
|
1594
1595
|
'GPSSpeedRef' => {
|
|
1595
|
-
Description => '
|
|
1596
|
+
Description => 'GPS ontvanger bewegingssnelheid - referentie',
|
|
1596
1597
|
PrintConv => {
|
|
1597
1598
|
'km/h' => 'Kilometer per uur',
|
|
1598
1599
|
'knots' => 'Knopen',
|
|
@@ -1602,20 +1603,20 @@ $VERSION = '1.12';
|
|
|
1602
1603
|
'GPSStatus' => {
|
|
1603
1604
|
Description => 'GPS ontvanger status',
|
|
1604
1605
|
PrintConv => {
|
|
1605
|
-
'Measurement Active' => '
|
|
1606
|
-
'Measurement Void' => '
|
|
1606
|
+
'Measurement Active' => 'Actuele meting beschikbaar',
|
|
1607
|
+
'Measurement Void' => 'Actuele meting niet beschikbaar',
|
|
1607
1608
|
},
|
|
1608
1609
|
},
|
|
1609
|
-
'GPSTimeStamp' => 'GPS tijd
|
|
1610
|
-
'GPSTrack' => '
|
|
1610
|
+
'GPSTimeStamp' => 'GPS UTC tijd',
|
|
1611
|
+
'GPSTrack' => 'GPS ontvanger bewegingsrichting',
|
|
1611
1612
|
'GPSTrackRef' => {
|
|
1612
|
-
Description => '
|
|
1613
|
+
Description => 'GPS ontvanger bewegingsrichting - referentie',
|
|
1613
1614
|
PrintConv => {
|
|
1614
|
-
'Magnetic North' => 'Magnetische
|
|
1615
|
-
'True North' => '
|
|
1615
|
+
'Magnetic North' => 'Magnetische noorden',
|
|
1616
|
+
'True North' => 'Geografische noorden',
|
|
1616
1617
|
},
|
|
1617
1618
|
},
|
|
1618
|
-
'GPSVersionID' => 'GPS
|
|
1619
|
+
'GPSVersionID' => 'GPS versie ID',
|
|
1619
1620
|
'GainControl' => {
|
|
1620
1621
|
Description => 'Belichtingsversterking',
|
|
1621
1622
|
PrintConv => {
|