exiftool_vendored 12.18.0 → 12.22.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of exiftool_vendored might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/bin/Changes +54 -0
- data/bin/MANIFEST +1 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/config_files/example.config +1 -8
- data/bin/exiftool +70 -32
- data/bin/fmt_files/gpx.fmt +1 -1
- data/bin/fmt_files/gpx_wpt.fmt +1 -1
- data/bin/fmt_files/kml.fmt +1 -1
- data/bin/fmt_files/kml_track.fmt +1 -1
- data/bin/lib/Image/ExifTool.pm +74 -24
- data/bin/lib/Image/ExifTool.pod +33 -25
- data/bin/lib/Image/ExifTool/Apple.pm +3 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +20 -10
- data/bin/lib/Image/ExifTool/Canon.pm +6 -1
- data/bin/lib/Image/ExifTool/DJI.pm +6 -6
- data/bin/lib/Image/ExifTool/Exif.pm +5 -2
- data/bin/lib/Image/ExifTool/FITS.pm +13 -2
- data/bin/lib/Image/ExifTool/GPS.pm +22 -11
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -2
- data/bin/lib/Image/ExifTool/M2TS.pm +40 -4
- data/bin/lib/Image/ExifTool/MIE.pm +2 -2
- data/bin/lib/Image/ExifTool/Microsoft.pm +296 -82
- data/bin/lib/Image/ExifTool/Nikon.pm +2 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +2 -2
- data/bin/lib/Image/ExifTool/QuickTime.pm +28 -12
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +6 -5
- data/bin/lib/Image/ExifTool/Shortcuts.pm +9 -0
- data/bin/lib/Image/ExifTool/Sony.pm +51 -17
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
- data/bin/lib/Image/ExifTool/TagLookup.pm +4031 -4022
- data/bin/lib/Image/ExifTool/TagNames.pod +130 -95
- data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +7 -5
- data/bin/lib/Image/ExifTool/Writer.pl +43 -10
- data/bin/lib/Image/ExifTool/XMP.pm +4 -4
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +20 -6
data/bin/lib/Image/ExifTool.pod
CHANGED
@@ -627,8 +627,9 @@ Flag to extract information from embedded documents in EPS files, embedded
|
|
627
627
|
EPS information and JPEG and Jpeg2000 images in PDF files, embedded MPF
|
628
628
|
images in JPEG and MPO files, timed metadata in videos, and the resource
|
629
629
|
fork of Mac OS files. A setting of 2 also causes the H264 video stream in
|
630
|
-
MP4 files to be parsed until the first SEI message is decoded, or 3 to
|
631
|
-
|
630
|
+
MP4 files to be parsed until the first SEI message is decoded, or 3 to parse
|
631
|
+
the entire H264 stream in MP4 videos and the entire M2TS file to look for
|
632
|
+
any unlisted program containing GPS metadata. Default is undef.
|
632
633
|
|
633
634
|
=item FastScan
|
634
635
|
|
@@ -737,8 +738,8 @@ group names.
|
|
737
738
|
|
738
739
|
=item HexTagIDs
|
739
740
|
|
740
|
-
|
741
|
-
numerical ID's.
|
741
|
+
Return hexadecimal instead of decimal for the family 7 group names of tags
|
742
|
+
with numerical ID's.
|
742
743
|
|
743
744
|
=item HtmlDump
|
744
745
|
|
@@ -843,8 +844,9 @@ print conversion for writing. Default is 1.
|
|
843
844
|
|
844
845
|
Flag set to add an 'mdir' Handler to a newly created Meta box when adding
|
845
846
|
QuickTime ItemList tags. Adobe Bridge does not add this Handler, but it is
|
846
|
-
commonly found in samples from other software,
|
847
|
-
|
847
|
+
commonly found in samples from other software, and it has been reported that
|
848
|
+
Apple QuickTime Player and Photos.apps will ignore ItemList tags if this is
|
849
|
+
missing. Default is 1.
|
848
850
|
|
849
851
|
=item QuickTimeUTC
|
850
852
|
|
@@ -2049,6 +2051,7 @@ The group family numbers are currently available:
|
|
2049
2051
|
4) Instance Number (eg. Copy1, Copy2, Copy3...)
|
2050
2052
|
5) Metadata Path (eg. JPEG-APP1-IFD0-ExifIFD)
|
2051
2053
|
6) EXIF/TIFF Format (eg. int8u, int32u, undef, string)
|
2054
|
+
7) Tag ID (eg. ID-271, ID-rights, ID-a9aut)
|
2052
2055
|
|
2053
2056
|
Families 0 and 1 are based on the file structure, and are similar except
|
2054
2057
|
that family 1 is more specific and sub-divides some groups to give more
|
@@ -2092,13 +2095,14 @@ Family 6 is currently used only for EXIF/TIFF metadata, and gives the format
|
|
2092
2095
|
type of the extracted value. Generated only if the L</SaveFormat> option is
|
2093
2096
|
used when extracting.
|
2094
2097
|
|
2095
|
-
Family 7 is used for tag ID's. The group names are
|
2096
|
-
|
2097
|
-
tag ID's are
|
2098
|
-
|
2099
|
-
|
2100
|
-
[-_A-Za-z0-9]
|
2101
|
-
|
2098
|
+
Family 7 is used for tag ID's. The group names are the actual tag ID's,
|
2099
|
+
with a leading "ID-" string. Non-numerical ID's have characters other than
|
2100
|
+
[-_A-Za-z0-9] converted to hex. Numerical tag ID's are returned in hex if
|
2101
|
+
the L</HexTagIDs> option is set, otherwise decimal is used. When specifying
|
2102
|
+
a family 7 group name, numerical ID's may be in hex or decimal, and
|
2103
|
+
non-numerical ID's may or may not have characters other than [-_A-Za-z0-9]
|
2104
|
+
converted to hex. Note that unlike other group names, the tag ID's of
|
2105
|
+
family 7 group names are case sensitive (but the leading "ID-" is not).
|
2102
2106
|
|
2103
2107
|
See L</GetAllGroups [static]> for complete lists of group names.
|
2104
2108
|
|
@@ -2255,7 +2259,7 @@ Get list of all group names in specified family.
|
|
2255
2259
|
|
2256
2260
|
=item Inputs:
|
2257
2261
|
|
2258
|
-
0) Group family number (0-
|
2262
|
+
0) Group family number (0-7)
|
2259
2263
|
|
2260
2264
|
=item Return Values:
|
2261
2265
|
|
@@ -2344,12 +2348,16 @@ rational64s, float, double, ifd, unicode, complex, int64u, int64s, ifd64
|
|
2344
2348
|
|
2345
2349
|
=item Family 7 (Tag ID):
|
2346
2350
|
|
2347
|
-
ID-xxx (
|
2348
|
-
leading "0x" if the HexTagIDs option is set,
|
2349
|
-
non-numerical ID's which are not valid in a group name
|
2351
|
+
ID-xxx (Where xxx is the tag ID. Numerical ID's are returned in hex with a
|
2352
|
+
leading "0x" if the HexTagIDs option is set, or decimal otherwise.
|
2353
|
+
Characters in non-numerical ID's which are not valid in a group name are
|
2354
|
+
returned as 2 hex digits.)
|
2350
2355
|
|
2351
2356
|
=back
|
2352
2357
|
|
2358
|
+
Note: This function may also be called as an ExifTool member function to
|
2359
|
+
allow the HexTagIDs option to be set when retrieving family 7 group names.
|
2360
|
+
|
2353
2361
|
=head2 GetDeleteGroups [static]
|
2354
2362
|
|
2355
2363
|
Get list of all deletable group names.
|
@@ -2367,14 +2375,14 @@ None.
|
|
2367
2375
|
A list of deletable group names in alphabetical order. The current list of
|
2368
2376
|
deletable group names is:
|
2369
2377
|
|
2370
|
-
AFCP, APP0, APP1, APP10, APP11, APP12, APP13, APP14, APP15, APP2,
|
2371
|
-
APP4, APP5, APP6, APP7, APP8, APP9,
|
2372
|
-
|
2373
|
-
|
2374
|
-
|
2375
|
-
NikonCapture, Other, PDF, PDF-update,
|
2376
|
-
Photoshop,
|
2377
|
-
Video, XML, XML-*, XMP, XMP-*
|
2378
|
+
Adobe, AFCP, APP0, APP1, APP10, APP11, APP12, APP13, APP14, APP15, APP2,
|
2379
|
+
APP3, APP4, APP5, APP6, APP7, APP8, APP9, Audio, Author, Camera, CanonVRD,
|
2380
|
+
CIFF, Document, Ducky, EXIF, ExifIFD, ExifTool, File, FlashPix, FotoStation,
|
2381
|
+
GlobParamIFD, GPS, ICC_Profile, IFD0, IFD1, Image, Insta360, InteropIFD,
|
2382
|
+
IPTC, ItemList, JFIF, Jpeg2000, Keys, Location, MakerNotes, Meta, MetaIFD,
|
2383
|
+
Microsoft, MIE, MPF, NikonCapture, Other, PDF, PDF-update, PhotoMechanic,
|
2384
|
+
Photoshop, PNG, PNG-pHYs, Preview, PrintIM, Printing, QuickTime, RMETA,
|
2385
|
+
RSRC, SubIFD, Time, Trailer, UserData, Video, XML, XML-*, XMP, XMP-*
|
2378
2386
|
|
2379
2387
|
To schedule a group for deletion, call L</SetNewValue> with a tag name like
|
2380
2388
|
'EXIF:*' and an undefined tag value.
|
@@ -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.05';
|
19
19
|
|
20
20
|
# Apple iPhone metadata (ref PH)
|
21
21
|
%Image::ExifTool::Apple::Main = (
|
@@ -72,7 +72,8 @@ $VERSION = '1.04';
|
|
72
72
|
# 0x000f - int32s: 2,3
|
73
73
|
# 0x0010 - int32s: 1
|
74
74
|
0x0011 => {
|
75
|
-
Name => '
|
75
|
+
Name => 'MediaGroupUUID', #NealKrawetz private communication
|
76
|
+
# (changed in 12.19 from Name => 'ContentIdentifier', #forum8750)
|
76
77
|
Writable => 'string',
|
77
78
|
},
|
78
79
|
# 0x0014 - int32s: 1,2,3,4,5 (iPhone 6s, iOS 6.1)
|
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
|
|
35
35
|
use Image::ExifTool::Validate;
|
36
36
|
use Image::ExifTool::MacOS;
|
37
37
|
|
38
|
-
$VERSION = '3.
|
38
|
+
$VERSION = '3.44';
|
39
39
|
@ISA = qw(Exporter);
|
40
40
|
|
41
41
|
sub NumbersFirst($$);
|
@@ -141,6 +141,9 @@ my %formatOK = (
|
|
141
141
|
signed => 1,
|
142
142
|
unsigned => 1,
|
143
143
|
utf8 => 1,
|
144
|
+
Unicode => 1, # (Microsoft Xtra)
|
145
|
+
GUID => 1, # (Microsoft Xtra)
|
146
|
+
vt_filetime => 1, # (Microsoft Xtra)
|
144
147
|
);
|
145
148
|
|
146
149
|
# Descriptions for the TagNames documentation
|
@@ -431,11 +434,13 @@ L<UserData|Image::ExifTool::TagNames/QuickTime UserData Tags>, and
|
|
431
434
|
finally in L<Keys|Image::ExifTool::TagNames/QuickTime Keys Tags>,
|
432
435
|
but this order may be changed by setting the PREFERRED level of the
|
433
436
|
appropriate table in the config file (see
|
434
|
-
L<example.config|../config.html#PREF> in the full distribution for
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
437
|
+
L<example.config|../config.html#PREF> in the full distribution for an
|
438
|
+
example). Note that some tags with the same name but different ID's may
|
439
|
+
exist in the same location, but the family 7 group names may be used to
|
440
|
+
differentiate these. ExifTool currently writes only top-level metadata in
|
441
|
+
QuickTime-based files; it extracts other track-specific and timed metadata,
|
442
|
+
but can not yet edit tags in these locations (with the exception of
|
443
|
+
track-level date/time tags).
|
439
444
|
|
440
445
|
Alternate language tags may be accessed for
|
441
446
|
L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> and
|
@@ -460,8 +465,8 @@ local time when extracting.
|
|
460
465
|
|
461
466
|
When writing string-based date/time tags, the system time zone is added if
|
462
467
|
the PrintConv option is enabled and no time zone is specified. This is
|
463
|
-
because Apple software may display
|
464
|
-
|
468
|
+
because Apple software may display crazy values if the time zone is missing
|
469
|
+
for some tags.
|
465
470
|
|
466
471
|
See
|
467
472
|
L<https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/>
|
@@ -699,10 +704,14 @@ my %shortcutNotes = (
|
|
699
704
|
large binary data tags which may be excluded to reduce memory usage if
|
700
705
|
memory limitations are a problem
|
701
706
|
},
|
707
|
+
'ls-l' => q{
|
708
|
+
mimics columns shown by Unix "ls -l" command. Includes some tags which are
|
709
|
+
extracted only if the API L<SystemTags|../ExifTool.html#SystemTags> option
|
710
|
+
is enabled
|
711
|
+
},
|
702
712
|
);
|
703
713
|
|
704
|
-
|
705
|
-
# same thing for RIFF INFO tags found in the EXIF spec
|
714
|
+
# lookup for RIFF INFO tags which are found in the EXIF spec
|
706
715
|
my %riffSpec = (
|
707
716
|
IARL => 1, ICRD => 1, IGNR => 1, IPLT => 1, ISRC => 1,
|
708
717
|
IART => 1, ICRP => 1, IKEY => 1, IPRD => 1, ISRF => 1,
|
@@ -1320,6 +1329,7 @@ TagID: foreach $tagID (@keys) {
|
|
1320
1329
|
my $count = $$tagInfo{Count} || 1;
|
1321
1330
|
# adjust count to Writable size if different than Format
|
1322
1331
|
if ($writable and $format and $writable ne $format and
|
1332
|
+
$writable ne 'string' and $format ne 'string' and
|
1323
1333
|
$Image::ExifTool::Exif::formatNumber{$writable} and
|
1324
1334
|
$Image::ExifTool::Exif::formatNumber{$format})
|
1325
1335
|
{
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
88
88
|
sub ProcessExifInfo($$$);
|
89
89
|
sub SwapWords($);
|
90
90
|
|
91
|
-
$VERSION = '4.
|
91
|
+
$VERSION = '4.46';
|
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)
|
@@ -589,6 +589,8 @@ $VERSION = '4.44';
|
|
589
589
|
61182.18 => 'Canon RF 100-500mm F4.5-7.1L IS USM',
|
590
590
|
61182.19 => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF1.4x',
|
591
591
|
61182.20 => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF2x',
|
592
|
+
61182.21 => 'Canon RF 70-200mm F4L IS USM', #42
|
593
|
+
61182.22 => 'Canon RF 50mm F1.8 STM', #42
|
592
594
|
65535 => 'n/a',
|
593
595
|
);
|
594
596
|
|
@@ -945,6 +947,7 @@ $VERSION = '4.44';
|
|
945
947
|
0x80000437 => 'EOS 90D', #IB
|
946
948
|
0x80000453 => 'EOS R6', #PH
|
947
949
|
0x80000467 => 'PowerShot ZOOM',
|
950
|
+
0x80000468 => 'EOS M50 Mark II / Kiss M2', #IB
|
948
951
|
0x80000520 => 'EOS D2000C', #IB
|
949
952
|
0x80000560 => 'EOS D6000C', #PH (guess)
|
950
953
|
);
|
@@ -6754,6 +6757,8 @@ my %ciMaxFocal = (
|
|
6754
6757
|
275 => 'Canon RF 100-500mm F4.5-7.1L IS USM',
|
6755
6758
|
276 => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF1.4x',
|
6756
6759
|
277 => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF2x',
|
6760
|
+
278 => 'Canon RF 70-200mm F4L IS USM', #42
|
6761
|
+
280 => 'Canon RF 50mm F1.8 STM', #42
|
6757
6762
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
6758
6763
|
},
|
6759
6764
|
},
|
@@ -15,7 +15,7 @@ use Image::ExifTool::Exif;
|
|
15
15
|
use Image::ExifTool::XMP;
|
16
16
|
use Image::ExifTool::GPS;
|
17
17
|
|
18
|
-
$VERSION = '1.
|
18
|
+
$VERSION = '1.04';
|
19
19
|
|
20
20
|
my %convFloat2 = (
|
21
21
|
PrintConv => 'sprintf("%+.2f", $val)',
|
@@ -90,20 +90,20 @@ my %convFloat2 = (
|
|
90
90
|
Writable => 'real',
|
91
91
|
Avoid => 1,
|
92
92
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
|
93
|
-
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1)',
|
93
|
+
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lat")',
|
94
94
|
},
|
95
95
|
GpsLongtitude => { # (sic)
|
96
96
|
Name => 'GPSLongtitude',
|
97
97
|
Writable => 'real',
|
98
98
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
|
99
|
-
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1)',
|
99
|
+
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lon")',
|
100
100
|
},
|
101
101
|
GpsLongitude => { #PH (NC)
|
102
102
|
Name => 'GPSLongitude',
|
103
103
|
Writable => 'real',
|
104
104
|
Avoid => 1,
|
105
105
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
|
106
|
-
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1)',
|
106
|
+
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lon")',
|
107
107
|
},
|
108
108
|
FlightXSpeed => { Writable => 'real' },
|
109
109
|
FlightYSpeed => { Writable => 'real' },
|
@@ -124,13 +124,13 @@ my %convFloat2 = (
|
|
124
124
|
Name => 'Latitude',
|
125
125
|
Writable => 'real',
|
126
126
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
|
127
|
-
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1)',
|
127
|
+
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lat")',
|
128
128
|
},
|
129
129
|
Longitude => {
|
130
130
|
Name => 'Longitude',
|
131
131
|
Writable => 'real',
|
132
132
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
|
133
|
-
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1)',
|
133
|
+
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lon")',
|
134
134
|
},
|
135
135
|
);
|
136
136
|
|
@@ -56,7 +56,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
|
|
56
56
|
use Image::ExifTool qw(:DataAccess :Utils);
|
57
57
|
use Image::ExifTool::MakerNotes;
|
58
58
|
|
59
|
-
$VERSION = '4.
|
59
|
+
$VERSION = '4.33';
|
60
60
|
|
61
61
|
sub ProcessExif($$$);
|
62
62
|
sub WriteExif($$$);
|
@@ -1452,6 +1452,7 @@ my %opcodeInfo = (
|
|
1452
1452
|
1 => 'Sony Uncompressed 12-bit RAW', #IB
|
1453
1453
|
2 => 'Sony Compressed RAW', # (lossy, ref IB)
|
1454
1454
|
3 => 'Sony Lossless Compressed RAW', #IB
|
1455
|
+
4 => 'Sony Lossless Compressed RAW 2', #JR (ILCE-1)
|
1455
1456
|
},
|
1456
1457
|
},
|
1457
1458
|
# 0x7001 - int16u[1] (in SubIFD of Sony ARW images) - values: 0,1
|
@@ -1472,6 +1473,7 @@ my %opcodeInfo = (
|
|
1472
1473
|
PrintConv => {
|
1473
1474
|
256 => 'Off',
|
1474
1475
|
257 => 'Auto',
|
1476
|
+
272 => 'Auto (ILCE-1)', #JR
|
1475
1477
|
511 => 'No correction params available',
|
1476
1478
|
},
|
1477
1479
|
},
|
@@ -5796,7 +5798,8 @@ sub ProcessExif($$$)
|
|
5796
5798
|
$numEntries = Get16u($dataPt, $dirStart);
|
5797
5799
|
} else {
|
5798
5800
|
$et->Warn("Bad $dir directory", $inMakerNotes);
|
5799
|
-
return 0 unless $inMakerNotes and $dirLen >= 14
|
5801
|
+
return 0 unless $inMakerNotes and $dirLen >= 14 and $dirStart >= 0 and
|
5802
|
+
$dirStart + $dirLen <= length($$dataPt);
|
5800
5803
|
$dirSize = $dirLen;
|
5801
5804
|
$numEntries = int(($dirSize - 2) / 12); # read what we can
|
5802
5805
|
Set16u($numEntries, $dataPt, $dirStart);
|
@@ -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.02';
|
18
18
|
|
19
19
|
# FITS tags (ref 1)
|
20
20
|
%Image::ExifTool::FITS::Main = (
|
@@ -36,6 +36,10 @@ $VERSION = '1.00';
|
|
36
36
|
'TIME-OBS'=> { Name => 'ObservationTime', Groups => { 2 => 'Time' } },
|
37
37
|
'DATE-END'=> { Name => 'ObservationDateEnd', Groups => { 2 => 'Time' } },
|
38
38
|
'TIME-END'=> { Name => 'ObservationTimeEnd', Groups => { 2 => 'Time' } },
|
39
|
+
COMMENT => { Name => 'Comment', PrintConv => '$val =~ s/^ +//; $val',
|
40
|
+
Notes => 'leading spaces are removed if L<PrintConv|../ExifTool.html#PrintConv> is enabled' },
|
41
|
+
HISTORY => { Name => 'History', PrintConv => '$val =~ s/^ +//; $val',
|
42
|
+
Notes => 'leading spaces are removed if L<PrintConv|../ExifTool.html#PrintConv> is enabled' },
|
39
43
|
);
|
40
44
|
|
41
45
|
#------------------------------------------------------------------------------
|
@@ -67,7 +71,14 @@ sub ProcessFITS($$)
|
|
67
71
|
last if $key eq 'END';
|
68
72
|
# make sure the key is valid
|
69
73
|
$key =~ /^[-_A-Z0-9]*$/ or $et->Warn('Format error in FITS header'), last;
|
70
|
-
|
74
|
+
if ($key eq 'COMMENT' or $key eq 'HISTORY') {
|
75
|
+
my $val = substr($buff, 8); # comments start in column 9
|
76
|
+
$val =~ s/ +$//; # remove trailing spaces
|
77
|
+
$et->HandleTag($tagTablePtr, $key, $val);
|
78
|
+
next;
|
79
|
+
}
|
80
|
+
# ignore other lines that aren't tags
|
81
|
+
next unless substr($buff,8,2) eq '= ';
|
71
82
|
# save tag name (avoiding potential conflict with ExifTool variables)
|
72
83
|
$tag = $Image::ExifTool::specialTags{$key} ? "_$key" : $key;
|
73
84
|
# add to tag table if necessary
|
@@ -12,13 +12,12 @@ use strict;
|
|
12
12
|
use vars qw($VERSION);
|
13
13
|
use Image::ExifTool::Exif;
|
14
14
|
|
15
|
-
$VERSION = '1.
|
15
|
+
$VERSION = '1.53';
|
16
16
|
|
17
17
|
my %coordConv = (
|
18
18
|
ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)',
|
19
19
|
ValueConvInv => 'Image::ExifTool::GPS::ToDMS($self, $val)',
|
20
20
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)',
|
21
|
-
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val)',
|
22
21
|
);
|
23
22
|
|
24
23
|
%Image::ExifTool::GPS::Main = (
|
@@ -41,7 +40,7 @@ my %coordConv = (
|
|
41
40
|
Notes => q{
|
42
41
|
tags 0x0001-0x0006 used for camera location according to MWG 2.0. ExifTool
|
43
42
|
will also accept a number when writing GPSLatitudeRef, positive for north
|
44
|
-
latitudes or negative for south, or a string
|
43
|
+
latitudes or negative for south, or a string containing N, North, S or South
|
45
44
|
},
|
46
45
|
Count => 2,
|
47
46
|
PrintConv => {
|
@@ -50,7 +49,7 @@ my %coordConv = (
|
|
50
49
|
OTHER => sub {
|
51
50
|
my ($val, $inv) = @_;
|
52
51
|
return undef unless $inv;
|
53
|
-
return uc $
|
52
|
+
return uc $2 if $val =~ /(^|[^A-Z])([NS])(orth|outh)?\b/i;
|
54
53
|
return $1 eq '-' ? 'S' : 'N' if $val =~ /([-+]?)\d+/;
|
55
54
|
return undef;
|
56
55
|
},
|
@@ -63,6 +62,7 @@ my %coordConv = (
|
|
63
62
|
Writable => 'rational64u',
|
64
63
|
Count => 3,
|
65
64
|
%coordConv,
|
65
|
+
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val,undef,"lat")',
|
66
66
|
},
|
67
67
|
0x0003 => {
|
68
68
|
Name => 'GPSLongitudeRef',
|
@@ -70,7 +70,7 @@ my %coordConv = (
|
|
70
70
|
Count => 2,
|
71
71
|
Notes => q{
|
72
72
|
ExifTool will also accept a number when writing this tag, positive for east
|
73
|
-
longitudes or negative for west, or a string
|
73
|
+
longitudes or negative for west, or a string containing E, East, W or West
|
74
74
|
},
|
75
75
|
PrintConv => {
|
76
76
|
# extract E/W if written from Composite:GPSLongitude
|
@@ -78,7 +78,7 @@ my %coordConv = (
|
|
78
78
|
OTHER => sub {
|
79
79
|
my ($val, $inv) = @_;
|
80
80
|
return undef unless $inv;
|
81
|
-
return uc $
|
81
|
+
return uc $2 if $val =~ /(^|[^A-Z])([EW])(ast|est)?\b/i;
|
82
82
|
return $1 eq '-' ? 'W' : 'E' if $val =~ /([-+]?)\d+/;
|
83
83
|
return undef;
|
84
84
|
},
|
@@ -91,6 +91,7 @@ my %coordConv = (
|
|
91
91
|
Writable => 'rational64u',
|
92
92
|
Count => 3,
|
93
93
|
%coordConv,
|
94
|
+
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val,undef,"lon")',
|
94
95
|
},
|
95
96
|
0x0005 => {
|
96
97
|
Name => 'GPSAltitudeRef',
|
@@ -238,6 +239,7 @@ my %coordConv = (
|
|
238
239
|
Writable => 'rational64u',
|
239
240
|
Count => 3,
|
240
241
|
%coordConv,
|
242
|
+
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val,undef,"lat")',
|
241
243
|
},
|
242
244
|
0x0015 => {
|
243
245
|
Name => 'GPSDestLongitudeRef',
|
@@ -250,6 +252,7 @@ my %coordConv = (
|
|
250
252
|
Writable => 'rational64u',
|
251
253
|
Count => 3,
|
252
254
|
%coordConv,
|
255
|
+
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val,undef,"lon")',
|
253
256
|
},
|
254
257
|
0x0017 => {
|
255
258
|
Name => 'GPSDestBearingRef',
|
@@ -529,18 +532,26 @@ sub ToDMS($$;$$)
|
|
529
532
|
#------------------------------------------------------------------------------
|
530
533
|
# Convert to decimal degrees
|
531
534
|
# Inputs: 0) a string containing 1-3 decimal numbers and any amount of other garbage
|
532
|
-
# 1) true if value should be negative if coordinate ends in 'S' or 'W'
|
533
|
-
#
|
534
|
-
|
535
|
+
# 1) true if value should be negative if coordinate ends in 'S' or 'W',
|
536
|
+
# 2) 'lat' or 'lon' to extract lat or lon from GPSCoordinates string
|
537
|
+
# Returns: Coordinate in degrees, or '' on error
|
538
|
+
sub ToDegrees($;$$)
|
535
539
|
{
|
536
|
-
my ($val, $doSign) = @_;
|
540
|
+
my ($val, $doSign, $coord) = @_;
|
537
541
|
return '' if $val =~ /\b(inf|undef)\b/; # ignore invalid values
|
542
|
+
# use only lat or lon part of combined GPSCoordinates inputs
|
543
|
+
if ($coord and ($coord eq 'lat' or $coord eq 'lon') and
|
544
|
+
# (two formatted coordinate values with cardinal directions, separated by a comma)
|
545
|
+
$val =~ /^(.*(?:N(?:orth)?|S(?:outh)?)),\s*(.*(?:E(?:ast)?|W(?:est)?))$/i)
|
546
|
+
{
|
547
|
+
$val = $coord eq 'lat' ? $1 : $2;
|
548
|
+
}
|
538
549
|
# extract decimal or floating point values out of any other garbage
|
539
550
|
my ($d, $m, $s) = ($val =~ /((?:[+-]?)(?=\d|\.\d)\d*(?:\.\d*)?(?:[Ee][+-]\d+)?)/g);
|
540
551
|
return '' unless defined $d;
|
541
552
|
my $deg = $d + (($m || 0) + ($s || 0)/60) / 60;
|
542
553
|
# make negative if S or W coordinate
|
543
|
-
$deg = -$deg if $doSign ? $val =~ /[^A-Z](S
|
554
|
+
$deg = -$deg if $doSign ? $val =~ /[^A-Z](S(outh)?|W(est)?)\s*$/i : $deg < 0;
|
544
555
|
return $deg;
|
545
556
|
}
|
546
557
|
|