exiftool-vendored.pl 12.76.0 → 12.78.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 +46 -4
- package/bin/MANIFEST +4 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +3 -3
- package/bin/config_files/example.config +10 -2
- package/bin/exiftool +49 -14
- package/bin/lib/Image/ExifTool/Canon.pm +12 -9
- package/bin/lib/Image/ExifTool/CanonVRD.pm +7 -1
- package/bin/lib/Image/ExifTool/Exif.pm +52 -4
- package/bin/lib/Image/ExifTool/GPS.pm +5 -3
- package/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/lib/Image/ExifTool/Geolocation.pm +237 -0
- package/bin/lib/Image/ExifTool/Geotag.pm +1 -1
- package/bin/lib/Image/ExifTool/HtmlDump.pm +2 -1
- package/bin/lib/Image/ExifTool/Import.pm +5 -2
- package/bin/lib/Image/ExifTool/JSON.pm +9 -9
- package/bin/lib/Image/ExifTool/MWG.pm +1 -0
- package/bin/lib/Image/ExifTool/MacOS.pm +19 -4
- package/bin/lib/Image/ExifTool/Nikon.pm +2 -2
- package/bin/lib/Image/ExifTool/Ogg.pm +3 -2
- package/bin/lib/Image/ExifTool/Olympus.pm +3 -1
- package/bin/lib/Image/ExifTool/PDF.pm +5 -5
- package/bin/lib/Image/ExifTool/Pentax.pm +1 -1
- package/bin/lib/Image/ExifTool/QuickTime.pm +183 -11
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +253 -237
- package/bin/lib/Image/ExifTool/TagLookup.pm +77 -3
- package/bin/lib/Image/ExifTool/TagNames.pod +113 -4
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +14 -1
- package/bin/lib/Image/ExifTool/Writer.pl +9 -8
- package/bin/lib/Image/ExifTool.pm +163 -38
- package/bin/lib/Image/ExifTool.pod +44 -25
- package/bin/perl-Image-ExifTool.spec +2 -2
- package/bin/pp_build_exe.args +4 -230
- package/package.json +2 -2
package/bin/Changes
CHANGED
|
@@ -7,6 +7,47 @@ RSS feed: https://exiftool.org/rss.xml
|
|
|
7
7
|
Note: The most recent production release is Version 12.76. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
Mar. 5, 2024 - Version 12.78 - "Geolocation"
|
|
11
|
+
|
|
12
|
+
- Added new Geolocation feature and write-only Geolocate tag
|
|
13
|
+
- Added new config file entry (@Image::ExifTool::UserDefined::Arguments) to
|
|
14
|
+
allow default command-line arguments to be specified
|
|
15
|
+
- Added print conversion for TIFF-EPStandardID
|
|
16
|
+
- Added ability to delete Nextbase information from MP4 videos
|
|
17
|
+
- Decode timed GPS from MP4 videos written by Nextbase software
|
|
18
|
+
- Decode a number of new tags from Nextbase MP4 videos
|
|
19
|
+
- Decode a few new tags from Garmin MP4 videos
|
|
20
|
+
- Extract PreviewJXL images from DNG 1.7 files
|
|
21
|
+
- Generate Validate, ImageDataHash and UserParam tags earlier to allow them to
|
|
22
|
+
be used in UserDefined Composite tags
|
|
23
|
+
- Enhanced the -c option so a minus sign in the format specification prints a
|
|
24
|
+
signed coordinate without a leading "+" for positive numbers
|
|
25
|
+
- Changed formatting of some Accelerometer tags for consistency
|
|
26
|
+
- Changed behaviour of -ee3 option to do a brute-force scan for freeGPS in the
|
|
27
|
+
media data even when referenced by 'gps ' atom
|
|
28
|
+
- Other internal changes to decoding of timed GPS from videos
|
|
29
|
+
- Fixed problem were ExifTool would give up on extracting some types of timed
|
|
30
|
+
GPS from videos after 100 void fixes
|
|
31
|
+
- Fixed bug that could cause runtime error when reading Ogg files
|
|
32
|
+
- Fixed issue where some tags from alternate files using the -fileNUM option
|
|
33
|
+
weren't generated as requested
|
|
34
|
+
- API Changes:
|
|
35
|
+
- Added Geolocation,
|
|
36
|
+
GeolocMaxDist and
|
|
37
|
+
GeolocMinPop API options
|
|
38
|
+
|
|
39
|
+
Feb. 16, 2024 - Version 12.77
|
|
40
|
+
|
|
41
|
+
- Added new Olympus CameraType and LensType value (thanks herb)
|
|
42
|
+
- Added a new Canon Irix LensType
|
|
43
|
+
- Added the ability to delete MacOS XAttrMDItemWhereFroms
|
|
44
|
+
- Decode a few new Canon DPP tags (thanks John Moyer)
|
|
45
|
+
- Decode timed GPS from Adzome GS65H MOV videos
|
|
46
|
+
- Improved handling of XML-unfriendly characters in JSON field names (fixes
|
|
47
|
+
issue where -X option could produce invalid XML when reading JSON with the
|
|
48
|
+
-struct option)
|
|
49
|
+
- Fixed decoding of ShutterCount for Canon G5X-ii CR3 files
|
|
50
|
+
|
|
10
51
|
Jan. 31, 2024 - Version 12.76 (production release)
|
|
11
52
|
|
|
12
53
|
- Properly implement patch of 12.45 to avoid duplicating raw data when writing
|
|
@@ -19,6 +60,7 @@ Jan. 30, 2024 - Version 12.75 (production release)
|
|
|
19
60
|
- CORRUPTION WARNING: Fixed bug introduced in 12.45 which could result in
|
|
20
61
|
corrupted Sony ARW images from some newer models when rewriting lossless
|
|
21
62
|
compressed ARW images which were previously edited by 12.44 or earlier
|
|
63
|
+
(the corruption is repairable, but requires a special version of ExifTool)
|
|
22
64
|
- Added ability to read C2PA JUMBF metadata from PDF and SVG files
|
|
23
65
|
- Added ability to extract JUMBF metadata as a block
|
|
24
66
|
- Added read support for C2PA (JUMBF-format) files
|
|
@@ -547,7 +589,7 @@ Oct. 13, 2022 - Version 12.48
|
|
|
547
589
|
"Z" are actually in Zulu time -- a bit of a mess really)
|
|
548
590
|
- Prevent dynamically-generated Unknown tags from being extracted when the
|
|
549
591
|
-validate option is used without -u
|
|
550
|
-
- Patched to better handle irregular timestamps in streaming GPS of
|
|
592
|
+
- Patched to better handle irregular timestamps in streaming GPS of Nextbase
|
|
551
593
|
dashcam videos
|
|
552
594
|
- Fixed incompatibility with Sigma Photo Pro which could result in Sigma Photo
|
|
553
595
|
Pro corrupting an ExifTool-edited X3F image (the section length in the
|
|
@@ -1419,7 +1461,7 @@ Mar. 19, 2020 - Version 11.92
|
|
|
1419
1461
|
- Added a new Nikon LensID (thanks Wolfgang Exler)
|
|
1420
1462
|
- Decode a few new Leica tags (thanks Tim Gray)
|
|
1421
1463
|
- Decode AccelerometerData from Samsung Gear 360 videos
|
|
1422
|
-
- Fixed a couple of problems decoding timed GPS metadata from
|
|
1464
|
+
- Fixed a couple of problems decoding timed GPS metadata from Nextbase dashcam
|
|
1423
1465
|
videos
|
|
1424
1466
|
- Fixed problem where -X option could produce invalid XML when reading
|
|
1425
1467
|
corrupted XMP
|
|
@@ -2308,7 +2350,7 @@ Oct. 16, 2018 - Version 11.14
|
|
|
2308
2350
|
|
|
2309
2351
|
Oct. 9, 2018 - Version 11.13
|
|
2310
2352
|
|
|
2311
|
-
- Decode GPS from
|
|
2353
|
+
- Decode GPS from Nextbase 512G dashcam MOV videos (different than 512GW)
|
|
2312
2354
|
- Added a new Canon LensType (thanks LibRaw)
|
|
2313
2355
|
- Minor improvements to verbose dump of streaming GPS metadata
|
|
2314
2356
|
- Reverted change of version 10.71 which resulted in Windows not recognizing
|
|
@@ -2327,7 +2369,7 @@ Oct. 2, 2018 - Version 11.12
|
|
|
2327
2369
|
- Added a new Sony/Minolta LensType (thanks LibRaw and Jos Roost)
|
|
2328
2370
|
- Added a new Nikon LensID
|
|
2329
2371
|
- Decode a few new Sony SRF2 tags (thanks LibRaw)
|
|
2330
|
-
- Decode GPS from
|
|
2372
|
+
- Decode GPS from Nextbase 512GW dashcam MOV videos
|
|
2331
2373
|
- Validate MS-DOC FIB before extracting contained tags
|
|
2332
2374
|
- Fixed bug extracting GPSSpeed for some dashcam models
|
|
2333
2375
|
|
package/bin/MANIFEST
CHANGED
|
@@ -294,6 +294,8 @@ lib/Image/ExifTool/GIF.pm
|
|
|
294
294
|
lib/Image/ExifTool/GIMP.pm
|
|
295
295
|
lib/Image/ExifTool/GPS.pm
|
|
296
296
|
lib/Image/ExifTool/GeoTiff.pm
|
|
297
|
+
lib/Image/ExifTool/Geolocation.dat
|
|
298
|
+
lib/Image/ExifTool/Geolocation.pm
|
|
297
299
|
lib/Image/ExifTool/Geotag.pm
|
|
298
300
|
lib/Image/ExifTool/GoPro.pm
|
|
299
301
|
lib/Image/ExifTool/H264.pm
|
|
@@ -543,6 +545,7 @@ t/ExifTool_32.out
|
|
|
543
545
|
t/ExifTool_33.out
|
|
544
546
|
t/ExifTool_34.out
|
|
545
547
|
t/ExifTool_35.out
|
|
548
|
+
t/ExifTool_36.out
|
|
546
549
|
t/ExifTool_4.out
|
|
547
550
|
t/ExifTool_5.out
|
|
548
551
|
t/ExifTool_6.out
|
|
@@ -920,6 +923,7 @@ t/Writer_58.out
|
|
|
920
923
|
t/Writer_59.out
|
|
921
924
|
t/Writer_6.out
|
|
922
925
|
t/Writer_60.out
|
|
926
|
+
t/Writer_61.out
|
|
923
927
|
t/Writer_7.out
|
|
924
928
|
t/Writer_9.out
|
|
925
929
|
t/XISF.t
|
package/bin/META.json
CHANGED
package/bin/META.yml
CHANGED
package/bin/README
CHANGED
|
@@ -20,7 +20,7 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
20
20
|
3GP r/w | DSS r | JP2 r/w | ODT r | RWL r/w
|
|
21
21
|
7Z r | DV r | JPEG r/w | OFR r | RWZ r
|
|
22
22
|
A r | DVB r/w | JSON r | OGG r | RM r
|
|
23
|
-
AA r | DVR-MS r | JXL r
|
|
23
|
+
AA r | DVR-MS r | JXL r/w | OGV r | SEQ r
|
|
24
24
|
AAC r | DYLIB r | K25 r | ONP r | SKETCH r
|
|
25
25
|
AAE r | EIP r | KDC r | OPUS r | SO r
|
|
26
26
|
AAX r/w | EPS r/w | KEY r | ORF r/w | SR2 r/w
|
|
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
|
|
|
109
109
|
terminal window to extract and run ExifTool:
|
|
110
110
|
|
|
111
111
|
cd ~/Desktop
|
|
112
|
-
gzip -dc Image-ExifTool-12.
|
|
113
|
-
cd Image-ExifTool-12.
|
|
112
|
+
gzip -dc Image-ExifTool-12.78.tar.gz | tar -xf -
|
|
113
|
+
cd Image-ExifTool-12.78
|
|
114
114
|
./exiftool t/images/ExifTool.jpg
|
|
115
115
|
|
|
116
116
|
Note: These commands extract meta information from one of the test images.
|
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
# Notes: This example file shows how to define your own shortcuts and
|
|
7
7
|
# add new EXIF, IPTC, XMP, PNG, MIE and Composite tags, as well
|
|
8
8
|
# as how to specify preferred lenses for the LensID tag, and
|
|
9
|
-
# define new file types and default ExifTool
|
|
9
|
+
# define new file types and default ExifTool API options and
|
|
10
|
+
# command-line arguments.
|
|
10
11
|
#
|
|
11
12
|
# Note that unknown tags may be extracted even if they aren't
|
|
12
13
|
# defined, but tags must be defined to be written. Also note
|
|
@@ -345,7 +346,7 @@ use Image::ExifTool::MIE;
|
|
|
345
346
|
use Image::ExifTool::QuickTime;
|
|
346
347
|
$Image::ExifTool::QuickTime::Keys{PREFERRED} = 3;
|
|
347
348
|
|
|
348
|
-
# Specify default ExifTool
|
|
349
|
+
# Specify default ExifTool API options
|
|
349
350
|
# (see the Options function documentation for available options)
|
|
350
351
|
%Image::ExifTool::UserDefined::Options = (
|
|
351
352
|
CoordFormat => '%.6f', # change default GPS coordinate format
|
|
@@ -354,5 +355,12 @@ $Image::ExifTool::QuickTime::Keys{PREFERRED} = 3;
|
|
|
354
355
|
RequestAll => 3, # request additional tags not normally generated
|
|
355
356
|
);
|
|
356
357
|
|
|
358
|
+
# Specify default exiftool command-line arguments
|
|
359
|
+
# - inserted before all other options except -config
|
|
360
|
+
# - applies to all -execute'd commands
|
|
361
|
+
@Image::ExifTool::UserDefined::Arguments = (
|
|
362
|
+
'-i', 'HIDDEN', # ignore hidden files by default (names beginning with ".")
|
|
363
|
+
);
|
|
364
|
+
|
|
357
365
|
#------------------------------------------------------------------------------
|
|
358
366
|
1; #end
|
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.78';
|
|
15
15
|
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
17
17
|
my $exePath;
|
|
@@ -166,6 +166,7 @@ my $filtered; # flag indicating file was filtered by name
|
|
|
166
166
|
my $filterFlag; # file filter flag (0x01=deny extensions, 0x02=allow extensions, 0x04=add ext)
|
|
167
167
|
my $fixLen; # flag to fix description lengths when writing alternate languages
|
|
168
168
|
my $forcePrint; # string to use for missing tag values (undef to not print them)
|
|
169
|
+
my $geoOnly; # flag to extract Geolocation tags only
|
|
169
170
|
my $helped; # flag to avoid printing help if no tags specified
|
|
170
171
|
my $html; # flag for html-formatted output (2=html dump)
|
|
171
172
|
my $interrupted; # flag set if CTRL-C is pressed during a critical process
|
|
@@ -490,6 +491,7 @@ undef $fileHeader;
|
|
|
490
491
|
undef $filtered;
|
|
491
492
|
undef $fixLen;
|
|
492
493
|
undef $forcePrint;
|
|
494
|
+
undef $geoOnly;
|
|
493
495
|
undef $ignoreHidden;
|
|
494
496
|
undef $joinLists;
|
|
495
497
|
undef $langOpt;
|
|
@@ -587,6 +589,11 @@ if (not $preserveTime and $^O eq 'MSWin32') {
|
|
|
587
589
|
$preserveTime = 2 if eval { require Win32::API } and eval { require Win32API::File };
|
|
588
590
|
}
|
|
589
591
|
|
|
592
|
+
# add user-defined command-line arguments
|
|
593
|
+
if (@Image::ExifTool::UserDefined::Arguments) {
|
|
594
|
+
unshift @ARGV, @Image::ExifTool::UserDefined::Arguments;
|
|
595
|
+
}
|
|
596
|
+
|
|
590
597
|
# parse command-line options in 2 passes...
|
|
591
598
|
# pass 1: set all of our ExifTool options
|
|
592
599
|
# pass 2: print all of our help and informational output (-list, -ver, etc)
|
|
@@ -1414,6 +1421,13 @@ if ($useMWG and not defined $mt->Options('CharsetEXIF')) {
|
|
|
1414
1421
|
$mt->Options(CharsetEXIF => 'UTF8');
|
|
1415
1422
|
}
|
|
1416
1423
|
|
|
1424
|
+
# allow geolocation without input file if set to a position
|
|
1425
|
+
if (not @files and not $outOpt and not @newValues) {
|
|
1426
|
+
my $loc = $mt->Options('Geolocation');
|
|
1427
|
+
# use undocumented feature to input JSON file directly from command line
|
|
1428
|
+
$loc and $loc =~ /,/ and push(@files, qq(\@JSON:{})), $geoOnly = 1;
|
|
1429
|
+
}
|
|
1430
|
+
|
|
1417
1431
|
# print help
|
|
1418
1432
|
unless ((@tags and not $outOpt) or @files or @newValues) {
|
|
1419
1433
|
if ($doGlob and $doGlob == 2) {
|
|
@@ -2113,6 +2127,11 @@ sub GetImageInfo($$)
|
|
|
2113
2127
|
# can't make use of $info if verbose because we must reprocess
|
|
2114
2128
|
# the file anyway to generate the verbose output
|
|
2115
2129
|
undef $info if $verbose or defined $fastCondition;
|
|
2130
|
+
} elsif ($file =~ s/^(\@JSON:)(.*)/$1/) {
|
|
2131
|
+
# read JSON file from command line
|
|
2132
|
+
my $dat = $2;
|
|
2133
|
+
$info = $et->ImageInfo(\$dat, \@foundTags);
|
|
2134
|
+
if ($geoOnly) { /^Geolocation/ or delete $$info{$_} foreach keys %$info }
|
|
2116
2135
|
}
|
|
2117
2136
|
if (defined $deleteOrig) {
|
|
2118
2137
|
Progress($vout, "======== $file") if defined $verbose;
|
|
@@ -2169,7 +2188,7 @@ sub GetImageInfo($$)
|
|
|
2169
2188
|
}
|
|
2170
2189
|
|
|
2171
2190
|
# extract information from this file
|
|
2172
|
-
unless ($file eq '-' or $et->Exists($file)) {
|
|
2191
|
+
unless ($file eq '-' or $et->Exists($file) or $info) {
|
|
2173
2192
|
Warn "Error: File not found - $file\n";
|
|
2174
2193
|
FileNotFound($file);
|
|
2175
2194
|
defined $outfile and close($fp), undef($tmpText), $et->Unlink($outfile);
|
|
@@ -2354,7 +2373,7 @@ sub GetImageInfo($$)
|
|
|
2354
2373
|
# set delimiters for JSON or PHP output
|
|
2355
2374
|
($bra, $ket, $sep) = $json == 1 ? ('{','}',':') : ('Array(',')',' =>');
|
|
2356
2375
|
print $fp ",\n" if $comma;
|
|
2357
|
-
print $fp qq($bra\n "SourceFile"$sep ), EscapeJSON(MyConvertFileName($et,$file));
|
|
2376
|
+
print $fp qq($bra\n "SourceFile"$sep ), EscapeJSON(MyConvertFileName($et,$file),1);
|
|
2358
2377
|
$comma = 1;
|
|
2359
2378
|
$ind = (defined $showGroup and not $allGroup) ? ' ' : ' ';
|
|
2360
2379
|
} elsif ($csv) {
|
|
@@ -3372,7 +3391,22 @@ sub FormatXML($$$)
|
|
|
3372
3391
|
my @keys = $$val{_ordered_keys_} ? @{$$val{_ordered_keys_}} : sort keys %$val;
|
|
3373
3392
|
foreach (@keys) {
|
|
3374
3393
|
# (some variable-namespace XML structure fields may have a different group)
|
|
3375
|
-
my $
|
|
3394
|
+
my ($ns, $tg) = ($grp, $_);
|
|
3395
|
+
if (/^(.*?):(.*)/) {
|
|
3396
|
+
if ($grp eq 'JSON') {
|
|
3397
|
+
$tg =~ tr/:/_/; # colons in JSON structure elements are not namespaces
|
|
3398
|
+
} else {
|
|
3399
|
+
($ns, $tg) = ($1, $2);
|
|
3400
|
+
}
|
|
3401
|
+
}
|
|
3402
|
+
# validate XML attribute name
|
|
3403
|
+
my $name;
|
|
3404
|
+
foreach $name ($ns, $tg) {
|
|
3405
|
+
# make sure name is valid for XML
|
|
3406
|
+
$name =~ tr/-_A-Za-z0-9.//dc;
|
|
3407
|
+
$name = '_' . $name if $name !~ /^[_A-Za-z]/;
|
|
3408
|
+
}
|
|
3409
|
+
my $tok = $ns . ':' . $tg;
|
|
3376
3410
|
$val2 .= "\n$ind <$tok" . FormatXML($$val{$_}, "$ind ", $grp) . "</$tok>";
|
|
3377
3411
|
}
|
|
3378
3412
|
$val = "$val2\n$ind";
|
|
@@ -3515,7 +3549,7 @@ sub PrintCSV()
|
|
|
3515
3549
|
}
|
|
3516
3550
|
|
|
3517
3551
|
#------------------------------------------------------------------------------
|
|
3518
|
-
# Add tag groups from structure fields to a list
|
|
3552
|
+
# Add tag groups from structure fields to a list for xmlns
|
|
3519
3553
|
# Inputs: 0) tag value, 1) parent group, 2) group hash ref, 3) group list ref
|
|
3520
3554
|
sub AddGroups($$$$)
|
|
3521
3555
|
{
|
|
@@ -3523,7 +3557,7 @@ sub AddGroups($$$$)
|
|
|
3523
3557
|
my ($key, $val2);
|
|
3524
3558
|
if (ref $val eq 'HASH') {
|
|
3525
3559
|
foreach $key (sort keys %$val) {
|
|
3526
|
-
if ($key =~
|
|
3560
|
+
if ($key =~ /^(.*?):/ and not $$groupHash{$1} and $grp ne 'JSON') {
|
|
3527
3561
|
$$groupHash{$1} = $grp;
|
|
3528
3562
|
push @$groupList, $1;
|
|
3529
3563
|
}
|
|
@@ -4655,7 +4689,7 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
4655
4689
|
3GP r/w | DSS r | JP2 r/w | ODT r | RWL r/w
|
|
4656
4690
|
7Z r | DV r | JPEG r/w | OFR r | RWZ r
|
|
4657
4691
|
A r | DVB r/w | JSON r | OGG r | RM r
|
|
4658
|
-
AA r | DVR-MS r | JXL r
|
|
4692
|
+
AA r | DVR-MS r | JXL r/w | OGV r | SEQ r
|
|
4659
4693
|
AAC r | DYLIB r | K25 r | ONP r | SKETCH r
|
|
4660
4694
|
AAE r | EIP r | KDC r | OPUS r | SO r
|
|
4661
4695
|
AAX r/w | EPS r/w | KEY r | ORF r/w | SR2 r/w
|
|
@@ -4824,7 +4858,7 @@ L<Advanced options|/Advanced options>
|
|
|
4824
4858
|
-common_args Define common arguments
|
|
4825
4859
|
-config CFGFILE Specify configuration file name
|
|
4826
4860
|
-echo[NUM] TEXT Echo text to stdout or stderr
|
|
4827
|
-
-efile[NUM][!]
|
|
4861
|
+
-efile[NUM][!] TXTFILE Save names of files with errors
|
|
4828
4862
|
-execute[NUM] Execute multiple commands on one line
|
|
4829
4863
|
-fileNUM ALTFILE Load tags from alternate file
|
|
4830
4864
|
-list_dir List directories, not their contents
|
|
@@ -5216,8 +5250,9 @@ Notes:
|
|
|
5216
5250
|
when copying tags using the B<-tagsFromFile> option.
|
|
5217
5251
|
|
|
5218
5252
|
2) If the hemisphere is known, a reference direction (N, S, E or W) is
|
|
5219
|
-
appended to each printed coordinate, but adding a C<+> to the format
|
|
5220
|
-
specifier (eg. C<%+.6f>) prints a signed coordinate instead.
|
|
5253
|
+
appended to each printed coordinate, but adding a C<+> or C<-> to the format
|
|
5254
|
+
specifier (eg. C<%+.6f> or C<%-.6f>) prints a signed coordinate instead.
|
|
5255
|
+
(C<+> adds a leading "+" for positive coordinates, but C<-> does not.)
|
|
5221
5256
|
|
|
5222
5257
|
3) This print formatting may be disabled with the B<-n> option to extract
|
|
5223
5258
|
coordinates as signed decimal degrees.
|
|
@@ -5605,7 +5640,7 @@ with this command:
|
|
|
5605
5640
|
|
|
5606
5641
|
produces output like this:
|
|
5607
5642
|
|
|
5608
|
-
-- Generated by ExifTool 12.
|
|
5643
|
+
-- Generated by ExifTool 12.78 --
|
|
5609
5644
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5610
5645
|
(f/5.6, 1/60s, ISO 100)
|
|
5611
5646
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -6596,15 +6631,15 @@ respectively) after processing is complete. For B<-echo3> and B<-echo4>,
|
|
|
6596
6631
|
"${status}" may be used in the I<TEXT> string to represent the numerical
|
|
6597
6632
|
exit status of the command (see L</EXIT STATUS>).
|
|
6598
6633
|
|
|
6599
|
-
=item B<-efile>[I<NUM>][!] I<
|
|
6634
|
+
=item B<-efile>[I<NUM>][!] I<TXTFILE>
|
|
6600
6635
|
|
|
6601
6636
|
Save the names of files giving errors (I<NUM> missing or 1), files that were
|
|
6602
6637
|
unchanged (I<NUM> is 2), files that fail the B<-if> condition (I<NUM> is 4),
|
|
6603
6638
|
files that were updated (I<NUM> is 8), files that were created (I<NUM> is
|
|
6604
6639
|
16), or any combination thereof by summing I<NUM> (eg. B<-efile3> is the
|
|
6605
6640
|
same has having both B<-efile> and B<-efile2> options with the same
|
|
6606
|
-
I<
|
|
6607
|
-
but I<
|
|
6641
|
+
I<TXTFILE>). By default, file names are appended to any existing I<TXTFILE>,
|
|
6642
|
+
but I<TXTFILE> is overwritten if an exclamation point is added to the option
|
|
6608
6643
|
(eg. B<-efile!>). Saves the name of the file specified by the B<-srcfile>
|
|
6609
6644
|
option if applicable.
|
|
6610
6645
|
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.74';
|
|
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)
|
|
@@ -203,7 +203,8 @@ $VERSION = '4.73';
|
|
|
203
203
|
52 => 'Canon EF-S 18-55mm f/3.5-5.6 IS II', #PH
|
|
204
204
|
53 => 'Canon EF-S 18-55mm f/3.5-5.6 III', #Jon Charnas
|
|
205
205
|
54 => 'Canon EF-S 55-250mm f/4-5.6 IS II', #47
|
|
206
|
-
60 => 'Irix 11mm f/4', #50
|
|
206
|
+
60 => 'Irix 11mm f/4 or 15mm f/2.4', #50
|
|
207
|
+
60.1 => 'Irix 15mm f/2.4', #forum15655
|
|
207
208
|
63 => 'Irix 30mm F1.4 Dragonfly', #IB
|
|
208
209
|
80 => 'Canon TS-E 50mm f/2.8L Macro', #42
|
|
209
210
|
81 => 'Canon TS-E 90mm f/2.8L Macro', #42
|
|
@@ -4731,6 +4732,7 @@ my %ciMaxFocal = (
|
|
|
4731
4732
|
NOTES => 'CameraInfo tags for the PowerShot G5 X Mark II.',
|
|
4732
4733
|
0x0293 => {
|
|
4733
4734
|
Name => 'ShutterCount',
|
|
4735
|
+
Condition => '$$self{FileType} eq "JPEG"',
|
|
4734
4736
|
Format => 'int32u',
|
|
4735
4737
|
Notes => 'includes electronic + mechanical shutter',
|
|
4736
4738
|
# - advances by 1 for each photo file, regardless of mechanical or electronic shutter
|
|
@@ -4738,26 +4740,27 @@ my %ciMaxFocal = (
|
|
|
4738
4740
|
# - advances for time lapse video files
|
|
4739
4741
|
# - creating a new directory or resetting the counter from the menu doesn't affect this shutter count
|
|
4740
4742
|
},
|
|
4743
|
+
0x0a95 => {
|
|
4744
|
+
Name => 'ShutterCount',
|
|
4745
|
+
Condition => '$$self{FileType} eq "CR3"',
|
|
4746
|
+
Format => 'int32u',
|
|
4747
|
+
Notes => 'includes electronic + mechanical shutter',
|
|
4748
|
+
},
|
|
4741
4749
|
0x0b21 => {
|
|
4742
4750
|
Name => 'DirectoryIndex',
|
|
4751
|
+
Condition => '$$self{FileType} eq "JPEG"',
|
|
4743
4752
|
Groups => { 2 => 'Image' },
|
|
4744
4753
|
Format => 'int32u',
|
|
4745
4754
|
},
|
|
4746
4755
|
0x0b2d => {
|
|
4747
4756
|
Name => 'FileIndex',
|
|
4757
|
+
Condition => '$$self{FileType} eq "JPEG"',
|
|
4748
4758
|
Format => 'int32u',
|
|
4749
4759
|
Groups => { 2 => 'Image' },
|
|
4750
4760
|
Format => 'int32u',
|
|
4751
4761
|
ValueConv => '$val + 1',
|
|
4752
4762
|
ValueConvInv => '$val - 1',
|
|
4753
4763
|
},
|
|
4754
|
-
#0x0b39 => {
|
|
4755
|
-
# Name => 'DirectoryIndex',
|
|
4756
|
-
# Groups => { 2 => 'Image' },
|
|
4757
|
-
# Format => 'int32u',
|
|
4758
|
-
# ValueConv => '$val - 1',
|
|
4759
|
-
# ValueConvInv => '$val + 1',
|
|
4760
|
-
#},
|
|
4761
4764
|
);
|
|
4762
4765
|
|
|
4763
4766
|
# Canon camera information for 70D (MakerNotes tag 0x0d) (ref PH)
|
|
@@ -23,7 +23,7 @@ use vars qw($VERSION);
|
|
|
23
23
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
24
24
|
use Image::ExifTool::Canon;
|
|
25
25
|
|
|
26
|
-
$VERSION = '1.
|
|
26
|
+
$VERSION = '1.38';
|
|
27
27
|
|
|
28
28
|
sub ProcessCanonVRD($$;$);
|
|
29
29
|
sub WriteCanonVRD($$;$);
|
|
@@ -51,6 +51,7 @@ my %vrdFormat = (
|
|
|
51
51
|
8 => 'int32u',
|
|
52
52
|
9 => 'int32s',
|
|
53
53
|
13 => 'double',
|
|
54
|
+
24 => 'int32s', # (rectangle coordinates)
|
|
54
55
|
33 => 'int32u', # (array)
|
|
55
56
|
38 => 'double', # (array)
|
|
56
57
|
# 254 => 'undef', ?
|
|
@@ -1226,6 +1227,11 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
|
1226
1227
|
# 0x20a08 - (unknown picture style settings)
|
|
1227
1228
|
# 0x20a09 - Custom picture style settings
|
|
1228
1229
|
# 0x20a20 - Fine Detail picture style settings
|
|
1230
|
+
0x20b10 => 'DPRAWMicroadjustBackFront', #forum15660
|
|
1231
|
+
0x20b12 => 'DPRAWMicroadjustStrength', #forum15660
|
|
1232
|
+
0x20b20 => 'DPRAWBokehShift', #forum15660
|
|
1233
|
+
0x20b21 => 'DPRAWBokehShiftArea', #PH
|
|
1234
|
+
0x20b30 => 'DPRAWGhostingReductionArea', #forum15660
|
|
1229
1235
|
0x30101 => {
|
|
1230
1236
|
Name => 'CropAspectRatio',
|
|
1231
1237
|
PrintConv => {
|
|
@@ -57,7 +57,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
|
|
|
57
57
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
58
58
|
use Image::ExifTool::MakerNotes;
|
|
59
59
|
|
|
60
|
-
$VERSION = '4.
|
|
60
|
+
$VERSION = '4.51';
|
|
61
61
|
|
|
62
62
|
sub ProcessExif($$$);
|
|
63
63
|
sub WriteExif($$$);
|
|
@@ -593,6 +593,14 @@ my %opcodeInfo = (
|
|
|
593
593
|
OffsetPair => 0x117, # point to associated byte counts
|
|
594
594
|
DataTag => 'OtherImage',
|
|
595
595
|
},
|
|
596
|
+
{
|
|
597
|
+
Condition => '$$self{Compression} and $$self{Compression} eq "52546"', # DNG 1.7 Jpeg XL
|
|
598
|
+
Name => 'PreviewJXLStart',
|
|
599
|
+
IsOffset => 1,
|
|
600
|
+
IsImageData => 1,
|
|
601
|
+
OffsetPair => 0x117, # point to associated byte counts
|
|
602
|
+
DataTag => 'PreviewJXL',
|
|
603
|
+
},
|
|
596
604
|
{
|
|
597
605
|
# (APP1 IFD2 is for Leica JPEG preview)
|
|
598
606
|
Condition => q[
|
|
@@ -687,6 +695,12 @@ my %opcodeInfo = (
|
|
|
687
695
|
OffsetPair => 0x111, # point to associated offset
|
|
688
696
|
DataTag => 'OtherImage',
|
|
689
697
|
},
|
|
698
|
+
{
|
|
699
|
+
Condition => '$$self{Compression} and $$self{Compression} eq "52546"', # DNG 1.7 Jpeg XL
|
|
700
|
+
Name => 'PreviewJXLLength',
|
|
701
|
+
OffsetPair => 0x111, # point to associated offset
|
|
702
|
+
DataTag => 'PreviewJXL',
|
|
703
|
+
},
|
|
690
704
|
{
|
|
691
705
|
# (APP1 IFD2 is for Leica JPEG preview)
|
|
692
706
|
Condition => q[
|
|
@@ -2421,7 +2435,7 @@ my %opcodeInfo = (
|
|
|
2421
2435
|
Count => -1, # 2, 3 or 4 values
|
|
2422
2436
|
},
|
|
2423
2437
|
0x9215 => 'ExposureIndex', #12
|
|
2424
|
-
0x9216 => 'TIFF-EPStandardID', #12
|
|
2438
|
+
0x9216 => { Name => 'TIFF-EPStandardID', PrintConv => '$val =~ tr/ /./; $val' }, #12
|
|
2425
2439
|
0x9217 => { #12
|
|
2426
2440
|
Name => 'SensingMethod',
|
|
2427
2441
|
Groups => { 2 => 'Camera' },
|
|
@@ -2711,7 +2725,7 @@ my %opcodeInfo = (
|
|
|
2711
2725
|
Count => 2,
|
|
2712
2726
|
},
|
|
2713
2727
|
0xa215 => { Name => 'ExposureIndex', Writable => 'rational64u' },
|
|
2714
|
-
0xa216 => 'TIFF-EPStandardID',
|
|
2728
|
+
0xa216 => { Name => 'TIFF-EPStandardID', PrintConv => '$val =~ tr/ /./; $val' },
|
|
2715
2729
|
0xa217 => {
|
|
2716
2730
|
Name => 'SensingMethod',
|
|
2717
2731
|
Groups => { 2 => 'Camera' },
|
|
@@ -4971,6 +4985,39 @@ my %subSecConv = (
|
|
|
4971
4985
|
Image::ExifTool::Exif::ExtractImage($self,$val[0],$val[1],"OtherImage");
|
|
4972
4986
|
},
|
|
4973
4987
|
},
|
|
4988
|
+
PreviewJXL => {
|
|
4989
|
+
Groups => { 0 => 'EXIF', 1 => 'SubIFD', 2 => 'Preview' },
|
|
4990
|
+
Require => {
|
|
4991
|
+
0 => 'PreviewJXLStart',
|
|
4992
|
+
1 => 'PreviewJXLLength',
|
|
4993
|
+
},
|
|
4994
|
+
Desire => {
|
|
4995
|
+
2 => 'PreviewJXLStart (1)',
|
|
4996
|
+
3 => 'PreviewJXLLength (1)',
|
|
4997
|
+
},
|
|
4998
|
+
# retrieve all other JXL images
|
|
4999
|
+
RawConv => q{
|
|
5000
|
+
if ($val[2] and $val[3]) {
|
|
5001
|
+
my $i = 1;
|
|
5002
|
+
for (;;) {
|
|
5003
|
+
my %val = ( 0 => $$val{2}, 1 => $$val{3} );
|
|
5004
|
+
$self->FoundTag($tagInfo, \%val);
|
|
5005
|
+
++$i;
|
|
5006
|
+
$$val{2} = "$$val{0} ($i)";
|
|
5007
|
+
last unless defined $$self{VALUE}{$$val{2}};
|
|
5008
|
+
$$val{3} = "$$val{1} ($i)";
|
|
5009
|
+
last unless defined $$self{VALUE}{$$val{3}};
|
|
5010
|
+
}
|
|
5011
|
+
}
|
|
5012
|
+
@grps = $self->GetGroup($$val{0});
|
|
5013
|
+
my $image = $self->ExtractBinary($val[0], $val[1], 'PreviewJXL');
|
|
5014
|
+
unless ($image =~ /^(Binary data|\xff\x0a|\0\0\0\x0cJXL \x0d\x0a......ftypjxl )/s) {
|
|
5015
|
+
$self->Warn("$tag is not a valid JXL image",1);
|
|
5016
|
+
return undef;
|
|
5017
|
+
}
|
|
5018
|
+
return \$image;
|
|
5019
|
+
},
|
|
5020
|
+
},
|
|
4974
5021
|
PreviewImageSize => {
|
|
4975
5022
|
Require => {
|
|
4976
5023
|
0 => 'PreviewImageWidth',
|
|
@@ -5096,7 +5143,8 @@ my %subSecConv = (
|
|
|
5096
5143
|
GPSLongitudeRef => '(defined $val and $val =~ / (-?)/) ? ($1 ? "W" : "E") : undef',
|
|
5097
5144
|
},
|
|
5098
5145
|
PrintConvInv => q{
|
|
5099
|
-
return undef unless $val =~ /(.*? ?[NS]?), ?(.*? ?[EW]?)
|
|
5146
|
+
return undef unless $val =~ /(.*? ?[NS]?), ?(.*? ?[EW]?)$/ or
|
|
5147
|
+
$val =~ /^\s*(-?\d+(?:\.\d+)?)\s*(-?\d+(?:\.\d+)?)\s*$/;
|
|
5100
5148
|
my ($lat, $lon) = ($1, $2);
|
|
5101
5149
|
require Image::ExifTool::GPS;
|
|
5102
5150
|
$lat = Image::ExifTool::GPS::ToDegrees($lat, 1, "lat");
|
|
@@ -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.56';
|
|
16
16
|
|
|
17
17
|
my %coordConv = (
|
|
18
18
|
ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)',
|
|
@@ -491,7 +491,7 @@ sub PrintTimeStamp($)
|
|
|
491
491
|
sub ToDMS($$;$$)
|
|
492
492
|
{
|
|
493
493
|
my ($et, $val, $doPrintConv, $ref) = @_;
|
|
494
|
-
my ($fmt, @fmt, $num, $sign, $rtnVal, $neg);
|
|
494
|
+
my ($fmt, @fmt, $num, $sign, $minus, $rtnVal, $neg);
|
|
495
495
|
|
|
496
496
|
unless (length $val) {
|
|
497
497
|
# don't convert an empty value
|
|
@@ -503,8 +503,10 @@ sub ToDMS($$;$$)
|
|
|
503
503
|
$val = -$val;
|
|
504
504
|
$ref = {N => 'S', E => 'W'}->{$ref};
|
|
505
505
|
$sign = '-';
|
|
506
|
+
$minus = '-';
|
|
506
507
|
} else {
|
|
507
508
|
$sign = '+';
|
|
509
|
+
$minus = '';
|
|
508
510
|
}
|
|
509
511
|
$ref = " $ref" unless $doPrintConv and $doPrintConv eq '2';
|
|
510
512
|
} else {
|
|
@@ -522,7 +524,7 @@ sub ToDMS($$;$$)
|
|
|
522
524
|
$fmt = q{%d deg %d' %.2f"} . $ref;
|
|
523
525
|
} elsif ($ref) {
|
|
524
526
|
# use signed value instead of reference direction if specified
|
|
525
|
-
$fmt =~ s/%\+/$sign%/g or $fmt .= $ref;
|
|
527
|
+
$fmt =~ s/%\+/$sign%/g or $fmt =~ s/%-/$minus%/g or $fmt .= $ref;
|
|
526
528
|
} else {
|
|
527
529
|
$fmt =~ s/%\+/%/g; # don't know sign, so don't print it
|
|
528
530
|
}
|
|
Binary file
|