exiftool-vendored.pl 12.41.0 → 12.44.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/Changes +60 -1
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +2 -2
- package/bin/exiftool +5 -4
- package/bin/lib/Image/ExifTool/Apple.pm +11 -2
- package/bin/lib/Image/ExifTool/Canon.pm +39 -24
- package/bin/lib/Image/ExifTool/DJI.pm +60 -1
- package/bin/lib/Image/ExifTool/DNG.pm +8 -2
- package/bin/lib/Image/ExifTool/DarwinCore.pm +13 -1
- package/bin/lib/Image/ExifTool/Exif.pm +9 -0
- package/bin/lib/Image/ExifTool/FlashPix.pm +23 -2
- package/bin/lib/Image/ExifTool/FujiFilm.pm +23 -2
- package/bin/lib/Image/ExifTool/GPS.pm +21 -1
- package/bin/lib/Image/ExifTool/Geotag.pm +24 -4
- package/bin/lib/Image/ExifTool/ICC_Profile.pm +10 -8
- package/bin/lib/Image/ExifTool/ID3.pm +5 -5
- package/bin/lib/Image/ExifTool/LNK.pm +5 -2
- package/bin/lib/Image/ExifTool/MakerNotes.pm +5 -0
- package/bin/lib/Image/ExifTool/Motorola.pm +8 -2
- package/bin/lib/Image/ExifTool/Nikon.pm +84 -29
- package/bin/lib/Image/ExifTool/NikonCustom.pm +4 -1
- package/bin/lib/Image/ExifTool/Olympus.pm +21 -2
- package/bin/lib/Image/ExifTool/PDF.pm +2 -1
- package/bin/lib/Image/ExifTool/Panasonic.pm +10 -1
- package/bin/lib/Image/ExifTool/Parrot.pm +96 -2
- package/bin/lib/Image/ExifTool/Pentax.pm +1 -1
- package/bin/lib/Image/ExifTool/Photoshop.pm +6 -5
- package/bin/lib/Image/ExifTool/QuickTime.pm +7 -1
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +41 -6
- package/bin/lib/Image/ExifTool/README +8 -2
- package/bin/lib/Image/ExifTool/Samsung.pm +233 -2
- package/bin/lib/Image/ExifTool/Shortcuts.pm +2 -1
- package/bin/lib/Image/ExifTool/Sony.pm +36 -28
- package/bin/lib/Image/ExifTool/TagLookup.pm +2528 -2483
- package/bin/lib/Image/ExifTool/TagNames.pod +192 -97
- package/bin/lib/Image/ExifTool/WritePhotoshop.pl +5 -5
- package/bin/lib/Image/ExifTool/Writer.pl +4 -3
- package/bin/lib/Image/ExifTool.pm +40 -16
- package/bin/lib/Image/ExifTool.pod +13 -4
- package/bin/perl-Image-ExifTool.spec +1 -1
- package/bin/pp_build_exe.args +4 -4
- package/package.json +3 -3
package/bin/Changes
CHANGED
|
@@ -4,9 +4,67 @@ ExifTool Version History
|
|
|
4
4
|
|
|
5
5
|
RSS feed: https://exiftool.org/rss.xml
|
|
6
6
|
|
|
7
|
-
Note: The most recent production release is Version 12.
|
|
7
|
+
Note: The most recent production release is Version 12.42. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
July 21, 2022 - Version 12.44
|
|
11
|
+
|
|
12
|
+
- Added a few new Sony lenses (thanks Jos Roost)
|
|
13
|
+
- Decode Accelerometer and Gyroscope data from ARCore videos
|
|
14
|
+
- Decode a couple of new Motorola tags (thanks Neal Krawetz)
|
|
15
|
+
- Decode FujiFilm FirmwareVersion (thanks Justin Arkinson)
|
|
16
|
+
- Decode MetaType for timed metadata in videos
|
|
17
|
+
- Decode a number of new Nikon Z tags (thanks Warren Hatch)
|
|
18
|
+
- Extract more types of embedded images from FlashPix-format files
|
|
19
|
+
- Made Composite GPSLatitude and GPSLongitude writable for setting GPS
|
|
20
|
+
coordinates and reference directions with one assignment
|
|
21
|
+
- Fixed bug introduced in 12.39 which broke extraction of timed GPS from some
|
|
22
|
+
INNOVV videos
|
|
23
|
+
- Fixed bug introduced in 12.43 which broke extraction of timed GPSDateTime
|
|
24
|
+
from Insta360 videos
|
|
25
|
+
|
|
26
|
+
July 6, 2022 - Version 12.43
|
|
27
|
+
|
|
28
|
+
- Added the ability to geotag from Google Takeout JSON files
|
|
29
|
+
- Added a few new Canon RF LensType values and a couple of new CanonModelID's
|
|
30
|
+
(thanks Norbert Wasser)
|
|
31
|
+
- Added new values to a couple of FujiFilm tags (thanks Greybeard)
|
|
32
|
+
- Added a new Nikon LensID (thanks BertJan Bakker)
|
|
33
|
+
- Recognize Autodesk Revit files (but don't yet support reading metadata)
|
|
34
|
+
- Decode DriveSerialNumber from LNK files (github #145)
|
|
35
|
+
- Decode Apple FocusDistanceRange (thanks Neal Krawetz)
|
|
36
|
+
- Made a number of Sony SR2SubIFD tags writable
|
|
37
|
+
- Tolerate dashes instead of colons as date separators in -geotag CSV files
|
|
38
|
+
- Patched to read new format accelerometer data from Insta360 files
|
|
39
|
+
- Patched to avoid outputting some Unknown tags when the -validate option is
|
|
40
|
+
used after a previously -execute'd command used the -u option
|
|
41
|
+
- Fixed names of Canon G9 WB levels tags (changed from GRGB to GRBG) (thanks
|
|
42
|
+
Christoph)
|
|
43
|
+
- Fixed typo in new Olympus AISubjectTrackingMode value
|
|
44
|
+
- Fixed "use of undefined value" warning when reading DJI metadata
|
|
45
|
+
- API Changes:
|
|
46
|
+
- Added IgnoreTags option
|
|
47
|
+
|
|
48
|
+
June 1, 2022 - Version 12.42 (production release)
|
|
49
|
+
|
|
50
|
+
- Added support for reading maker notes from Panasonic DC-GH6 videos
|
|
51
|
+
- Added conversion for Samsung MCCData
|
|
52
|
+
- Added a new Nikon LensID (thanks Chris)
|
|
53
|
+
- Added a few new Canon LensType values
|
|
54
|
+
- Added a couple of new Olympus StackedImage values (thanks Eberhard)
|
|
55
|
+
- Added a few new values for some Nikon Settings tags (thanks Warren Hatch)
|
|
56
|
+
- Added a "lang:" element to the -json output for alternate language tags when
|
|
57
|
+
-D, -H or -t is used
|
|
58
|
+
- Update DNG writer to not issue an error when writing DNG 1.6 files
|
|
59
|
+
- Decode information from DJI "ae_dbg_info" maker notes
|
|
60
|
+
- Decode Olympus AISubjectTrackingMode
|
|
61
|
+
- Changed ExifTool FileSize print conversion to use kB/MB/GB units instead of
|
|
62
|
+
KiB/MiB/GiB
|
|
63
|
+
- Changed "is not shiftable" warning to appear in -v (instead of just -v3)
|
|
64
|
+
output
|
|
65
|
+
- Patched to allow PDF Encrypt object to be "null"
|
|
66
|
+
- Fixed bug reading ICC_Profile 'meta' tags
|
|
67
|
+
|
|
10
68
|
Apr. 7, 2022 - Version 12.41
|
|
11
69
|
|
|
12
70
|
- Added support for "OM SYSTEM" maker notes
|
|
@@ -57,6 +115,7 @@ Jan. 13, 2022 - Version 12.39
|
|
|
57
115
|
- Added a new Pentax LensType (thanks Christian Shulz)
|
|
58
116
|
- Added a couple of new Nikon LensID's
|
|
59
117
|
- Added support for Nikon NKSC sidecar files
|
|
118
|
+
- Decode another type of timed GPS from MP4 videos
|
|
60
119
|
- Decode more tags for the Nikon Z7 and Z9 (thanks Warren Hatch)
|
|
61
120
|
- Decode a couple more FLIR tags
|
|
62
121
|
- Extract ZIP file comments
|
package/bin/META.json
CHANGED
package/bin/META.yml
CHANGED
package/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.44.tar.gz | tar -xf -
|
|
111
|
+
cd Image-ExifTool-12.44
|
|
112
112
|
./exiftool t/images/ExifTool.jpg
|
|
113
113
|
|
|
114
114
|
Note: These commands extract meta information from one of the test images.
|
package/bin/exiftool
CHANGED
|
@@ -11,7 +11,7 @@ use strict;
|
|
|
11
11
|
use warnings;
|
|
12
12
|
require 5.004;
|
|
13
13
|
|
|
14
|
-
my $version = '12.
|
|
14
|
+
my $version = '12.44';
|
|
15
15
|
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
17
17
|
BEGIN {
|
|
@@ -663,7 +663,7 @@ for (;;) {
|
|
|
663
663
|
}
|
|
664
664
|
$group = $2;
|
|
665
665
|
shift;
|
|
666
|
-
$group =~ /IFD/i and Warn("Can't list tags for specific IFD\n"), next;
|
|
666
|
+
$group =~ /IFD/i and Warn("Can't list tags for specific IFD\n"), $helped=1, next;
|
|
667
667
|
$group =~ /^(all|\*)$/ and undef $group;
|
|
668
668
|
} else {
|
|
669
669
|
$pass or next;
|
|
@@ -2554,8 +2554,9 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2554
2554
|
if ($showTagID or $outFormat < 0) {
|
|
2555
2555
|
$val = { val => $val };
|
|
2556
2556
|
if ($showTagID) {
|
|
2557
|
-
my $id = $et->GetTagID($tag);
|
|
2557
|
+
my ($id, $lang) = $et->GetTagID($tag);
|
|
2558
2558
|
$id = sprintf('0x%.4x', $id) if $showTagID eq 'H' and $id =~ /^\d+$/;
|
|
2559
|
+
$$val{lang} = $lang if $lang;
|
|
2559
2560
|
$$val{id} = $id;
|
|
2560
2561
|
}
|
|
2561
2562
|
if ($tabFormat) {
|
|
@@ -5466,7 +5467,7 @@ with this command:
|
|
|
5466
5467
|
|
|
5467
5468
|
produces output like this:
|
|
5468
5469
|
|
|
5469
|
-
-- Generated by ExifTool 12.
|
|
5470
|
+
-- Generated by ExifTool 12.44 --
|
|
5470
5471
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5471
5472
|
(f/5.6, 1/60s, ISO 100)
|
|
5472
5473
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -15,7 +15,7 @@ use vars qw($VERSION);
|
|
|
15
15
|
use Image::ExifTool::Exif;
|
|
16
16
|
use Image::ExifTool::PLIST;
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.06';
|
|
19
19
|
|
|
20
20
|
# Apple iPhone metadata (ref PH)
|
|
21
21
|
%Image::ExifTool::Apple::Main = (
|
|
@@ -66,7 +66,16 @@ $VERSION = '1.05';
|
|
|
66
66
|
Writable => 'string',
|
|
67
67
|
Notes => 'unique ID for all images in a burst',
|
|
68
68
|
},
|
|
69
|
-
#
|
|
69
|
+
0x000c => { # ref forum13710 (Neal Krawetz)
|
|
70
|
+
Name => 'FocusDistanceRange',
|
|
71
|
+
Writable => 'rational64s',
|
|
72
|
+
Count => 2,
|
|
73
|
+
PrintConv => q{
|
|
74
|
+
my @a = split ' ', $val;
|
|
75
|
+
sprintf('%.2f - %.2f m', $a[0] <= $a[1] ? @a : reverse @a);
|
|
76
|
+
},
|
|
77
|
+
PrintConvInv => '$val =~ s/ - //; $val =~ s/ ?m$//; $val',
|
|
78
|
+
},
|
|
70
79
|
# 0x000d - int32s: 0,1,6,20,24,32,40
|
|
71
80
|
# 0x000e - int32s: 0,1,4,12 (Orientation? 0=landscape? 4=portrait? ref 1)
|
|
72
81
|
# 0x000f - int32s: 2,3
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.59';
|
|
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)
|
|
@@ -197,6 +197,7 @@ $VERSION = '4.57';
|
|
|
197
197
|
44 => 'Canon EF 90-300mm f/4.5-5.6', #32
|
|
198
198
|
45 => 'Canon EF-S 18-55mm f/3.5-5.6 [II]', #PH (same ID for version II, ref 20)
|
|
199
199
|
46 => 'Canon EF 28-90mm f/4-5.6', #32
|
|
200
|
+
# 46 => 'Tamron 28-300mm f/3.5-6.3 Di VC PZD (A010)', # (also possibly?)
|
|
200
201
|
47 => 'Zeiss Milvus 35mm f/2 or 50mm f/2', #IB
|
|
201
202
|
47.1 => 'Zeiss Milvus 50mm f/2 Makro', #IB
|
|
202
203
|
47.2 => 'Zeiss Milvus 135mm f/2 ZE', #IB
|
|
@@ -571,7 +572,9 @@ $VERSION = '4.57';
|
|
|
571
572
|
61494 => 'Canon CN-E 85mm T1.3 L F', #PH
|
|
572
573
|
61495 => 'Canon CN-E 135mm T2.2 L F', #PH
|
|
573
574
|
61496 => 'Canon CN-E 35mm T1.5 L F', #PH
|
|
574
|
-
|
|
575
|
+
#
|
|
576
|
+
# see RFLensType tag for master list of 61182 RF lenses
|
|
577
|
+
#
|
|
575
578
|
61182 => 'Canon RF 50mm F1.2L USM or other Canon RF Lens',
|
|
576
579
|
61182.1 => 'Canon RF 24-105mm F4L IS USM',
|
|
577
580
|
61182.2 => 'Canon RF 28-70mm F2L USM',
|
|
@@ -594,16 +597,23 @@ $VERSION = '4.57';
|
|
|
594
597
|
'61182.19' => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF1.4x',
|
|
595
598
|
'61182.20' => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF2x',
|
|
596
599
|
'61182.21' => 'Canon RF 70-200mm F4L IS USM', #42
|
|
597
|
-
'61182.22' => 'Canon RF
|
|
598
|
-
'61182.23' => 'Canon RF
|
|
599
|
-
'61182.24' => 'Canon RF
|
|
600
|
-
'61182.25' => 'Canon RF
|
|
601
|
-
'61182.26' => 'Canon RF 100-400mm F5.6-8 IS USM
|
|
602
|
-
'61182.27' => 'Canon RF
|
|
603
|
-
'61182.28' => 'Canon RF 400mm
|
|
604
|
-
'61182.29' => 'Canon RF
|
|
605
|
-
'61182.30' => 'Canon RF
|
|
606
|
-
|
|
600
|
+
'61182.22' => 'Canon RF 100mm F2.8L MACRO IS USM', #42
|
|
601
|
+
'61182.23' => 'Canon RF 50mm F1.8 STM', #42
|
|
602
|
+
'61182.24' => 'Canon RF 14-35mm F4L IS USM', #IB
|
|
603
|
+
'61182.25' => 'Canon RF-S 18-45mm F4.5-6.3 IS STM', #42
|
|
604
|
+
'61182.26' => 'Canon RF 100-400mm F5.6-8 IS USM', #42
|
|
605
|
+
'61182.27' => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42 (NC)
|
|
606
|
+
'61182.28' => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42 (NC)
|
|
607
|
+
'61182.29' => 'Canon RF-S 18-150mm F3.5-6.3 IS STM', #42
|
|
608
|
+
'61182.30' => 'Canon RF 16mm F2.8 STM', #42
|
|
609
|
+
'61182.31' => 'Canon RF 400mm F2.8L IS USM', #IB
|
|
610
|
+
'61182.32' => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
|
|
611
|
+
'61182.33' => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
|
|
612
|
+
'61182.34' => 'Canon RF 600mm F4L IS USM', #GiaZopatti
|
|
613
|
+
# we need the RFLensType values for the following...
|
|
614
|
+
'61182.35' => 'Canon RF 800mm F5.6L IS USM', #PH (NC)
|
|
615
|
+
'61182.36' => 'Canon RF 1200mm F8L IS USM', #PH (NC)
|
|
616
|
+
'61182.37' => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH (NC)
|
|
607
617
|
65535 => 'n/a',
|
|
608
618
|
);
|
|
609
619
|
|
|
@@ -960,6 +970,8 @@ $VERSION = '4.57';
|
|
|
960
970
|
0x80000437 => 'EOS 90D', #IB
|
|
961
971
|
0x80000450 => 'EOS R3', #42
|
|
962
972
|
0x80000453 => 'EOS R6', #PH
|
|
973
|
+
0x80000464 => 'EOS R7', #42
|
|
974
|
+
0x80000465 => 'EOS R10', #42
|
|
963
975
|
0x80000467 => 'PowerShot ZOOM',
|
|
964
976
|
0x80000468 => 'EOS M50 Mark II / Kiss M2', #IB
|
|
965
977
|
0x80000520 => 'EOS D2000C', #IB
|
|
@@ -6522,23 +6534,23 @@ my %ciMaxFocal = (
|
|
|
6522
6534
|
0x02 => 'FacesDetected',
|
|
6523
6535
|
);
|
|
6524
6536
|
|
|
6525
|
-
# G9 white balance information (MakerNotes tag 0x29) (ref IB)
|
|
6537
|
+
# G9 white balance information (MakerNotes tag 0x29) (ref IB, changed ref forum13640)
|
|
6526
6538
|
%Image::ExifTool::Canon::WBInfo = (
|
|
6527
6539
|
%binaryDataAttrs,
|
|
6528
6540
|
NOTES => 'WB tags for the Canon G9.',
|
|
6529
6541
|
FORMAT => 'int32u',
|
|
6530
6542
|
FIRST_ENTRY => 1,
|
|
6531
6543
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
|
6532
|
-
0x02 => { Name => '
|
|
6533
|
-
0x0a => { Name => '
|
|
6534
|
-
0x12 => { Name => '
|
|
6535
|
-
0x1a => { Name => '
|
|
6536
|
-
0x22 => { Name => '
|
|
6537
|
-
0x2a => { Name => '
|
|
6538
|
-
0x32 => { Name => '
|
|
6539
|
-
0x3a => { Name => '
|
|
6540
|
-
0x42 => { Name => '
|
|
6541
|
-
0x4a => { Name => '
|
|
6544
|
+
0x02 => { Name => 'WB_GRBGLevelsAuto', Format => 'int32s[4]' },
|
|
6545
|
+
0x0a => { Name => 'WB_GRBGLevelsDaylight', Format => 'int32s[4]' },
|
|
6546
|
+
0x12 => { Name => 'WB_GRBGLevelsCloudy', Format => 'int32s[4]' },
|
|
6547
|
+
0x1a => { Name => 'WB_GRBGLevelsTungsten', Format => 'int32s[4]' },
|
|
6548
|
+
0x22 => { Name => 'WB_GRBGLevelsFluorescent', Format => 'int32s[4]' },
|
|
6549
|
+
0x2a => { Name => 'WB_GRBGLevelsFluorHigh', Format => 'int32s[4]' },
|
|
6550
|
+
0x32 => { Name => 'WB_GRBGLevelsFlash', Format => 'int32s[4]' },
|
|
6551
|
+
0x3a => { Name => 'WB_GRBGLevelsUnderwater', Format => 'int32s[4]' },
|
|
6552
|
+
0x42 => { Name => 'WB_GRBGLevelsCustom1', Format => 'int32s[4]' },
|
|
6553
|
+
0x4a => { Name => 'WB_GRBGLevelsCustom2', Format => 'int32s[4]' },
|
|
6542
6554
|
);
|
|
6543
6555
|
|
|
6544
6556
|
# yet more face detect information (MakerNotes tag 0x2f) - PH (G12)
|
|
@@ -6795,16 +6807,19 @@ my %ciMaxFocal = (
|
|
|
6795
6807
|
276 => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF1.4x',
|
|
6796
6808
|
277 => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF2x',
|
|
6797
6809
|
278 => 'Canon RF 70-200mm F4L IS USM', #42
|
|
6810
|
+
279 => 'Canon RF 100mm F2.8L MACRO IS USM', #42
|
|
6798
6811
|
280 => 'Canon RF 50mm F1.8 STM', #42
|
|
6799
6812
|
281 => 'Canon RF 14-35mm F4L IS USM', #42/IB
|
|
6813
|
+
282 => 'Canon RF-S 18-45mm F4.5-6.3 IS STM', #42
|
|
6800
6814
|
283 => 'Canon RF 100-400mm F5.6-8 IS USM', #42
|
|
6801
6815
|
284 => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42 (NC)
|
|
6802
6816
|
285 => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42 (NC)
|
|
6817
|
+
286 => 'Canon RF-S 18-150mm F3.5-6.3 IS STM', #42
|
|
6803
6818
|
288 => 'Canon RF 16mm F2.8 STM', #42
|
|
6804
6819
|
289 => 'Canon RF 400mm F2.8L IS USM', #IB
|
|
6805
6820
|
290 => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
|
|
6806
6821
|
291 => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
|
|
6807
|
-
|
|
6822
|
+
292 => 'Canon RF 600mm F4L IS USM', #GiaZopatti
|
|
6808
6823
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
|
6809
6824
|
},
|
|
6810
6825
|
},
|
|
@@ -11,11 +11,14 @@ package Image::ExifTool::DJI;
|
|
|
11
11
|
|
|
12
12
|
use strict;
|
|
13
13
|
use vars qw($VERSION);
|
|
14
|
+
use Image::ExifTool qw(:DataAccess :Utils);
|
|
14
15
|
use Image::ExifTool::Exif;
|
|
15
16
|
use Image::ExifTool::XMP;
|
|
16
17
|
use Image::ExifTool::GPS;
|
|
17
18
|
|
|
18
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.06';
|
|
20
|
+
|
|
21
|
+
sub ProcessDJIInfo($$$);
|
|
19
22
|
|
|
20
23
|
my %convFloat2 = (
|
|
21
24
|
PrintConv => 'sprintf("%+.2f", $val)',
|
|
@@ -44,6 +47,29 @@ my %convFloat2 = (
|
|
|
44
47
|
0x0b => { Name => 'CameraRoll', Writable => 'float', %convFloat2 },
|
|
45
48
|
);
|
|
46
49
|
|
|
50
|
+
# DJI debug maker notes
|
|
51
|
+
%Image::ExifTool::DJI::Info = (
|
|
52
|
+
PROCESS_PROC => \&ProcessDJIInfo,
|
|
53
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
54
|
+
NOTES => 'Tags written by some DJI drones.',
|
|
55
|
+
VARS => { LONG_TAGS => 2 },
|
|
56
|
+
ae_dbg_info => { Name => 'AEDebugInfo' },
|
|
57
|
+
ae_histogram_info => { Name => 'AEHistogramInfo' },
|
|
58
|
+
ae_local_histogram => { Name => 'AELocalHistogram' },
|
|
59
|
+
ae_liveview_histogram_info => { Name => 'AELiveViewHistogramInfo' },
|
|
60
|
+
ae_liveview_local_histogram => { Name => 'AELiveViewLocalHistogram' },
|
|
61
|
+
awb_dbg_info => { Name => 'AWBDebugInfo' },
|
|
62
|
+
af_dbg_info => { Name => 'AFDebugInfo' },
|
|
63
|
+
hiso => { Name => 'Histogram' },
|
|
64
|
+
xidiri => { Name => 'Xidiri' },
|
|
65
|
+
'GimbalDegree(Y,P,R)'=> { Name => 'GimbalDegree' },
|
|
66
|
+
'FlightDegree(Y,P,R)'=> { Name => 'FlightDegree' },
|
|
67
|
+
adj_dbg_info => { Name => 'ADJDebugInfo' },
|
|
68
|
+
sensor_id => { Name => 'SensorID' },
|
|
69
|
+
'FlightSpeed(X,Y,Z)' => { Name => 'FlightSpeed' },
|
|
70
|
+
hyperlapse_dbg_info => { Name => 'HyperlapsDebugInfo' },
|
|
71
|
+
);
|
|
72
|
+
|
|
47
73
|
# thermal parameters in APP4 of DJI ZH20T images (ref forum11401)
|
|
48
74
|
%Image::ExifTool::DJI::ThermalParams = (
|
|
49
75
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
@@ -134,6 +160,39 @@ my %convFloat2 = (
|
|
|
134
160
|
},
|
|
135
161
|
);
|
|
136
162
|
|
|
163
|
+
#------------------------------------------------------------------------------
|
|
164
|
+
# Process DJI infor (ref PH)
|
|
165
|
+
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
|
166
|
+
# Returns: 1 on success
|
|
167
|
+
sub ProcessDJIInfo($$$)
|
|
168
|
+
{
|
|
169
|
+
my ($et, $dirInfo, $tagTbl) = @_;
|
|
170
|
+
my $dataPt = $$dirInfo{DataPt};
|
|
171
|
+
my $dirStart = $$dirInfo{DirStart} || 0;
|
|
172
|
+
my $dirLen = $$dirInfo{DirLen} || (length($$dataPt) - $dirStart);
|
|
173
|
+
if ($dirStart) {
|
|
174
|
+
my $buff = substr($$dataPt, $dirStart, $dirLen);
|
|
175
|
+
$dataPt = \$buff;
|
|
176
|
+
}
|
|
177
|
+
while ($$dataPt =~ /\G\[(.*?)\](?=(\[|$))/sg) {
|
|
178
|
+
my ($tag, $val) = split /:/, $1, 2;
|
|
179
|
+
next unless defined $tag and defined $val;
|
|
180
|
+
if ($val =~ /^([\x20-\x7f]+)\0*$/) {
|
|
181
|
+
$val = $1;
|
|
182
|
+
} else {
|
|
183
|
+
my $buff = $val;
|
|
184
|
+
$val = \$buff;
|
|
185
|
+
}
|
|
186
|
+
if (not $$tagTbl{$tag} and $tag=~ /^[-_a-zA-Z0-9]+$/) {
|
|
187
|
+
my $name = $tag;
|
|
188
|
+
$name =~ s/_([a-z])/_\U$1/g;
|
|
189
|
+
AddTagToTable($tagTbl, $tag, { Name => Image::ExifTool::MakeTagName($name) });
|
|
190
|
+
}
|
|
191
|
+
$et->HandleTag($tagTbl, $tag, $val);
|
|
192
|
+
}
|
|
193
|
+
return 1;
|
|
194
|
+
}
|
|
195
|
+
|
|
137
196
|
__END__
|
|
138
197
|
|
|
139
198
|
=head1 NAME
|
|
@@ -680,8 +680,14 @@ sub ProcessAdobeMakN($$$)
|
|
|
680
680
|
my $dataPos = $$dirInfo{DataPos};
|
|
681
681
|
my $hdrLen = 6;
|
|
682
682
|
|
|
683
|
-
# hack for extra 12 bytes in MakN header of JPEG converted to DNG
|
|
684
|
-
# (4 bytes "00 00 00 01" followed by 8 unknown bytes)
|
|
683
|
+
# 2018-09-27: hack for extra 12 bytes in MakN header of JPEG converted to DNG
|
|
684
|
+
# by Adobe Camera Raw (4 bytes "00 00 00 01" followed by 8 unknown bytes)
|
|
685
|
+
# - this is because CameraRaw copies the maker notes from the wrong location
|
|
686
|
+
# in a JPG image (off by 12 bytes presumably due to the JPEG headers)
|
|
687
|
+
# - this hack won't work in most cases because the extra bytes are not consistent
|
|
688
|
+
# since they are just the data that existed in the JPG before the maker notes
|
|
689
|
+
# - also, the last 12 bytes of the maker notes will be missing
|
|
690
|
+
# - 2022-04-26: this bug still exists in Camera Raw 14.3
|
|
685
691
|
$hdrLen += 12 if $len >= 18 and substr($$dataPt, $start+6, 4) eq "\0\0\0\x01";
|
|
686
692
|
|
|
687
693
|
my $dirStart = $start + $hdrLen; # pointer to maker note directory
|
|
@@ -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.07';
|
|
19
19
|
|
|
20
20
|
my %dateTimeInfo = (
|
|
21
21
|
# NOTE: Do NOT put "Groups" here because Groups hash must not be common!
|
|
@@ -138,6 +138,9 @@ my %event = (
|
|
|
138
138
|
identificationVerificationStatus => { },
|
|
139
139
|
identifiedBy => { },
|
|
140
140
|
typeStatus => { },
|
|
141
|
+
# new, ref forum13707
|
|
142
|
+
identifiedByID => { },
|
|
143
|
+
verbatimIdentification => { },
|
|
141
144
|
},
|
|
142
145
|
},
|
|
143
146
|
LivingSpecimen => { Struct => \%materialSample },
|
|
@@ -189,6 +192,11 @@ my %event = (
|
|
|
189
192
|
recordNumber => { },
|
|
190
193
|
reproductiveCondition => { },
|
|
191
194
|
sex => { },
|
|
195
|
+
# new, ref forum13707
|
|
196
|
+
degreeOfEstablishment => { },
|
|
197
|
+
georeferenceVerificationStatus => { },
|
|
198
|
+
pathway => { },
|
|
199
|
+
recordedByID => { },
|
|
192
200
|
},
|
|
193
201
|
},
|
|
194
202
|
OccurrenceOccurrenceDetails => { Name => 'OccurrenceDetails', Flat => 1 },
|
|
@@ -242,6 +250,7 @@ my %event = (
|
|
|
242
250
|
relationshipRemarks => { },
|
|
243
251
|
resourceID => { },
|
|
244
252
|
resourceRelationshipID => { },
|
|
253
|
+
relationshipOfResourceID => { }, # new, ref forum13707
|
|
245
254
|
},
|
|
246
255
|
},
|
|
247
256
|
Taxon => {
|
|
@@ -255,6 +264,7 @@ my %event = (
|
|
|
255
264
|
genus => { },
|
|
256
265
|
higherClassification => { },
|
|
257
266
|
infraspecificEpithet => { },
|
|
267
|
+
cultivarEpithet => { }, # new, ref forum13707
|
|
258
268
|
kingdom => { },
|
|
259
269
|
nameAccordingTo => { },
|
|
260
270
|
nameAccordingToID => { },
|
|
@@ -338,6 +348,8 @@ my %event = (
|
|
|
338
348
|
verbatimLongitude => { },
|
|
339
349
|
verbatimSRS => { },
|
|
340
350
|
waterBody => { },
|
|
351
|
+
# new, ref forum13707
|
|
352
|
+
verticalDatum => { },
|
|
341
353
|
},
|
|
342
354
|
},
|
|
343
355
|
);
|
|
@@ -3397,6 +3397,15 @@ my %opcodeInfo = (
|
|
|
3397
3397
|
},
|
|
3398
3398
|
# the DJI FC2103 writes some interesting stuff here (with sections labelled
|
|
3399
3399
|
# awb_dbg_info, ae_dbg_info, ae_histogram_info, af_dbg_info, hiso, xidiri) - PH
|
|
3400
|
+
{
|
|
3401
|
+
Name => 'MakerNoteDJIInfo',
|
|
3402
|
+
Condition => '$$valPt =~ /^\[ae_dbg_info:/',
|
|
3403
|
+
MakerNotes => 1,
|
|
3404
|
+
Binary => 1,
|
|
3405
|
+
WriteGroup => 'IFD0', # (for Validate)
|
|
3406
|
+
SubDirectory => { TagTable => 'Image::ExifTool::DJI::Info' },
|
|
3407
|
+
Format => 'undef',
|
|
3408
|
+
},
|
|
3400
3409
|
{
|
|
3401
3410
|
Name => 'DNGPrivateData',
|
|
3402
3411
|
Flags => [ 'Binary', 'Protected' ],
|
|
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
21
21
|
use Image::ExifTool::Exif;
|
|
22
22
|
use Image::ExifTool::ASF; # for GetGUID()
|
|
23
23
|
|
|
24
|
-
$VERSION = '1.
|
|
24
|
+
$VERSION = '1.40';
|
|
25
25
|
|
|
26
26
|
sub ProcessFPX($$);
|
|
27
27
|
sub ProcessFPXR($$$);
|
|
@@ -298,6 +298,7 @@ my %fpxFileType = (
|
|
|
298
298
|
%Image::ExifTool::FlashPix::Main = (
|
|
299
299
|
PROCESS_PROC => \&ProcessFPXR,
|
|
300
300
|
GROUPS => { 2 => 'Image' },
|
|
301
|
+
VARS => { LONG_TAGS => 0 },
|
|
301
302
|
NOTES => q{
|
|
302
303
|
The FlashPix file format, introduced in 1996, was developed by Kodak,
|
|
303
304
|
Hewlett-Packard and Microsoft. Internally the FPX file structure mimics
|
|
@@ -467,6 +468,25 @@ my %fpxFileType = (
|
|
|
467
468
|
ByteOrder => 'BigEndian',
|
|
468
469
|
},
|
|
469
470
|
},
|
|
471
|
+
# recognize Autodesk Revit files by looking at BasicFileInfo
|
|
472
|
+
# (but don't yet support reading their metatdata)
|
|
473
|
+
BasicFileInfo => {
|
|
474
|
+
Name => 'BasicFileInfo',
|
|
475
|
+
Binary => 1,
|
|
476
|
+
RawConv => q{
|
|
477
|
+
$val =~ tr/\0//d; # brute force conversion to ASCII
|
|
478
|
+
if ($val =~ /\.(rfa|rft|rte|rvt)/) {
|
|
479
|
+
$self->OverrideFileType(uc($1), "application/$1", $1);
|
|
480
|
+
}
|
|
481
|
+
return $val;
|
|
482
|
+
},
|
|
483
|
+
},
|
|
484
|
+
IeImg => {
|
|
485
|
+
Name => 'EmbeddedImage',
|
|
486
|
+
Notes => 'embedded images in Scene7 vignette VNT files',
|
|
487
|
+
Groups => { 2 => 'Preview' },
|
|
488
|
+
Binary => 1,
|
|
489
|
+
},
|
|
470
490
|
);
|
|
471
491
|
|
|
472
492
|
# Summary Information properties
|
|
@@ -2242,7 +2262,8 @@ sub ProcessFPX($$)
|
|
|
2242
2262
|
# remove instance number or class ID from tag if necessary
|
|
2243
2263
|
$tagInfo = $et->GetTagInfo($tagTablePtr, $1) if
|
|
2244
2264
|
($tag =~ /(.*) \d{6}$/s and $$tagTablePtr{$1}) or
|
|
2245
|
-
($tag =~ /(.*)_[0-9a-f]{16}$/s and $$tagTablePtr{$1})
|
|
2265
|
+
($tag =~ /(.*)_[0-9a-f]{16}$/s and $$tagTablePtr{$1}) or
|
|
2266
|
+
($tag =~ /(.*)_[0-9]{4}$/s and $$tagTablePtr{$1}); # IeImg instances
|
|
2246
2267
|
}
|
|
2247
2268
|
|
|
2248
2269
|
my $lSib = Get32u(\$dir, $pos + 0x44); # left sibling
|
|
@@ -31,7 +31,7 @@ use vars qw($VERSION);
|
|
|
31
31
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
32
32
|
use Image::ExifTool::Exif;
|
|
33
33
|
|
|
34
|
-
$VERSION = '1.
|
|
34
|
+
$VERSION = '1.82';
|
|
35
35
|
|
|
36
36
|
sub ProcessFujiDir($$$);
|
|
37
37
|
sub ProcessFaceRec($$$);
|
|
@@ -689,8 +689,9 @@ my %faceCategories = (
|
|
|
689
689
|
PrintConv => [{
|
|
690
690
|
0 => 'None',
|
|
691
691
|
1 => 'Optical', #PH
|
|
692
|
-
2 => 'Sensor-shift', #PH
|
|
692
|
+
2 => 'Sensor-shift', #PH (now IBIS/OIS, ref forum13708)
|
|
693
693
|
3 => 'OIS Lens', #forum9815 (optical+sensor?)
|
|
694
|
+
258 => 'IBIS/OIS + DIS', #forum13708 (digital on top of IBIS/OIS)
|
|
694
695
|
512 => 'Digital', #PH
|
|
695
696
|
},{
|
|
696
697
|
0 => 'Off',
|
|
@@ -762,6 +763,8 @@ my %faceCategories = (
|
|
|
762
763
|
},
|
|
763
764
|
PrintConvInv => '$val=~/(0x[0-9a-f]+)/i; hex $1',
|
|
764
765
|
},
|
|
766
|
+
0x1447 => { Name => 'FirmwareVersion', Writable => 'string' },
|
|
767
|
+
0x1448 => { Name => 'FirmwareVersion2', Writable => 'string' },
|
|
765
768
|
0x3803 => { #forum10037
|
|
766
769
|
Name => 'VideoRecordingMode',
|
|
767
770
|
Groups => { 2 => 'Video' },
|
|
@@ -841,6 +844,24 @@ my %faceCategories = (
|
|
|
841
844
|
1 => 'Face',
|
|
842
845
|
2 => 'Left Eye',
|
|
843
846
|
3 => 'Right Eye',
|
|
847
|
+
7 => 'Body',
|
|
848
|
+
8 => 'Head',
|
|
849
|
+
11 => 'Bike',
|
|
850
|
+
12 => 'Body of Car',
|
|
851
|
+
13 => 'Front of Car',
|
|
852
|
+
14 => 'Animal Body',
|
|
853
|
+
15 => 'Animal Head',
|
|
854
|
+
16 => 'Animal Face',
|
|
855
|
+
17 => 'Animal Left Eye',
|
|
856
|
+
18 => 'Animal Right Eye',
|
|
857
|
+
19 => 'Bird Body',
|
|
858
|
+
20 => 'Bird Head',
|
|
859
|
+
21 => 'Bird Left Eye',
|
|
860
|
+
22 => 'Bird Right Eye',
|
|
861
|
+
23 => 'Aircraft Body',
|
|
862
|
+
25 => 'Aircraft Cockpit',
|
|
863
|
+
26 => 'Train Front',
|
|
864
|
+
27 => 'Train Cockpit',
|
|
844
865
|
},'REPEAT'],
|
|
845
866
|
},
|
|
846
867
|
# 0x4202 int8u[-1] - number of cooredinates in each rectangle? (ref 11)
|
|
@@ -12,7 +12,7 @@ use strict;
|
|
|
12
12
|
use vars qw($VERSION);
|
|
13
13
|
use Image::ExifTool::Exif;
|
|
14
14
|
|
|
15
|
-
$VERSION = '1.
|
|
15
|
+
$VERSION = '1.54';
|
|
16
16
|
|
|
17
17
|
my %coordConv = (
|
|
18
18
|
ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)',
|
|
@@ -360,21 +360,41 @@ my %coordConv = (
|
|
|
360
360
|
# which must therefore require this module as necessary
|
|
361
361
|
GPSLatitude => {
|
|
362
362
|
SubDoc => 1, # generate for all sub-documents
|
|
363
|
+
Writable => 1,
|
|
364
|
+
Avoid => 1,
|
|
365
|
+
Priority => 1, # (necessary because Avoid sets default Priority to 0)
|
|
363
366
|
Require => {
|
|
364
367
|
0 => 'GPS:GPSLatitude',
|
|
365
368
|
1 => 'GPS:GPSLatitudeRef',
|
|
366
369
|
},
|
|
370
|
+
WriteAlso => {
|
|
371
|
+
'GPS:GPSLatitude' => '$val',
|
|
372
|
+
'GPS:GPSLatitudeRef' => '$val < 0 ? "S" : "N"',
|
|
373
|
+
},
|
|
367
374
|
ValueConv => '$val[1] =~ /^S/i ? -$val[0] : $val[0]',
|
|
368
375
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
|
|
376
|
+
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lat")',
|
|
369
377
|
},
|
|
370
378
|
GPSLongitude => {
|
|
371
379
|
SubDoc => 1, # generate for all sub-documents
|
|
380
|
+
Writable => 1,
|
|
381
|
+
Avoid => 1,
|
|
382
|
+
Priority => 1,
|
|
383
|
+
Require => {
|
|
384
|
+
0 => 'GPS:GPSLongitude',
|
|
385
|
+
1 => 'GPS:GPSLongitudeRef',
|
|
386
|
+
},
|
|
387
|
+
WriteAlso => {
|
|
388
|
+
'GPS:GPSLongitude' => '$val',
|
|
389
|
+
'GPS:GPSLongitudeRef' => '$val < 0 ? "W" : "E"',
|
|
390
|
+
},
|
|
372
391
|
Require => {
|
|
373
392
|
0 => 'GPS:GPSLongitude',
|
|
374
393
|
1 => 'GPS:GPSLongitudeRef',
|
|
375
394
|
},
|
|
376
395
|
ValueConv => '$val[1] =~ /^W/i ? -$val[0] : $val[0]',
|
|
377
396
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
|
|
397
|
+
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lon")',
|
|
378
398
|
},
|
|
379
399
|
GPSAltitude => {
|
|
380
400
|
SubDoc => [1,3], # generate for sub-documents if Desire 1 or 3 has a chance to exist
|