exiftool-vendored.exe 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/exiftool_files/Changes +46 -4
- package/bin/exiftool_files/README +3 -3
- package/bin/exiftool_files/config_files/example.config +10 -2
- package/bin/exiftool_files/exiftool.pl +50 -14
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +12 -9
- package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +7 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +52 -4
- package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +5 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.pm +237 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/HtmlDump.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Import.pm +5 -2
- package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +9 -9
- package/bin/exiftool_files/lib/Image/ExifTool/MWG.pm +1 -0
- package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +19 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Ogg.pm +3 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +3 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +5 -5
- package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +183 -11
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +253 -237
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +77 -3
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +113 -4
- package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +14 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +9 -8
- package/bin/exiftool_files/lib/Image/ExifTool.pm +163 -38
- package/bin/exiftool_files/lib/Image/ExifTool.pod +44 -25
- package/package.json +3 -3
|
@@ -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
|
|
|
@@ -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
|
|
@@ -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;
|
|
@@ -158,6 +158,7 @@ my $filtered; # flag indicating file was filtered by name
|
|
|
158
158
|
my $filterFlag; # file filter flag (0x01=deny extensions, 0x02=allow extensions, 0x04=add ext)
|
|
159
159
|
my $fixLen; # flag to fix description lengths when writing alternate languages
|
|
160
160
|
my $forcePrint; # string to use for missing tag values (undef to not print them)
|
|
161
|
+
my $geoOnly; # flag to extract Geolocation tags only
|
|
161
162
|
my $helped; # flag to avoid printing help if no tags specified
|
|
162
163
|
my $html; # flag for html-formatted output (2=html dump)
|
|
163
164
|
my $interrupted; # flag set if CTRL-C is pressed during a critical process
|
|
@@ -503,6 +504,7 @@ undef $fileHeader;
|
|
|
503
504
|
undef $filtered;
|
|
504
505
|
undef $fixLen;
|
|
505
506
|
undef $forcePrint;
|
|
507
|
+
undef $geoOnly;
|
|
506
508
|
undef $ignoreHidden;
|
|
507
509
|
undef $joinLists;
|
|
508
510
|
undef $langOpt;
|
|
@@ -600,6 +602,11 @@ if (not $preserveTime and $^O eq 'MSWin32') {
|
|
|
600
602
|
$preserveTime = 2 if eval { require Win32::API } and eval { require Win32API::File };
|
|
601
603
|
}
|
|
602
604
|
|
|
605
|
+
# add user-defined command-line arguments
|
|
606
|
+
if (@Image::ExifTool::UserDefined::Arguments) {
|
|
607
|
+
unshift @ARGV, @Image::ExifTool::UserDefined::Arguments;
|
|
608
|
+
}
|
|
609
|
+
|
|
603
610
|
# parse command-line options in 2 passes...
|
|
604
611
|
# pass 1: set all of our ExifTool options
|
|
605
612
|
# pass 2: print all of our help and informational output (-list, -ver, etc)
|
|
@@ -1427,6 +1434,13 @@ if ($useMWG and not defined $mt->Options('CharsetEXIF')) {
|
|
|
1427
1434
|
$mt->Options(CharsetEXIF => 'UTF8');
|
|
1428
1435
|
}
|
|
1429
1436
|
|
|
1437
|
+
# allow geolocation without input file if set to a position
|
|
1438
|
+
if (not @files and not $outOpt and not @newValues) {
|
|
1439
|
+
my $loc = $mt->Options('Geolocation');
|
|
1440
|
+
# use undocumented feature to input JSON file directly from command line
|
|
1441
|
+
$loc and $loc =~ /,/ and push(@files, qq(\@JSON:{})), $geoOnly = 1;
|
|
1442
|
+
}
|
|
1443
|
+
|
|
1430
1444
|
# print help
|
|
1431
1445
|
unless ((@tags and not $outOpt) or @files or @newValues) {
|
|
1432
1446
|
if ($doGlob and $doGlob == 2) {
|
|
@@ -2110,6 +2124,11 @@ sub GetImageInfo($$)
|
|
|
2110
2124
|
# can't make use of $info if verbose because we must reprocess
|
|
2111
2125
|
# the file anyway to generate the verbose output
|
|
2112
2126
|
undef $info if $verbose or defined $fastCondition;
|
|
2127
|
+
} elsif ($file =~ s/^(\@JSON:)(.*)/$1/) {
|
|
2128
|
+
# read JSON file from command line
|
|
2129
|
+
my $dat = $2;
|
|
2130
|
+
$info = $et->ImageInfo(\$dat, \@foundTags);
|
|
2131
|
+
if ($geoOnly) { /^Geolocation/ or delete $$info{$_} foreach keys %$info }
|
|
2113
2132
|
}
|
|
2114
2133
|
if (defined $deleteOrig) {
|
|
2115
2134
|
Progress($vout, "======== $file") if defined $verbose;
|
|
@@ -2166,7 +2185,7 @@ sub GetImageInfo($$)
|
|
|
2166
2185
|
}
|
|
2167
2186
|
|
|
2168
2187
|
# extract information from this file
|
|
2169
|
-
unless ($file eq '-' or $et->Exists($file)) {
|
|
2188
|
+
unless ($file eq '-' or $et->Exists($file) or $info) {
|
|
2170
2189
|
Warn "Error: File not found - $file\n";
|
|
2171
2190
|
FileNotFound($file);
|
|
2172
2191
|
defined $outfile and close($fp), undef($tmpText), $et->Unlink($outfile);
|
|
@@ -2351,7 +2370,7 @@ sub GetImageInfo($$)
|
|
|
2351
2370
|
# set delimiters for JSON or PHP output
|
|
2352
2371
|
($bra, $ket, $sep) = $json == 1 ? ('{','}',':') : ('Array(',')',' =>');
|
|
2353
2372
|
print $fp ",\n" if $comma;
|
|
2354
|
-
print $fp qq($bra\n "SourceFile"$sep ), EscapeJSON(MyConvertFileName($et,$file));
|
|
2373
|
+
print $fp qq($bra\n "SourceFile"$sep ), EscapeJSON(MyConvertFileName($et,$file),1);
|
|
2355
2374
|
$comma = 1;
|
|
2356
2375
|
$ind = (defined $showGroup and not $allGroup) ? ' ' : ' ';
|
|
2357
2376
|
} elsif ($csv) {
|
|
@@ -3369,7 +3388,22 @@ sub FormatXML($$$)
|
|
|
3369
3388
|
my @keys = $$val{_ordered_keys_} ? @{$$val{_ordered_keys_}} : sort keys %$val;
|
|
3370
3389
|
foreach (@keys) {
|
|
3371
3390
|
# (some variable-namespace XML structure fields may have a different group)
|
|
3372
|
-
my $
|
|
3391
|
+
my ($ns, $tg) = ($grp, $_);
|
|
3392
|
+
if (/^(.*?):(.*)/) {
|
|
3393
|
+
if ($grp eq 'JSON') {
|
|
3394
|
+
$tg =~ tr/:/_/; # colons in JSON structure elements are not namespaces
|
|
3395
|
+
} else {
|
|
3396
|
+
($ns, $tg) = ($1, $2);
|
|
3397
|
+
}
|
|
3398
|
+
}
|
|
3399
|
+
# validate XML attribute name
|
|
3400
|
+
my $name;
|
|
3401
|
+
foreach $name ($ns, $tg) {
|
|
3402
|
+
# make sure name is valid for XML
|
|
3403
|
+
$name =~ tr/-_A-Za-z0-9.//dc;
|
|
3404
|
+
$name = '_' . $name if $name !~ /^[_A-Za-z]/;
|
|
3405
|
+
}
|
|
3406
|
+
my $tok = $ns . ':' . $tg;
|
|
3373
3407
|
$val2 .= "\n$ind <$tok" . FormatXML($$val{$_}, "$ind ", $grp) . "</$tok>";
|
|
3374
3408
|
}
|
|
3375
3409
|
$val = "$val2\n$ind";
|
|
@@ -3512,7 +3546,7 @@ sub PrintCSV()
|
|
|
3512
3546
|
}
|
|
3513
3547
|
|
|
3514
3548
|
#------------------------------------------------------------------------------
|
|
3515
|
-
# Add tag groups from structure fields to a list
|
|
3549
|
+
# Add tag groups from structure fields to a list for xmlns
|
|
3516
3550
|
# Inputs: 0) tag value, 1) parent group, 2) group hash ref, 3) group list ref
|
|
3517
3551
|
sub AddGroups($$$$)
|
|
3518
3552
|
{
|
|
@@ -3520,7 +3554,7 @@ sub AddGroups($$$$)
|
|
|
3520
3554
|
my ($key, $val2);
|
|
3521
3555
|
if (ref $val eq 'HASH') {
|
|
3522
3556
|
foreach $key (sort keys %$val) {
|
|
3523
|
-
if ($key =~
|
|
3557
|
+
if ($key =~ /^(.*?):/ and not $$groupHash{$1} and $grp ne 'JSON') {
|
|
3524
3558
|
$$groupHash{$1} = $grp;
|
|
3525
3559
|
push @$groupList, $1;
|
|
3526
3560
|
}
|
|
@@ -4663,7 +4697,7 @@ DESCRIPTION
|
|
|
4663
4697
|
3GP r/w | DSS r | JP2 r/w | ODT r | RWL r/w
|
|
4664
4698
|
7Z r | DV r | JPEG r/w | OFR r | RWZ r
|
|
4665
4699
|
A r | DVB r/w | JSON r | OGG r | RM r
|
|
4666
|
-
AA r | DVR-MS r | JXL r
|
|
4700
|
+
AA r | DVR-MS r | JXL r/w | OGV r | SEQ r
|
|
4667
4701
|
AAC r | DYLIB r | K25 r | ONP r | SKETCH r
|
|
4668
4702
|
AAE r | EIP r | KDC r | OPUS r | SO r
|
|
4669
4703
|
AAX r/w | EPS r/w | KEY r | ORF r/w | SR2 r/w
|
|
@@ -4831,7 +4865,7 @@ OPTIONS
|
|
|
4831
4865
|
-common_args Define common arguments
|
|
4832
4866
|
-config CFGFILE Specify configuration file name
|
|
4833
4867
|
-echo[NUM] TEXT Echo text to stdout or stderr
|
|
4834
|
-
-efile[NUM][!]
|
|
4868
|
+
-efile[NUM][!] TXTFILE Save names of files with errors
|
|
4835
4869
|
-execute[NUM] Execute multiple commands on one line
|
|
4836
4870
|
-fileNUM ALTFILE Load tags from alternate file
|
|
4837
4871
|
-list_dir List directories, not their contents
|
|
@@ -5229,8 +5263,10 @@ OPTIONS
|
|
|
5229
5263
|
different when copying tags using the -tagsFromFile option.
|
|
5230
5264
|
|
|
5231
5265
|
2) If the hemisphere is known, a reference direction (N, S, E or W)
|
|
5232
|
-
is appended to each printed coordinate, but adding a "+" to
|
|
5233
|
-
format specifier (eg. "%+.6f") prints a signed
|
|
5266
|
+
is appended to each printed coordinate, but adding a "+" or "-" to
|
|
5267
|
+
the format specifier (eg. "%+.6f" or "%-.6f") prints a signed
|
|
5268
|
+
coordinate instead. ("+" adds a leading "+" for positive
|
|
5269
|
+
coordinates, but "-" does not.)
|
|
5234
5270
|
|
|
5235
5271
|
3) This print formatting may be disabled with the -n option to
|
|
5236
5272
|
extract coordinates as signed decimal degrees.
|
|
@@ -5627,7 +5663,7 @@ OPTIONS
|
|
|
5627
5663
|
|
|
5628
5664
|
produces output like this:
|
|
5629
5665
|
|
|
5630
|
-
-- Generated by ExifTool 12.
|
|
5666
|
+
-- Generated by ExifTool 12.78 --
|
|
5631
5667
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5632
5668
|
(f/5.6, 1/60s, ISO 100)
|
|
5633
5669
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -6601,14 +6637,14 @@ OPTIONS
|
|
|
6601
6637
|
-echo4, "${status}" may be used in the *TEXT* string to represent
|
|
6602
6638
|
the numerical exit status of the command (see "EXIT STATUS").
|
|
6603
6639
|
|
|
6604
|
-
-efile[*NUM*][!] *
|
|
6640
|
+
-efile[*NUM*][!] *TXTFILE*
|
|
6605
6641
|
Save the names of files giving errors (*NUM* missing or 1), files
|
|
6606
6642
|
that were unchanged (*NUM* is 2), files that fail the -if condition
|
|
6607
6643
|
(*NUM* is 4), files that were updated (*NUM* is 8), files that were
|
|
6608
6644
|
created (*NUM* is 16), or any combination thereof by summing *NUM*
|
|
6609
6645
|
(eg. -efile3 is the same has having both -efile and -efile2 options
|
|
6610
|
-
with the same *
|
|
6611
|
-
any existing *
|
|
6646
|
+
with the same *TXTFILE*). By default, file names are appended to
|
|
6647
|
+
any existing *TXTFILE*, but *TXTFILE* is overwritten if an
|
|
6612
6648
|
exclamation point is added to the option (eg. -efile!). Saves the
|
|
6613
6649
|
name of the file specified by the -srcfile option if applicable.
|
|
6614
6650
|
|
|
@@ -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
|