exiftool_vendored 12.39.0 → 12.41.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +45 -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/arg_files/exif2xmp.args +5 -0
- data/bin/arg_files/xmp2exif.args +6 -0
- data/bin/config_files/acdsee.config +6 -6
- data/bin/config_files/photoshop_paths.config +30 -7
- data/bin/config_files/picasa_faces.config +1 -1
- data/bin/config_files/pix4d.config +2 -2
- data/bin/config_files/tiff_version.config +2 -2
- data/bin/exiftool +52 -21
- data/bin/lib/Image/ExifTool/Canon.pm +78 -4
- data/bin/lib/Image/ExifTool/Exif.pm +44 -20
- data/bin/lib/Image/ExifTool/Geotag.pm +3 -2
- data/bin/lib/Image/ExifTool/MacOS.pm +9 -9
- data/bin/lib/Image/ExifTool/MakerNotes.pm +12 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +39 -12
- data/bin/lib/Image/ExifTool/Olympus.pm +7 -6
- data/bin/lib/Image/ExifTool/QuickTime.pm +9 -5
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +2 -2
- data/bin/lib/Image/ExifTool/Samsung.pm +5 -1
- data/bin/lib/Image/ExifTool/Shortcuts.pm +2 -1
- data/bin/lib/Image/ExifTool/Sony.pm +10 -4
- data/bin/lib/Image/ExifTool/TagLookup.pm +6360 -6354
- data/bin/lib/Image/ExifTool/TagNames.pod +22 -2
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +7 -3
- data/bin/lib/Image/ExifTool/WriteXMP.pl +2 -0
- data/bin/lib/Image/ExifTool/XMP.pm +9 -1
- data/bin/lib/Image/ExifTool/XMPStruct.pl +21 -7
- data/bin/lib/Image/ExifTool.pm +11 -3
- data/bin/lib/Image/ExifTool.pod +7 -6
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 71c2e8314b54966900545a4af41762c9c6d8974544187d914e82eb7c71b4ab3c
|
4
|
+
data.tar.gz: f277eb099be9d35e2979e80ce97629f824acb338059360ca7f41ef15e1d43fbe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7fac789e834098bd6506929bac1aef023b5573d08d67cdda9b521884d1d946bc875e9ff7d19ad3a68d46c098030bb43e14bb7510d7233a5f0f842d5f3c712047
|
7
|
+
data.tar.gz: 3d18856320e32e9c86258212c1ff7c909b388747604f8b7fbe8cf2e001cb12d672affc8986acc82a8c03f1a61ecd447a556b44b63670b659180d5ab2de3664b4
|
data/bin/Changes
CHANGED
@@ -7,6 +7,51 @@ RSS feed: https://exiftool.org/rss.xml
|
|
7
7
|
Note: The most recent production release is Version 12.30. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
9
9
|
|
10
|
+
Apr. 7, 2022 - Version 12.41
|
11
|
+
|
12
|
+
- Added support for "OM SYSTEM" maker notes
|
13
|
+
- Added 2 new Sony LensType values (thanks Jos Roost)
|
14
|
+
- Added some new Canon lenses (thanks LibRaw)
|
15
|
+
- Added a new Nikon LensID (thanks Bert Ligtvoet)
|
16
|
+
- Added a new Canon ContinuousDrive value (thanks Wolfgang Gulcker)
|
17
|
+
- Enhanced -v0 option to also print new file name when renaming, moving or
|
18
|
+
copying a file
|
19
|
+
- Updated xmp2exif.args and exif2xmp.args helper files to reflect the IPTC
|
20
|
+
Photometadata Mapping Guidelines version 2202.1
|
21
|
+
- Made "Invalid Xxx data" a minor warning for MakerNote data
|
22
|
+
- Patched to allow writing of MP4 videos which have other tracks with a
|
23
|
+
missing sample description entry
|
24
|
+
- Patched MacOS version to specify directory for external utilities (setfile,
|
25
|
+
xattr, stat, mdls and osascript from /usr/bin, and tag from /usr/local/bin)
|
26
|
+
- Fixed long-standing problem where Windows version could behave differently
|
27
|
+
for -if conditions containing undefined tags
|
28
|
+
- Fixed problem where -W+! combined with -j or -X produced invalid JSON or XML
|
29
|
+
when processing multiple files
|
30
|
+
- Fixed potential "uninitialized value $time in division" runtime warning when
|
31
|
+
reading MP4 videos
|
32
|
+
|
33
|
+
Feb. 9, 2022 - Version 12.40
|
34
|
+
|
35
|
+
- Added PageCount tag to return the number of pages in a multi-page TIFF
|
36
|
+
- Added a new Nikon LensID (thanks Wolfgang Exler)
|
37
|
+
- Added a few more Sony LensTypes (thanks Jos Roost)
|
38
|
+
- Decode some new Canon tags (thanks Mark Reid)
|
39
|
+
- Decode another Nikon Z9 tag (thanks Warren Hatch)
|
40
|
+
- Decode Nikon NKSC GPSImgDirection (thanks Olaf)
|
41
|
+
- Improved handling of empty XMP structures in lists
|
42
|
+
- Tolerate leading UTF-8 BOM in -geotag log files
|
43
|
+
- Updated photoshop_paths.config to include WorkingPath
|
44
|
+
- Patched to allow writing of MP4 videos which have url tracks with a missing
|
45
|
+
sample description entry
|
46
|
+
- Fixed deep recursion error when reading multi-page TIFF images with more
|
47
|
+
than 100 pages
|
48
|
+
- Fixed potential deep recursion runtime error when writing nested XMP
|
49
|
+
structures
|
50
|
+
- Fixed warning which could be generated when writing new
|
51
|
+
Composite:GPSCoordinates tag
|
52
|
+
- Fixed description of GPR (General Purpose RAW) file type
|
53
|
+
- Fixed typo in the name of a new Nikon tag (thanks Herb)
|
54
|
+
|
10
55
|
Jan. 13, 2022 - Version 12.39
|
11
56
|
|
12
57
|
- Added a new Pentax LensType (thanks Christian Shulz)
|
data/bin/MANIFEST
CHANGED
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/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.41.tar.gz | tar -xf -
|
111
|
+
cd Image-ExifTool-12.41
|
112
112
|
./exiftool t/images/ExifTool.jpg
|
113
113
|
|
114
114
|
Note: These commands extract meta information from one of the test images.
|
data/bin/arg_files/exif2xmp.args
CHANGED
@@ -12,8 +12,10 @@
|
|
12
12
|
# 2013/06/12 - PH Additions for the Exif 2.3 for XMP spec
|
13
13
|
# 2015/01/12 - PH Avoid copying to non-standard namespaces
|
14
14
|
# 2018/05/07 - PH Added support for GPSDestXxxRef tags
|
15
|
+
# 2022/03/31 - PH IPTC Photometadata Mapping Guidelines 2202.1 update
|
15
16
|
#
|
16
17
|
# References: http://www.metadataworkinggroup.org/specs/
|
18
|
+
# https://iptc.org/std/photometadata/documentation/mappingguidelines/
|
17
19
|
#
|
18
20
|
# Notes: 1) The first three arguments copy most of the EXIF and GPS tags to
|
19
21
|
# XMP-exif/XMP-tiff, and the remaining arguments handle tags
|
@@ -22,6 +24,8 @@
|
|
22
24
|
# 2) These arguments will not delete existing XMP tags which are
|
23
25
|
# missing from the EXIF. The XMP tags should be deleted
|
24
26
|
# beforehand if required.
|
27
|
+
#
|
28
|
+
# 3) EXIF:SubjectArea is not currently mapped into XMP-iptcExt:ImageRegion
|
25
29
|
#------------------------------------------------------------------------------
|
26
30
|
-XMP-exif:all < EXIF:all
|
27
31
|
-XMP-exifEX:all < EXIF:all
|
@@ -37,6 +41,7 @@
|
|
37
41
|
-XMP-xmp:CreatorTool < EXIF:Software
|
38
42
|
-XMP-dc:Rights < EXIF:Copyright
|
39
43
|
-XMP-dc:Creator < EXIF:Artist
|
44
|
+
-XMP-iptcExt:DigitalImageGUID < EXIF:DigImageGUID
|
40
45
|
# XMP flash information is translated by the Composite Flash tag
|
41
46
|
-Composite:Flash < EXIF:Flash
|
42
47
|
# overwrite GPS tags which have different formats in XMP
|
data/bin/arg_files/xmp2exif.args
CHANGED
@@ -14,8 +14,10 @@
|
|
14
14
|
# 2016/09/26 - PH Write Composite SubSec tags
|
15
15
|
# 2018/05/07 - PH Added support for GPSDestXxxRef tags
|
16
16
|
# 2021/09/30 - PH Removed erroneous "-" when copying CreatorTool
|
17
|
+
# 2022/03/31 - PH IPTC Photometadata Mapping Guidelines 2202.1 update
|
17
18
|
#
|
18
19
|
# References: http://www.metadataworkinggroup.org/specs/
|
20
|
+
# https://iptc.org/std/photometadata/documentation/mappingguidelines/
|
19
21
|
#
|
20
22
|
# Notes: 1) The first three arguments copy the bulk of the EXIF and GPS
|
21
23
|
# information, and the remaining arguments handle the tags
|
@@ -24,6 +26,8 @@
|
|
24
26
|
# 2) These arguments will not delete existing EXIF tags which are
|
25
27
|
# missing from the XMP. The EXIF tags should be deleted
|
26
28
|
# beforehand if required.
|
29
|
+
#
|
30
|
+
# 3) XMP-iptcExt:ImageRegion is not currently mapped into EXIF:SubjectArea
|
27
31
|
#------------------------------------------------------------------------------
|
28
32
|
-EXIF:all < XMP-exif:all
|
29
33
|
-EXIF:all < XMP-exifEX:all
|
@@ -37,7 +41,9 @@
|
|
37
41
|
-Composite:SubSecModifyDate < XMP-xmp:ModifyDate
|
38
42
|
-EXIF:Software < XMP-xmp:CreatorTool
|
39
43
|
-EXIF:Copyright < XMP-dc:Rights
|
44
|
+
-EXIF:Artist < XMP-plus:ImageCreatorName
|
40
45
|
-EXIF:Artist < XMP-dc:Creator
|
46
|
+
-EXIF:DigImageGUID < XMP-iptcExt:DigitalImageGUID
|
41
47
|
# XMP flash information is translated by the Composite Flash tag
|
42
48
|
-EXIF:Flash < Composite:Flash
|
43
49
|
# generate GPS tags which have been combined into other XMP tags
|
@@ -97,8 +97,8 @@ my %sACDSeeRegionStruct = (
|
|
97
97
|
# new XMP namespaces for ACDSee regions
|
98
98
|
'Image::ExifTool::XMP::Main' => {
|
99
99
|
'acdsee-rs' => { # <-- must be the same as the NAMESPACE prefix
|
100
|
-
SubDirectory => {
|
101
|
-
TagTable => 'Image::ExifTool::UserDefined::ACDSeeRegions'
|
100
|
+
SubDirectory => {
|
101
|
+
TagTable => 'Image::ExifTool::UserDefined::ACDSeeRegions'
|
102
102
|
},
|
103
103
|
},
|
104
104
|
},
|
@@ -147,7 +147,7 @@ my %sACDSeeRegionStruct = (
|
|
147
147
|
},
|
148
148
|
ValueConv => q{
|
149
149
|
my ($rgn, @newRgns);
|
150
|
-
my $rgns = ref $val[0] eq 'ARRAY' ? $val[0] : [ $val[0] ];
|
150
|
+
my $rgns = ref $val[0] eq 'ARRAY' ? $val[0] : [ $val[0] ];
|
151
151
|
foreach $rgn (@$rgns) {
|
152
152
|
my %newRgn = ( Type => 'Face' );
|
153
153
|
if ($$rgn{RegionBoundary} and $$rgn{RegionBoundary}{RbShape} eq 'rectangle') {
|
@@ -220,13 +220,13 @@ my %sACDSeeRegionStruct = (
|
|
220
220
|
# the "Struct" entry defines the structure fields
|
221
221
|
Struct => {
|
222
222
|
# optional structure name (used for warning messages only)
|
223
|
-
STRUCT_NAME => 'ACDSee RegionInfo',
|
223
|
+
STRUCT_NAME => 'ACDSee RegionInfo',
|
224
224
|
RegionList => {
|
225
225
|
FlatName => 'Region',
|
226
226
|
Struct => \%sACDSeeRegionStruct,
|
227
227
|
List => 'Bag',
|
228
228
|
},
|
229
|
-
AppliedToDimensions => {
|
229
|
+
AppliedToDimensions => {
|
230
230
|
FlatName => 'RegionAppliedToDimensions',Struct => \%sACDSeeDimensions },
|
231
231
|
},
|
232
232
|
},
|
@@ -239,7 +239,7 @@ my %sACDSeeRegionStruct = (
|
|
239
239
|
RegionInfoACDSeeAppliedToDimensionsW => 'ACDSeeRegionAppliedToDimensionsW',
|
240
240
|
RegionInfoACDSeeRegionListDLYAreaH => 'ACDSeeRegionDLYAreaH',
|
241
241
|
RegionInfoACDSeeRegionListDLYAreaW => 'ACDSeeRegionDLYAreaW',
|
242
|
-
RegionInfoACDSeeRegionListDLYAreaX => 'ACDSeeRegionDLYAreaX',
|
242
|
+
RegionInfoACDSeeRegionListDLYAreaX => 'ACDSeeRegionDLYAreaX',
|
243
243
|
RegionInfoACDSeeRegionListDLYAreaY => 'ACDSeeRegionDLYAreaY',
|
244
244
|
RegionInfoACDSeeRegionListALGAreaH => 'ACDSeeRegionALGAreaH',
|
245
245
|
RegionInfoACDSeeRegionListALGAreaW => 'ACDSeeRegionALGAreaW',
|
@@ -34,15 +34,15 @@
|
|
34
34
|
# Usage:
|
35
35
|
#
|
36
36
|
# 1) Extract Photoshop path names:
|
37
|
-
#
|
37
|
+
#
|
38
38
|
# exiftool -config photoshop_paths.config -allpaths FILE
|
39
39
|
#
|
40
40
|
# 2) Extract Photoshop path names and anchor points:
|
41
|
-
#
|
41
|
+
#
|
42
42
|
# exiftool -config photoshop_paths.config -userparam anchor -allpaths FILE
|
43
43
|
#
|
44
44
|
# 3) Extract Photoshop path anchor points only:
|
45
|
-
#
|
45
|
+
#
|
46
46
|
# exiftool -config photoshop_paths.config -userparam anchoronly -allpaths FILE
|
47
47
|
#
|
48
48
|
# 4) Copy all Photoshop paths from one file (SRC) to another (DST):
|
@@ -68,6 +68,7 @@
|
|
68
68
|
# subpath respectively
|
69
69
|
# 2017/06/03 - PH Added TotalPathPoints
|
70
70
|
# 2017/07/17 - PH Added UniquePathPoints
|
71
|
+
# 2022/02/03 - PH Added WorkingPath and WorkingPathPix
|
71
72
|
#
|
72
73
|
# References: https://exiftool.org/forum/index.php/topic,1621.0.html
|
73
74
|
# https://exiftool.org/forum/index.php/topic,3910.0.html
|
@@ -77,10 +78,11 @@
|
|
77
78
|
# Print Photoshop path name and/or anchor points
|
78
79
|
# Inputs: 0) reference to Photoshop path data, 1) ExifTool object reference
|
79
80
|
# 2-3) optional image width/height to convert anchor points to pixels
|
81
|
+
# 4) optional path name
|
80
82
|
# Returns: String with name and/or Bezier knot anchor points
|
81
|
-
sub PrintPath(
|
83
|
+
sub PrintPath($$;$$$)
|
82
84
|
{
|
83
|
-
my ($val, $et, $w, $h) = @_;
|
85
|
+
my ($val, $et, $w, $h, $nm) = @_;
|
84
86
|
my ($pos, $name, @rtn);
|
85
87
|
my $len = length($$val) - 26;
|
86
88
|
|
@@ -88,8 +90,9 @@ sub PrintPath($$;$$)
|
|
88
90
|
if ($$val =~ m{.*/#(.{0,255})#/$}s) {
|
89
91
|
$name = $1;
|
90
92
|
$len -= length($1) + 4;
|
93
|
+
$name = $nm if defined $nm and not length $name;
|
91
94
|
} else {
|
92
|
-
$name = '<none>';
|
95
|
+
$name = defined $nm ? $nm : '<none>';
|
93
96
|
}
|
94
97
|
my $anchorOnly = $et->Options(UserParam => 'AnchorOnly');
|
95
98
|
push @rtn, $name unless $anchorOnly;
|
@@ -118,7 +121,7 @@ sub PrintPath($$;$$)
|
|
118
121
|
}
|
119
122
|
|
120
123
|
%Image::ExifTool::Shortcuts::UserDefined = (
|
121
|
-
# create "AllPaths" shortcut for all Photoshop path tags
|
124
|
+
# create "AllPaths" shortcut for all Photoshop path tags (except WorkingPath)
|
122
125
|
AllPaths => [
|
123
126
|
map { sprintf "Path%x", $_ } (0x7d0 .. 0xbb5),
|
124
127
|
],
|
@@ -133,6 +136,14 @@ sub PrintPath($$;$$)
|
|
133
136
|
Name => 'OriginPathInfo',
|
134
137
|
Flags => [ qw(Writable Protected Binary SetResourceName) ],
|
135
138
|
},
|
139
|
+
0x401 => {
|
140
|
+
Name => 'WorkingPath',
|
141
|
+
Flags => [ qw(Writable Protected Binary ConvertBinary SetResourceName) ],
|
142
|
+
PrintConv => sub {
|
143
|
+
my ($val, $et) = @_;
|
144
|
+
PrintPath($val, $et, undef, undef, 'Work Path');
|
145
|
+
},
|
146
|
+
},
|
136
147
|
# generate tags for each of the 998 possible Photoshop paths
|
137
148
|
map { $_ => {
|
138
149
|
Name => sprintf('Path%x', $_),
|
@@ -143,6 +154,7 @@ sub PrintPath($$;$$)
|
|
143
154
|
},
|
144
155
|
'Image::ExifTool::Composite' => {
|
145
156
|
PathCount => {
|
157
|
+
# (PathCount statistics do not include WorkingPath)
|
146
158
|
Desire => {
|
147
159
|
map { $_-0x7d0 => sprintf('Path%x', $_) } (0x7d0 .. 0xbb5),
|
148
160
|
},
|
@@ -180,6 +192,17 @@ sub PrintPath($$;$$)
|
|
180
192
|
Require => 'PathCount',
|
181
193
|
ValueConv => '$$self{TotalPathPoints}',
|
182
194
|
},
|
195
|
+
WorkingPathPix => {
|
196
|
+
Require => {
|
197
|
+
0 => 'ImageWidth',
|
198
|
+
1 => 'ImageHeight',
|
199
|
+
2 => 'WorkingPath',
|
200
|
+
},
|
201
|
+
ValueConv => sub {
|
202
|
+
my ($val, $et) = @_;
|
203
|
+
PrintPath($$val[2], $et, $$val[0], $$val[1], 'Work Path');
|
204
|
+
},
|
205
|
+
},
|
183
206
|
map { sprintf('PathPix%x', $_) => {
|
184
207
|
Require => {
|
185
208
|
0 => 'ImageWidth',
|
@@ -63,7 +63,7 @@
|
|
63
63
|
# 2015/05/12 - PH Minor code tweaks
|
64
64
|
# 2015/10/26 - BKW Round off area sizes to 7 decimal places
|
65
65
|
# 2016/01/18 - BKW Improved rounding algorithm
|
66
|
-
# 2016/05/14 - BKW Increased rounding to 9 decimal places (Max Picasa accepts),
|
66
|
+
# 2016/05/14 - BKW Increased rounding to 9 decimal places (Max Picasa accepts),
|
67
67
|
# moved rounding operation to subroutine
|
68
68
|
#
|
69
69
|
# References: https://exiftool.org/forum/index.php/topic,6354.0.html
|
@@ -16,13 +16,13 @@
|
|
16
16
|
|
17
17
|
%Image::ExifTool::UserDefined = (
|
18
18
|
'Image::ExifTool::XMP::Main' => {
|
19
|
-
Camera => {
|
19
|
+
Camera => {
|
20
20
|
SubDirectory => {
|
21
21
|
TagTable => 'Image::ExifTool::UserDefined::Camera',
|
22
22
|
},
|
23
23
|
},
|
24
24
|
},
|
25
|
-
);
|
25
|
+
);
|
26
26
|
|
27
27
|
%Image::ExifTool::UserDefined::Camera = (
|
28
28
|
GROUPS => { 0 => 'XMP', 1 => 'XMP-Camera', 2 => 'Camera' },
|
@@ -68,9 +68,9 @@ sub has_defined {
|
|
68
68
|
35 => 'EXIF:TransferRange', # TransferRange (342/0x0156)
|
69
69
|
36 => 'EXIF:YCbCrCoefficients', # YCbCrCoefficients (529/0x0211)
|
70
70
|
37 => 'EXIF:YCbCrPositioning', # YCbCrPositioning (531/0x0213)
|
71
|
-
38 => 'EXIF:YCbCrSubSampling', # YCbCrSubSampling (530/0x0212)
|
71
|
+
38 => 'EXIF:YCbCrSubSampling', # YCbCrSubSampling (530/0x0212)
|
72
72
|
# Other tags to check
|
73
|
-
39 => 'EXIF:PhotometricInterpretation', # PhotometricInterpretation (262/0x0106)
|
73
|
+
39 => 'EXIF:PhotometricInterpretation', # PhotometricInterpretation (262/0x0106)
|
74
74
|
40 => 'EXIF:Compression', # Compression (259/0x0103)
|
75
75
|
},
|
76
76
|
ValueConv => q{
|
data/bin/exiftool
CHANGED
@@ -8,9 +8,10 @@
|
|
8
8
|
# (See html/history.html for revision history)
|
9
9
|
#------------------------------------------------------------------------------
|
10
10
|
use strict;
|
11
|
+
use warnings;
|
11
12
|
require 5.004;
|
12
13
|
|
13
|
-
my $version = '12.
|
14
|
+
my $version = '12.41';
|
14
15
|
|
15
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
16
17
|
BEGIN {
|
@@ -109,6 +110,8 @@ my %database; # lookup for database information based on file name (in Exi
|
|
109
110
|
my %filterExt; # lookup for filtered extensions
|
110
111
|
my %ignore; # directory names to ignore
|
111
112
|
my $ignoreHidden; # flag to ignore hidden files
|
113
|
+
my %outComma; # flag that output text file needs a comma
|
114
|
+
my %outTrailer; # trailer for output text file
|
112
115
|
my %preserveTime; # preserved timestamps for files
|
113
116
|
my %printFmt; # the contents of the print format file
|
114
117
|
my %setTags; # hash of list references for tags to set from files
|
@@ -441,6 +444,8 @@ undef %database;
|
|
441
444
|
undef %endDir;
|
442
445
|
undef %filterExt;
|
443
446
|
undef %ignore;
|
447
|
+
undef %outComma;
|
448
|
+
undef %outTrailer;
|
444
449
|
undef %printFmt;
|
445
450
|
undef %preserveTime;
|
446
451
|
undef %setTags;
|
@@ -1821,8 +1826,21 @@ if ($filtered and not $validFile) {
|
|
1821
1826
|
PrintCSV() if $csv and not $isWriting;
|
1822
1827
|
|
1823
1828
|
# print folder/file trailer if necessary
|
1824
|
-
|
1825
|
-
|
1829
|
+
if ($textOut) {
|
1830
|
+
foreach (keys %outTrailer) {
|
1831
|
+
next unless $outTrailer{$_};
|
1832
|
+
if ($mt->Open(\*OUTTRAIL, $_, '>>')) {
|
1833
|
+
my $fp = \*OUTTRAIL;
|
1834
|
+
print $fp $outTrailer{$_};
|
1835
|
+
close $fp;
|
1836
|
+
} else {
|
1837
|
+
Error("Error appending to $_\n");
|
1838
|
+
}
|
1839
|
+
}
|
1840
|
+
} else {
|
1841
|
+
print $sectTrailer if $sectTrailer;
|
1842
|
+
print $fileTrailer if $fileTrailer and not $fileHeader;
|
1843
|
+
}
|
1826
1844
|
|
1827
1845
|
my $totWr = $countGoodWr + $countBadWr + $countSameWr + $countCopyWr +
|
1828
1846
|
$countGoodCr + $countBadCr;
|
@@ -2160,6 +2178,9 @@ sub GetImageInfo($$)
|
|
2160
2178
|
$tmpText = $outfile unless $append;
|
2161
2179
|
}
|
2162
2180
|
|
2181
|
+
# restore state of comma flag for this file if appending
|
2182
|
+
$comma = $outComma{$outfile} if $append and ($textOverwrite & 0x02);
|
2183
|
+
|
2163
2184
|
# print the results for this file
|
2164
2185
|
if (%printFmt) {
|
2165
2186
|
# output using print format file (-p) option
|
@@ -2221,7 +2242,7 @@ sub GetImageInfo($$)
|
|
2221
2242
|
if ($fp) {
|
2222
2243
|
# print file header (only once)
|
2223
2244
|
if ($fileHeader) {
|
2224
|
-
print $fp $fileHeader;
|
2245
|
+
print $fp $fileHeader unless defined $outfile and ($created{$outfile} or $appended{$outfile});
|
2225
2246
|
undef $fileHeader unless $textOut;
|
2226
2247
|
}
|
2227
2248
|
if ($html) {
|
@@ -2674,9 +2695,17 @@ TAG: foreach $tag (@foundTags) {
|
|
2674
2695
|
}
|
2675
2696
|
}
|
2676
2697
|
if ($outfile) {
|
2677
|
-
|
2678
|
-
|
2679
|
-
|
2698
|
+
if ($textOverwrite & 0x02) {
|
2699
|
+
# save state of this file if we may be appending
|
2700
|
+
$outComma{$outfile} = $comma;
|
2701
|
+
$outTrailer{$outfile} = '';
|
2702
|
+
$outTrailer{$outfile} .= $sectTrailer and $sectTrailer = '' if $sectTrailer;
|
2703
|
+
$outTrailer{$outfile} .= $fileTrailer if $fileTrailer;
|
2704
|
+
} else {
|
2705
|
+
# write section and file trailers before closing the file
|
2706
|
+
print $fp $sectTrailer and $sectTrailer = '' if $sectTrailer;
|
2707
|
+
print $fp $fileTrailer if $fileTrailer;
|
2708
|
+
}
|
2680
2709
|
close($fp);
|
2681
2710
|
undef $tmpText;
|
2682
2711
|
if ($lineCount) {
|
@@ -2926,7 +2955,7 @@ sub SetImageInfo($$$)
|
|
2926
2955
|
}
|
2927
2956
|
}
|
2928
2957
|
if (defined $outfile) {
|
2929
|
-
$verbose and print $vout "'${infile}' --> '${outfile}'\n";
|
2958
|
+
defined $verbose and print $vout "'${infile}' --> '${outfile}'\n";
|
2930
2959
|
# create output directory if necessary
|
2931
2960
|
CreateDirectory($outfile);
|
2932
2961
|
# set temporary file (automatically erased on abnormal exit)
|
@@ -5136,13 +5165,14 @@ The following examples demonstrate basic use of the B<-csv> option:
|
|
5136
5165
|
# update metadata for all images in a directory from CSV file
|
5137
5166
|
exiftool -csv=a.csv dir
|
5138
5167
|
|
5139
|
-
|
5140
|
-
the API MissingTagValue is set to an empty string
|
5168
|
+
When importing, empty values are ignored unless the B<-f> option is used and
|
5169
|
+
the API MissingTagValue is set to an empty string (in which case the tag is
|
5141
5170
|
deleted). Also, FileName and Directory columns are ignored if they exist
|
5142
|
-
(ie. ExifTool will not attempt to write these tags with a CSV import)
|
5143
|
-
force a tag to be deleted, use the B<-f>
|
5144
|
-
the CSV file (or to the MissingTagValue
|
5145
|
-
Multiple databases may be imported in a
|
5171
|
+
(ie. ExifTool will not attempt to write these tags with a CSV import), but
|
5172
|
+
all other columns are imported. To force a tag to be deleted, use the B<-f>
|
5173
|
+
option and set the value to "-" in the CSV file (or to the MissingTagValue
|
5174
|
+
if this API option was used). Multiple databases may be imported in a
|
5175
|
+
single command.
|
5146
5176
|
|
5147
5177
|
When exporting a CSV file, the B<-g> or B<-G> option adds group names to the
|
5148
5178
|
tag headings. If the B<-a> option is used to allow duplicate tag names, the
|
@@ -5436,7 +5466,7 @@ with this command:
|
|
5436
5466
|
|
5437
5467
|
produces output like this:
|
5438
5468
|
|
5439
|
-
-- Generated by ExifTool 12.
|
5469
|
+
-- Generated by ExifTool 12.41 --
|
5440
5470
|
File: a.jpg - 2003:10:31 15:44:19
|
5441
5471
|
(f/5.6, 1/60s, ISO 100)
|
5442
5472
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -5555,7 +5585,9 @@ level greater than 0, most other options are ignored and normal console
|
|
5555
5585
|
output is suppressed unless specific tags are extracted. Using B<-v0>
|
5556
5586
|
causes the console output buffer to be flushed after each line (which may be
|
5557
5587
|
useful to avoid delays when piping exiftool output), and prints the name of
|
5558
|
-
each processed file when writing
|
5588
|
+
each processed file when writing and the new file name when renaming,
|
5589
|
+
moving or copying. Verbose levels above B<-v0> do not flush after each
|
5590
|
+
line. Also see the B<-progress> option.
|
5559
5591
|
|
5560
5592
|
=item B<-w>[+|!] I<EXT> or I<FMT> (B<-textOut>)
|
5561
5593
|
|
@@ -5768,11 +5800,10 @@ an XMP extension for the output file.
|
|
5768
5800
|
=item B<-a>, B<--a> (B<-duplicates>, B<--duplicates>)
|
5769
5801
|
|
5770
5802
|
Allow (B<-a>) or suppress (B<--a>) duplicate tag names to be extracted. By
|
5771
|
-
default, duplicate tags are suppressed when reading unless the B<-ee> or
|
5772
|
-
|
5773
|
-
|
5774
|
-
|
5775
|
-
when copying.
|
5803
|
+
default, duplicate tags are suppressed when reading unless the B<-ee> or B<-X>
|
5804
|
+
options are used or the Duplicates option is enabled in the configuration file.
|
5805
|
+
When writing, this option allows multiple Warning messages to be shown.
|
5806
|
+
Duplicate tags are always extracted when copying.
|
5776
5807
|
|
5777
5808
|
=item B<-e> (B<--composite>)
|
5778
5809
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
88
88
|
sub ProcessExifInfo($$$);
|
89
89
|
sub SwapWords($);
|
90
90
|
|
91
|
-
$VERSION = '4.
|
91
|
+
$VERSION = '4.57';
|
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)
|
@@ -208,6 +208,7 @@ $VERSION = '4.55';
|
|
208
208
|
53 => 'Canon EF-S 18-55mm f/3.5-5.6 III', #Jon Charnas
|
209
209
|
54 => 'Canon EF-S 55-250mm f/4-5.6 IS II', #47
|
210
210
|
60 => 'Irix 11mm f/4', #50
|
211
|
+
63 => 'Irix 30mm F1.4 Dragonfly', #IB
|
211
212
|
80 => 'Canon TS-E 50mm f/2.8L Macro', #42
|
212
213
|
81 => 'Canon TS-E 90mm f/2.8L Macro', #42
|
213
214
|
82 => 'Canon TS-E 135mm f/4L Macro', #42
|
@@ -599,6 +600,9 @@ $VERSION = '4.55';
|
|
599
600
|
'61182.25' => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42 (NC)
|
600
601
|
'61182.26' => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42 (NC)
|
601
602
|
'61182.27' => 'Canon RF 16mm F2.8 STM', #42
|
603
|
+
'61182.28' => 'Canon RF 400mm F2.8L IS USM', #IB
|
604
|
+
'61182.29' => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
|
605
|
+
'61182.30' => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
|
602
606
|
#'61182.xx' => 'Canon RF 100mm F2.8L MACRO IS USM',
|
603
607
|
65535 => 'n/a',
|
604
608
|
);
|
@@ -970,8 +974,8 @@ my %canonQuality = (
|
|
970
974
|
4 => 'RAW',
|
971
975
|
5 => 'Superfine',
|
972
976
|
7 => 'CRAW', #42
|
973
|
-
130 => '
|
974
|
-
131 => '
|
977
|
+
130 => 'Light (RAW)', #github#119
|
978
|
+
131 => 'Standard (RAW)', #github#119
|
975
979
|
);
|
976
980
|
my %canonImageSize = (
|
977
981
|
-1 => 'n/a',
|
@@ -1018,7 +1022,7 @@ my %canonWhiteBalance = (
|
|
1018
1022
|
20 => 'PC Set4', #PH
|
1019
1023
|
21 => 'PC Set5', #PH
|
1020
1024
|
# 22 - Custom 2?
|
1021
|
-
23 => 'Auto (ambience priority)', #PH (5DS)
|
1025
|
+
23 => 'Auto (ambience priority)', #PH (5DS) (perhaps this needs re-thinking?: forum13295)
|
1022
1026
|
# 30 - Click White Balance?
|
1023
1027
|
# 31 - Shot Settings?
|
1024
1028
|
# 137 - Tungsten?
|
@@ -2053,6 +2057,13 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
2053
2057
|
TagTable => 'Image::ExifTool::Canon::HDRInfo',
|
2054
2058
|
}
|
2055
2059
|
},
|
2060
|
+
0x4026 => { #github#119
|
2061
|
+
Name => 'LogInfo',
|
2062
|
+
SubDirectory => {
|
2063
|
+
Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
|
2064
|
+
TagTable => 'Image::ExifTool::Canon::LogInfo',
|
2065
|
+
}
|
2066
|
+
},
|
2056
2067
|
0x4028 => { #PH
|
2057
2068
|
Name => 'AFConfig', # (AFTabInfo)
|
2058
2069
|
SubDirectory => {
|
@@ -2126,6 +2137,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
2126
2137
|
4 => 'Continuous, Low', #PH
|
2127
2138
|
5 => 'Continuous, High', #PH
|
2128
2139
|
6 => 'Silent Single', #PH
|
2140
|
+
8 => 'Continuous, High+', #WolfgangGulcker
|
2129
2141
|
# ref A: https://exiftool.org/forum/index.php/topic,5701.msg27843.html#msg27843
|
2130
2142
|
9 => 'Single, Silent', #A
|
2131
2143
|
10 => 'Continuous, Silent', #A
|
@@ -6789,6 +6801,9 @@ my %ciMaxFocal = (
|
|
6789
6801
|
284 => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42 (NC)
|
6790
6802
|
285 => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42 (NC)
|
6791
6803
|
288 => 'Canon RF 16mm F2.8 STM', #42
|
6804
|
+
289 => 'Canon RF 400mm F2.8L IS USM', #IB
|
6805
|
+
290 => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
|
6806
|
+
291 => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
|
6792
6807
|
#xxx => 'Canon RF 100mm F2.8L MACRO IS USM',
|
6793
6808
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
6794
6809
|
},
|
@@ -8701,6 +8716,65 @@ my %filterConv = (
|
|
8701
8716
|
# 3 - maybe related to AutoImageAlign?
|
8702
8717
|
);
|
8703
8718
|
|
8719
|
+
# More color information (MakerNotes tag 0x4026) (ref github issue #119)
|
8720
|
+
%Image::ExifTool::Canon::LogInfo = (
|
8721
|
+
%binaryDataAttrs,
|
8722
|
+
FORMAT => 'int32s',
|
8723
|
+
FIRST_ENTRY => 1,
|
8724
|
+
PRIORITY => 0,
|
8725
|
+
4 => {
|
8726
|
+
Name => 'CompressionFormat',
|
8727
|
+
PrintConv => {
|
8728
|
+
0 => 'Editing (ALL-I)',
|
8729
|
+
1 => 'Standard (IPB)',
|
8730
|
+
2 => 'Light (IPB)',
|
8731
|
+
3 => 'Motion JPEG',
|
8732
|
+
4 => 'RAW', # either Standard or Light, depending on Quality
|
8733
|
+
},
|
8734
|
+
},
|
8735
|
+
6 => { # 0 to 7
|
8736
|
+
Name => 'Sharpness',
|
8737
|
+
RawConv => '$val == 0x7fffffff ? undef : $val',
|
8738
|
+
},
|
8739
|
+
7 => { # -4 to 4
|
8740
|
+
Name => 'Saturation',
|
8741
|
+
RawConv => '$val == 0x7fffffff ? undef : $val',
|
8742
|
+
%Image::ExifTool::Exif::printParameter,
|
8743
|
+
},
|
8744
|
+
8 => { # -4 to 4
|
8745
|
+
Name => 'ColorTone',
|
8746
|
+
RawConv => '$val == 0x7fffffff ? undef : $val',
|
8747
|
+
%Image::ExifTool::Exif::printParameter,
|
8748
|
+
},
|
8749
|
+
9 => {
|
8750
|
+
Name => 'ColorSpace2',
|
8751
|
+
RawConv => '$val == 0x7fffffff ? undef : $val',
|
8752
|
+
PrintConv => {
|
8753
|
+
0 => 'BT.709',
|
8754
|
+
1 => 'BT.2020',
|
8755
|
+
2 => 'CinemaGamut',
|
8756
|
+
},
|
8757
|
+
},
|
8758
|
+
10 => {
|
8759
|
+
Name => 'ColorMatrix',
|
8760
|
+
RawConv => '$val == 0x7fffffff ? undef : $val',
|
8761
|
+
PrintConv => {
|
8762
|
+
0 => 'EOS Original',
|
8763
|
+
1 => 'Neutral',
|
8764
|
+
},
|
8765
|
+
},
|
8766
|
+
11 => {
|
8767
|
+
Name => 'CanonLogVersion', # (increases dynamic range of sensor data)
|
8768
|
+
RawConv => '$val == 0x7fffffff ? undef : $val',
|
8769
|
+
PrintConv => {
|
8770
|
+
0 => 'OFF',
|
8771
|
+
1 => 'CLogV1',
|
8772
|
+
2 => 'CLogV2', # (NC)
|
8773
|
+
3 => 'CLogV3',
|
8774
|
+
},
|
8775
|
+
},
|
8776
|
+
);
|
8777
|
+
|
8704
8778
|
# AF configuration info (MakerNotes tag 0x4028) (ref PH)
|
8705
8779
|
%Image::ExifTool::Canon::AFConfig = (
|
8706
8780
|
%binaryDataAttrs,
|