exiftool_vendored 12.60.0 → 12.62.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 +35 -0
- data/bin/MANIFEST +7 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +45 -44
- data/bin/exiftool +100 -73
- data/bin/lib/Image/ExifTool/BMP.pm +0 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +4 -4
- data/bin/lib/Image/ExifTool/FlashPix.pm +2 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +31 -6
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +3 -3
- data/bin/lib/Image/ExifTool/PDF.pm +17 -8
- data/bin/lib/Image/ExifTool/QuickTime.pm +10 -7
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +51 -21
- data/bin/lib/Image/ExifTool/Sony.pm +16 -10
- data/bin/lib/Image/ExifTool/TagLookup.pm +9 -0
- data/bin/lib/Image/ExifTool/TagNames.pod +34 -5
- data/bin/lib/Image/ExifTool/WPG.pm +296 -0
- data/bin/lib/Image/ExifTool/WritePDF.pl +7 -8
- data/bin/lib/Image/ExifTool/Writer.pl +12 -4
- data/bin/lib/Image/ExifTool/XMP.pm +17 -5
- data/bin/lib/Image/ExifTool/ZIP.pm +159 -41
- data/bin/lib/Image/ExifTool.pm +118 -50
- data/bin/lib/Image/ExifTool.pod +51 -42
- data/bin/perl-Image-ExifTool.spec +44 -43
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
|
|
12
12
|
=head1 TAG TABLES
|
13
13
|
|
14
14
|
The tables listed below give the names of all tags recognized by ExifTool.
|
15
|
-
They contain a total of
|
15
|
+
They contain a total of 26407 tags, with 16869 unique tag names.
|
16
16
|
|
17
17
|
B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
|
18
18
|
table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
|
@@ -1453,6 +1453,9 @@ These tags belong to the ExifTool XMP-aux family 1 group.
|
|
1453
1453
|
-------- --------
|
1454
1454
|
ApproximateFocusDistance rational
|
1455
1455
|
DistortionCorrectionAlreadyApplied boolean
|
1456
|
+
EnhanceDenoiseAlreadyApplied boolean
|
1457
|
+
EnhanceDenoiseLumaAmount string
|
1458
|
+
EnhanceDenoiseVersion string
|
1456
1459
|
EnhanceDetailsAlreadyApplied boolean
|
1457
1460
|
EnhanceDetailsVersion string
|
1458
1461
|
EnhanceSuperResolutionAlreadyApplied boolean
|
@@ -20827,6 +20830,7 @@ WX350/WX500, ILCE-1/7/7C/7R/7S/7M2/7M3/7RM2/7RM3/7RM4/7SM2/7SM3/9/9M2/5000/
|
|
20827
20830
|
|
20828
20831
|
Index1 Tag Name Writable
|
20829
20832
|
------ -------- --------
|
20833
|
+
994 ISOInfo Sony ISOInfo
|
20830
20834
|
1102 ISOInfo Sony ISOInfo
|
20831
20835
|
1176 ISOInfo Sony ISOInfo
|
20832
20836
|
1181 ISOInfo Sony ISOInfo
|
@@ -26021,6 +26025,18 @@ Graphics) images. See L<http://bellard.org/bpg/> for the specification.
|
|
26021
26025
|
0x0004 ThumbnailBPG no
|
26022
26026
|
0x0005 AnimationControl? no
|
26023
26027
|
|
26028
|
+
=head2 WPG Tags
|
26029
|
+
|
26030
|
+
Tags extracted from WordPerfect Graphics (WPG) images.
|
26031
|
+
|
26032
|
+
Tag Name Writable
|
26033
|
+
-------- --------
|
26034
|
+
ImageHeightInches no
|
26035
|
+
ImageWidthInches no
|
26036
|
+
Records no+
|
26037
|
+
RecordsV2 no+
|
26038
|
+
WPGVersion no
|
26039
|
+
|
26024
26040
|
=head2 ICO Tags
|
26025
26041
|
|
26026
26042
|
Information extracted from Windows ICO (icon) and CUR (cursor) files.
|
@@ -27198,10 +27214,10 @@ number of available PDF tags. See
|
|
27198
27214
|
L<http://www.adobe.com/devnet/pdf/pdf_reference.html> for the official PDF
|
27199
27215
|
specification.
|
27200
27216
|
|
27201
|
-
ExifTool supports reading and writing PDF documents up to version
|
27202
|
-
|
27203
|
-
|
27204
|
-
password-protected PDF files.
|
27217
|
+
ExifTool supports reading and writing PDF documents up to version 2.0,
|
27218
|
+
including support for RC4, AES-128 and AES-256 encryption. A
|
27219
|
+
Password option is provided to allow processing
|
27220
|
+
of password-protected PDF files.
|
27205
27221
|
|
27206
27222
|
ExifTool may be used to write native PDF and XMP metadata to PDF files. It
|
27207
27223
|
uses an incremental update technique that has the advantages of being both
|
@@ -37722,6 +37738,19 @@ These tags are extracted from RAR archive files.
|
|
37722
37738
|
18 PackingMethod no
|
37723
37739
|
25 ArchivedFileName no
|
37724
37740
|
|
37741
|
+
=head3 ZIP RAR5 Tags
|
37742
|
+
|
37743
|
+
These tags are extracted from RAR v5 archive files.
|
37744
|
+
|
37745
|
+
Tag Name Writable
|
37746
|
+
-------- --------
|
37747
|
+
ArchivedFileName no
|
37748
|
+
CompressedSize no
|
37749
|
+
ModifyDate no
|
37750
|
+
OperatingSystem no
|
37751
|
+
RARVersion no
|
37752
|
+
UncompressedSize no
|
37753
|
+
|
37725
37754
|
=head2 RTF Tags
|
37726
37755
|
|
37727
37756
|
This table lists standard tags of the RTF information group, but ExifTool
|
@@ -0,0 +1,296 @@
|
|
1
|
+
#------------------------------------------------------------------------------
|
2
|
+
# File: WPG.pm
|
3
|
+
#
|
4
|
+
# Description: Read WordPerfect Graphics meta information
|
5
|
+
#
|
6
|
+
# Revisions: 2023-05-01 - P. Harvey Created
|
7
|
+
#
|
8
|
+
# References: 1) https://www.fileformat.info/format/wpg/egff.htm
|
9
|
+
# 2) https://archive.org/details/mac_Graphics_File_Formats_Second_Edition_1996/page/n991/mode/2up
|
10
|
+
# 3) http://libwpg.sourceforge.net/
|
11
|
+
#------------------------------------------------------------------------------
|
12
|
+
|
13
|
+
package Image::ExifTool::WPG;
|
14
|
+
|
15
|
+
use strict;
|
16
|
+
use vars qw($VERSION);
|
17
|
+
use Image::ExifTool qw(:DataAccess :Utils);
|
18
|
+
|
19
|
+
$VERSION = '1.00';
|
20
|
+
|
21
|
+
sub PrintRecord($$$);
|
22
|
+
|
23
|
+
# WPG metadata
|
24
|
+
%Image::ExifTool::WPG::Main = (
|
25
|
+
GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Image' },
|
26
|
+
VARS => { NO_ID => 1 },
|
27
|
+
NOTES => 'Tags extracted from WordPerfect Graphics (WPG) images.',
|
28
|
+
WPGVersion => { },
|
29
|
+
ImageWidthInches => { PrintConv => 'sprintf("%.2f",$val)' },
|
30
|
+
ImageHeightInches => { PrintConv => 'sprintf("%.2f",$val)' },
|
31
|
+
Records => {
|
32
|
+
Notes => 'records for version 1.0 files',
|
33
|
+
List => 1,
|
34
|
+
PrintHex => 2,
|
35
|
+
PrintConvColumns => 2,
|
36
|
+
PrintConv => {
|
37
|
+
OTHER => \&PrintRecord,
|
38
|
+
0x01 => 'Fill Attributes',
|
39
|
+
0x02 => 'Line Attributes',
|
40
|
+
0x03 => 'Marker Attributes',
|
41
|
+
0x04 => 'Polymarker',
|
42
|
+
0x05 => 'Line',
|
43
|
+
0x06 => 'Polyline',
|
44
|
+
0x07 => 'Rectangle',
|
45
|
+
0x08 => 'Polygon',
|
46
|
+
0x09 => 'Ellipse',
|
47
|
+
0x0a => 'Reserved',
|
48
|
+
0x0b => 'Bitmap (Type 1)',
|
49
|
+
0x0c => 'Graphics Text (Type 1)',
|
50
|
+
0x0d => 'Graphics Text Attributes',
|
51
|
+
0x0e => 'Color Map',
|
52
|
+
0x0f => 'Start WPG (Type 1)',
|
53
|
+
0x10 => 'End WPG',
|
54
|
+
0x11 => 'PostScript Data (Type 1)',
|
55
|
+
0x12 => 'Output Attributes',
|
56
|
+
0x13 => 'Curved Polyline',
|
57
|
+
0x14 => 'Bitmap (Type 2)',
|
58
|
+
0x15 => 'Start Figure',
|
59
|
+
0x16 => 'Start Chart',
|
60
|
+
0x17 => 'PlanPerfect Data',
|
61
|
+
0x18 => 'Graphics Text (Type 2)',
|
62
|
+
0x19 => 'Start WPG (Type 2)',
|
63
|
+
0x1a => 'Graphics Text (Type 3)',
|
64
|
+
0x1b => 'PostScript Data (Type 2)',
|
65
|
+
},
|
66
|
+
},
|
67
|
+
RecordsV2 => {
|
68
|
+
Notes => 'records for version 2.0 files',
|
69
|
+
List => 1,
|
70
|
+
PrintHex => 2,
|
71
|
+
PrintConvColumns => 2,
|
72
|
+
PrintConv => {
|
73
|
+
OTHER => \&PrintRecord,
|
74
|
+
0x00 => 'End Marker',
|
75
|
+
0x01 => 'Start WPG',
|
76
|
+
0x02 => 'End WPG',
|
77
|
+
0x03 => 'Form Settings',
|
78
|
+
0x04 => 'Ruler Settings',
|
79
|
+
0x05 => 'Grid Settings',
|
80
|
+
0x06 => 'Layer',
|
81
|
+
0x08 => 'Pen Style Definition',
|
82
|
+
0x09 => 'Pattern Definition',
|
83
|
+
0x0a => 'Comment',
|
84
|
+
0x0b => 'Color Transfer',
|
85
|
+
0x0c => 'Color Palette',
|
86
|
+
0x0d => 'DP Color Palette',
|
87
|
+
0x0e => 'Bitmap Data',
|
88
|
+
0x0f => 'Text Data',
|
89
|
+
0x10 => 'Chart Style',
|
90
|
+
0x11 => 'Chart Data',
|
91
|
+
0x12 => 'Object Image',
|
92
|
+
0x15 => 'Polyline',
|
93
|
+
0x16 => 'Polyspline',
|
94
|
+
0x17 => 'Polycurve',
|
95
|
+
0x18 => 'Rectangle',
|
96
|
+
0x19 => 'Arc',
|
97
|
+
0x1a => 'Compound Polygon',
|
98
|
+
0x1b => 'Bitmap',
|
99
|
+
0x1c => 'Text Line',
|
100
|
+
0x1d => 'Text Block',
|
101
|
+
0x1e => 'Text Path',
|
102
|
+
0x1f => 'Chart',
|
103
|
+
0x20 => 'Group',
|
104
|
+
0x21 => 'Object Capsule',
|
105
|
+
0x22 => 'Font Settings',
|
106
|
+
0x25 => 'Pen Fore Color',
|
107
|
+
0x26 => 'DP Pen Fore Color',
|
108
|
+
0x27 => 'Pen Back Color',
|
109
|
+
0x28 => 'DP Pen Back Color',
|
110
|
+
0x29 => 'Pen Style',
|
111
|
+
0x2a => 'Pen Pattern',
|
112
|
+
0x2b => 'Pen Size',
|
113
|
+
0x2c => 'DP Pen Size',
|
114
|
+
0x2d => 'Line Cap',
|
115
|
+
0x2e => 'Line Join',
|
116
|
+
0x2f => 'Brush Gradient',
|
117
|
+
0x30 => 'DP Brush Gradient',
|
118
|
+
0x31 => 'Brush Fore Color',
|
119
|
+
0x32 => 'DP Brush Fore Color',
|
120
|
+
0x33 => 'Brush Back Color',
|
121
|
+
0x34 => 'DP Brush Back Color',
|
122
|
+
0x35 => 'Brush Pattern',
|
123
|
+
0x36 => 'Horizontal Line',
|
124
|
+
0x37 => 'Vertical Line',
|
125
|
+
0x38 => 'Poster Settings',
|
126
|
+
0x39 => 'Image State',
|
127
|
+
0x3a => 'Envelope Definition',
|
128
|
+
0x3b => 'Envelope',
|
129
|
+
0x3c => 'Texture Definition',
|
130
|
+
0x3d => 'Brush Texture',
|
131
|
+
0x3e => 'Texture Alignment',
|
132
|
+
0x3f => 'Pen Texture ',
|
133
|
+
}
|
134
|
+
},
|
135
|
+
);
|
136
|
+
|
137
|
+
#------------------------------------------------------------------------------
|
138
|
+
# Print record type
|
139
|
+
# Inputs: 0) record type and count, 1) inverse flag, 2) PrintConv hash ref
|
140
|
+
# Returns: converted record name
|
141
|
+
sub PrintRecord($$$)
|
142
|
+
{
|
143
|
+
my ($val, $inv, $printConv) = @_;
|
144
|
+
my ($type, $count) = split 'x', $val;
|
145
|
+
my $prt = $$printConv{$type} || sprintf('Unknown (0x%.2x)', $type);
|
146
|
+
$prt .= " x $count" if $count;
|
147
|
+
return $prt;
|
148
|
+
}
|
149
|
+
|
150
|
+
#------------------------------------------------------------------------------
|
151
|
+
# Read variable-length integer
|
152
|
+
# Inputs: 0) RAF ref
|
153
|
+
# Returns: integer value
|
154
|
+
sub ReadVarInt($)
|
155
|
+
{
|
156
|
+
my $raf = shift;
|
157
|
+
my $buff;
|
158
|
+
$raf->Read($buff, 1) or return 0;
|
159
|
+
my $val = ord($buff);
|
160
|
+
if ($val == 0xff) {
|
161
|
+
$raf->Read($buff, 2) == 2 or return 0;
|
162
|
+
$val = unpack('v', $buff);
|
163
|
+
if ($val & 0x8000) {
|
164
|
+
$raf->Read($buff, 2) == 2 or return 0;
|
165
|
+
$val = (($val & 0x7fff) << 16) | unpack('v', $buff);
|
166
|
+
}
|
167
|
+
}
|
168
|
+
return $val;
|
169
|
+
}
|
170
|
+
|
171
|
+
#------------------------------------------------------------------------------
|
172
|
+
# Read WPG version 1 or 2 image
|
173
|
+
# Inputs: 0) ExifTool object reference, 1) dirInfo reference
|
174
|
+
# Returns: 1 on success, 0 if this wasn't a valid WPG file
|
175
|
+
sub ProcessWPG($$)
|
176
|
+
{
|
177
|
+
my ($et, $dirInfo) = @_;
|
178
|
+
my $raf = $$dirInfo{RAF};
|
179
|
+
my ($buff, $lastType, $count);
|
180
|
+
|
181
|
+
# verify this is a valid WPG file
|
182
|
+
return 0 unless $raf->Read($buff, 16) == 16;
|
183
|
+
return 0 unless $buff =~ /^\xff\x57\x50\x43/;
|
184
|
+
$et->SetFileType();
|
185
|
+
SetByteOrder('II');
|
186
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::WPG::Main');
|
187
|
+
my $offset = Get32u(\$buff, 4);
|
188
|
+
my ($ver, $rev) = unpack('x10CC', $buff);
|
189
|
+
$et->HandleTag($tagTablePtr, WPGVersion => "$ver.$rev");
|
190
|
+
if ($ver < 1 or $ver > 2) {
|
191
|
+
# currently support only version 1 and 2 formats
|
192
|
+
$et->Warn('Unsupported WPG version');
|
193
|
+
return 1;
|
194
|
+
}
|
195
|
+
my $tag = $ver == 1 ? 'Records' : 'RecordsV2';
|
196
|
+
$raf->Seek($offset - 16, 1) or return 1 if $offset > 16;
|
197
|
+
# loop through records
|
198
|
+
for (;;) {
|
199
|
+
my ($type, $len, $getSize);
|
200
|
+
if ($raf->Read($buff, $ver) == $ver) { # read 1 or 2 bytes, based on version
|
201
|
+
if ($ver == 1) {
|
202
|
+
# read version 1 record header
|
203
|
+
$type = ord($buff);
|
204
|
+
$len = ReadVarInt($raf);
|
205
|
+
$getSize = 1 if $type == 0x0f; # Start WPG (Type 1)
|
206
|
+
} else {
|
207
|
+
# read version 2 record header
|
208
|
+
$type = unpack('xC', $buff);
|
209
|
+
ReadVarInt($raf); # skip extensions
|
210
|
+
$len = ReadVarInt($raf);
|
211
|
+
$getSize = 1 if $type == 0x01; # Start WPG
|
212
|
+
undef $type if $type > 0x3f;
|
213
|
+
}
|
214
|
+
if ($getSize) {
|
215
|
+
# read Start record to obtain image size
|
216
|
+
$raf->Read($buff, $len) == $len or $et->Warn('File format error'), last;
|
217
|
+
my ($w, $h, $xres, $yres);
|
218
|
+
if ($ver == 1) {
|
219
|
+
($w, $h) = unpack('x2vv', $buff);
|
220
|
+
} else {
|
221
|
+
my ($precision, $format);
|
222
|
+
($xres, $yres, $precision) = unpack('vvC', $buff);
|
223
|
+
if ($precision == 0 and $len >= 21) {
|
224
|
+
$format = 'int16s';
|
225
|
+
} elsif ($precision == 1 and $len >= 29) {
|
226
|
+
$format = 'int32s';
|
227
|
+
} else {
|
228
|
+
$et->Warn('Invalid integer precision');
|
229
|
+
next;
|
230
|
+
}
|
231
|
+
my ($x1,$y1,$x2,$y2) = ReadValue(\$buff, 13, $format, 4, $len-13);
|
232
|
+
$w = abs($x2 - $x1);
|
233
|
+
$h = abs($y2 - $y1);
|
234
|
+
}
|
235
|
+
$et->HandleTag($tagTablePtr, ImageWidthInches => $w / ($xres || 1200));
|
236
|
+
$et->HandleTag($tagTablePtr, ImageHeightInches => $h / ($yres || 1200));
|
237
|
+
} else {
|
238
|
+
$raf->Seek($len, 1) or last; # skip to the next record
|
239
|
+
}
|
240
|
+
}
|
241
|
+
# go to some trouble to collapse identical sequential entries in record list
|
242
|
+
# (trying to keep the length of the list managable for complex images)
|
243
|
+
$lastType and $type and $type == $lastType and ++$count, next;
|
244
|
+
if ($lastType) {
|
245
|
+
my $val = $count > 1 ? "${lastType}x$count" : $lastType;
|
246
|
+
$et->HandleTag($tagTablePtr, $tag => $val);
|
247
|
+
}
|
248
|
+
last unless $type;
|
249
|
+
$lastType = $type;
|
250
|
+
$count = 1;
|
251
|
+
}
|
252
|
+
return 1;
|
253
|
+
}
|
254
|
+
|
255
|
+
1; # end
|
256
|
+
|
257
|
+
__END__
|
258
|
+
|
259
|
+
=head1 NAME
|
260
|
+
|
261
|
+
Image::ExifTool::WPG - Read WPG meta information
|
262
|
+
|
263
|
+
=head1 SYNOPSIS
|
264
|
+
|
265
|
+
This module is used by Image::ExifTool
|
266
|
+
|
267
|
+
=head1 DESCRIPTION
|
268
|
+
|
269
|
+
This module contains definitions required by Image::ExifTool to read WPG
|
270
|
+
(WordPerfect Graphics) images.
|
271
|
+
|
272
|
+
=head1 AUTHOR
|
273
|
+
|
274
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
275
|
+
|
276
|
+
This library is free software; you can redistribute it and/or modify it
|
277
|
+
under the same terms as Perl itself.
|
278
|
+
|
279
|
+
=head1 REFERENCES
|
280
|
+
|
281
|
+
=over 4
|
282
|
+
|
283
|
+
=item L<https://www.fileformat.info/format/wpg/egff.htm>
|
284
|
+
|
285
|
+
=item L<https://archive.org/details/mac_Graphics_File_Formats_Second_Edition_1996/page/n991/mode/2up>
|
286
|
+
|
287
|
+
=item L<http://libwpg.sourceforge.net/>
|
288
|
+
|
289
|
+
=back
|
290
|
+
|
291
|
+
=head1 SEE ALSO
|
292
|
+
|
293
|
+
L<Image::ExifTool::TagNames/WPG Tags>,
|
294
|
+
L<Image::ExifTool(3pm)|Image::ExifTool>
|
295
|
+
|
296
|
+
=cut
|
@@ -23,7 +23,7 @@ my $beginComment = '%BeginExifToolUpdate';
|
|
23
23
|
my $endComment = '%EndExifToolUpdate ';
|
24
24
|
|
25
25
|
my $keyExt; # crypt key extension
|
26
|
-
my $pdfVer; # version of PDF file we are
|
26
|
+
my $pdfVer; # version of PDF file we are writing (highest Version in Root dictionaries)
|
27
27
|
|
28
28
|
# internal tags used in dictionary objects
|
29
29
|
my %myDictTags = (
|
@@ -297,15 +297,11 @@ sub WritePDF($$)
|
|
297
297
|
$$newTool{PDF_CAPTURE} = \%capture;
|
298
298
|
my $info = $newTool->ImageInfo($raf, 'XMP', 'PDF:*', 'Error', 'Warning');
|
299
299
|
# not a valid PDF file unless we got a version number
|
300
|
-
|
301
|
-
my $vers = $newTool->GetInfo('PDF:PDFVersion');
|
302
|
-
# take highest version number if multiple versions in an incremental save
|
303
|
-
($pdfVer) = sort { $b <=> $a } values %$vers;
|
300
|
+
$pdfVer = $$newTool{PDFVersion};
|
304
301
|
$pdfVer or $et->Error('Missing PDF:PDFVersion'), return 0;
|
305
302
|
# check version number
|
306
|
-
if ($pdfVer >
|
307
|
-
$et->
|
308
|
-
# (so writing by ExifTool is based on trial and error)
|
303
|
+
if ($pdfVer > 2.0) {
|
304
|
+
$et->Error("Writing PDF $pdfVer is untested", 1) and return 0;
|
309
305
|
}
|
310
306
|
# fail if we had any serious errors while extracting information
|
311
307
|
if ($capture{Error} or $$info{Error}) {
|
@@ -412,6 +408,9 @@ sub WritePDF($$)
|
|
412
408
|
my $tagID;
|
413
409
|
foreach $tagID (sort keys %$newTags) {
|
414
410
|
my $tagInfo = $$newTags{$tagID};
|
411
|
+
if ($pdfVer >= 2.0 and not $$tagInfo{PDF2}) {
|
412
|
+
next if $et->Warn("Writing PDF:$$tagInfo{Name} is deprecated for PDF 2.0 documents",2);
|
413
|
+
}
|
415
414
|
my $nvHash = $et->GetNewValueHash($tagInfo);
|
416
415
|
my (@vals, $deleted);
|
417
416
|
my $tag = $$tagInfo{Name};
|
@@ -1302,6 +1302,7 @@ sub SetNewValuesFromFile($$;@)
|
|
1302
1302
|
MDItemTags => $$options{MDItemTags},
|
1303
1303
|
MissingTagValue => $$options{MissingTagValue},
|
1304
1304
|
NoPDFList => $$options{NoPDFList},
|
1305
|
+
NoWarning => $$options{NoWarning},
|
1305
1306
|
Password => $$options{Password},
|
1306
1307
|
PrintConv => $$options{PrintConv},
|
1307
1308
|
QuickTimeUTC => $$options{QuickTimeUTC},
|
@@ -1569,10 +1570,17 @@ SET: foreach $set (@setList) {
|
|
1569
1570
|
# handle expressions
|
1570
1571
|
if ($$opts{EXPR}) {
|
1571
1572
|
my $val = $srcExifTool->InsertTagValues(\@tags, $$set[1], 'Error');
|
1572
|
-
|
1573
|
-
|
1574
|
-
|
1575
|
-
$
|
1573
|
+
my $err = $$srcExifTool{VALUE}{Error};
|
1574
|
+
if ($err) {
|
1575
|
+
# pass on any error as a warning unless it is suppressed
|
1576
|
+
my $noWarn = $$srcExifTool{OPTIONS}{NoWarning};
|
1577
|
+
unless ($noWarn and (eval { $err =~ /$noWarn/ } or
|
1578
|
+
# (also apply expression to warning without "[minor] " prefix)
|
1579
|
+
($err =~ s/^\[minor\] //i and eval { $err =~ /$noWarn/ })))
|
1580
|
+
{
|
1581
|
+
$tag = NextFreeTagKey(\%rtnInfo, 'Warning');
|
1582
|
+
$rtnInfo{$tag} = $$srcExifTool{VALUE}{Error};
|
1583
|
+
}
|
1576
1584
|
delete $$srcExifTool{VALUE}{Error};
|
1577
1585
|
next unless defined $val;
|
1578
1586
|
}
|
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
|
|
50
50
|
use Image::ExifTool::GPS;
|
51
51
|
require Exporter;
|
52
52
|
|
53
|
-
$VERSION = '3.
|
53
|
+
$VERSION = '3.59';
|
54
54
|
@ISA = qw(Exporter);
|
55
55
|
@EXPORT_OK = qw(EscapeXML UnescapeXML);
|
56
56
|
|
@@ -248,7 +248,11 @@ my %boolConv = (
|
|
248
248
|
|
249
249
|
# XMP namespaces which we don't want to contribute to generated EXIF tag names
|
250
250
|
# (Note: namespaces with non-standard prefixes aren't currently ignored)
|
251
|
-
my %ignoreNamespace = ( 'x'=>1, rdf=>1, xmlns=>1, xml=>1, svg=>1,
|
251
|
+
my %ignoreNamespace = ( 'x'=>1, rdf=>1, xmlns=>1, xml=>1, svg=>1, office=>1 );
|
252
|
+
|
253
|
+
# ExifTool properties that don't generate tag names (et:tagid is historic)
|
254
|
+
my %ignoreEtProp = ( 'et:desc'=>1, 'et:prt'=>1, 'et:val'=>1 , 'et:id'=>1, 'et:tagid'=>1,
|
255
|
+
'et:toolkit'=>1, 'et:table'=>1, 'et:index'=>1 );
|
252
256
|
|
253
257
|
# XMP properties to ignore (set dynamically via dirInfo IgnoreProp)
|
254
258
|
my %ignoreProp;
|
@@ -2485,6 +2489,9 @@ my %sPantryItem = (
|
|
2485
2489
|
EnhanceSuperResolutionAlreadyApplied => { Writable => 'boolean' },
|
2486
2490
|
EnhanceSuperResolutionVersion => { }, # integer?
|
2487
2491
|
EnhanceSuperResolutionScale => { Writable => 'rational' },
|
2492
|
+
EnhanceDenoiseAlreadyApplied => { Writable => 'boolean' }, #forum14760
|
2493
|
+
EnhanceDenoiseVersion => { }, #forum14760 integer?
|
2494
|
+
EnhanceDenoiseLumaAmount => { }, #forum14760 integer?
|
2488
2495
|
);
|
2489
2496
|
|
2490
2497
|
# IPTC Core namespace properties (Iptc4xmpCore) (ref 4)
|
@@ -2850,7 +2857,7 @@ sub GetXMPTagID($;$$)
|
|
2850
2857
|
# split name into namespace and property name
|
2851
2858
|
# (Note: namespace can be '' for property qualifiers)
|
2852
2859
|
my ($ns, $nm) = ($prop =~ /(.*?):(.*)/) ? ($1, $2) : ('', $prop);
|
2853
|
-
if ($ignoreNamespace{$ns} or $ignoreProp{$prop}) {
|
2860
|
+
if ($ignoreNamespace{$ns} or $ignoreProp{$prop} or $ignoreEtProp{$prop}) {
|
2854
2861
|
# special case: don't ignore rdf numbered items
|
2855
2862
|
# (not technically allowed in XMP, but used in RDF/XML)
|
2856
2863
|
unless ($prop =~ /^rdf:(_\d+)$/) {
|
@@ -3420,7 +3427,10 @@ NoLoop:
|
|
3420
3427
|
my %grps = ( 0 => $1, 1 => $2 );
|
3421
3428
|
# apply a little magic to recover original group names
|
3422
3429
|
# from this exiftool-written RDF/XML file
|
3423
|
-
if ($grps{1}
|
3430
|
+
if ($grps{1} eq 'System') {
|
3431
|
+
$grps{1} = 'XML-System';
|
3432
|
+
$grps{0} = 'XML';
|
3433
|
+
} elsif ($grps{1} =~ /^\d/) {
|
3424
3434
|
# URI's with only family 0 are internal tags from the source file,
|
3425
3435
|
# so change the group name to avoid confusion with tags from this file
|
3426
3436
|
$grps{1} = "XML-$grps{0}";
|
@@ -3888,7 +3898,9 @@ sub ParseXMPElement($$$;$$$$)
|
|
3888
3898
|
}
|
3889
3899
|
}
|
3890
3900
|
my $shortVal = $attrs{$shortName};
|
3891
|
-
|
3901
|
+
# Note: $prop is the containing property in this loop (not the shorthand property)
|
3902
|
+
# so $ignoreProp ignores all attributes of the ignored property
|
3903
|
+
if ($ignoreNamespace{$ns} or $ignoreProp{$prop} or $ignoreEtProp{$propName}) {
|
3892
3904
|
$ignored = $propName;
|
3893
3905
|
# handle special attributes (extract as tags only once if not empty)
|
3894
3906
|
if (ref $recognizedAttrs{$propName} and $shortVal) {
|