exiftool_vendored 12.68.0 → 12.72.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 +98 -15
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +10 -10
- data/bin/exiftool +32 -25
- data/bin/lib/Image/ExifTool/AAC.pm +175 -0
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +2 -1
- data/bin/lib/Image/ExifTool/CBOR.pm +18 -2
- data/bin/lib/Image/ExifTool/Canon.pm +87 -20
- data/bin/lib/Image/ExifTool/DJI.pm +3 -2
- data/bin/lib/Image/ExifTool/DNG.pm +25 -2
- data/bin/lib/Image/ExifTool/EXE.pm +54 -6
- data/bin/lib/Image/ExifTool/Exif.pm +204 -22
- data/bin/lib/Image/ExifTool/FujiFilm.pm +145 -20
- data/bin/lib/Image/ExifTool/GIF.pm +5 -1
- data/bin/lib/Image/ExifTool/GoPro.pm +16 -1
- data/bin/lib/Image/ExifTool/ID3.pm +76 -10
- data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
- data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/JSON.pm +4 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +30 -15
- data/bin/lib/Image/ExifTool/M2TS.pm +21 -16
- data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +213 -105
- data/bin/lib/Image/ExifTool/Olympus.pm +7 -1
- data/bin/lib/Image/ExifTool/PNG.pm +8 -13
- data/bin/lib/Image/ExifTool/Panasonic.pm +15 -2
- data/bin/lib/Image/ExifTool/Pentax.pm +15 -6
- data/bin/lib/Image/ExifTool/PhotoMechanic.pm +2 -2
- data/bin/lib/Image/ExifTool/QuickTime.pm +60 -14
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +59 -11
- data/bin/lib/Image/ExifTool/README +14 -5
- data/bin/lib/Image/ExifTool/RIFF.pm +60 -10
- data/bin/lib/Image/ExifTool/Ricoh.pm +109 -1
- data/bin/lib/Image/ExifTool/Samsung.pm +3 -2
- data/bin/lib/Image/ExifTool/Sony.pm +177 -37
- data/bin/lib/Image/ExifTool/TagLookup.pm +6971 -6714
- data/bin/lib/Image/ExifTool/TagNames.pod +957 -372
- data/bin/lib/Image/ExifTool/Text.pm +4 -5
- data/bin/lib/Image/ExifTool/Validate.pm +23 -20
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +2 -2
- data/bin/lib/Image/ExifTool/WriteExif.pl +33 -8
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +1 -0
- data/bin/lib/Image/ExifTool/WriteRIFF.pl +31 -6
- data/bin/lib/Image/ExifTool/Writer.pl +121 -28
- data/bin/lib/Image/ExifTool/XMP.pm +67 -2
- data/bin/lib/Image/ExifTool/XMP2.pl +35 -0
- data/bin/lib/Image/ExifTool.pm +94 -43
- data/bin/lib/Image/ExifTool.pod +28 -17
- data/bin/perl-Image-ExifTool.spec +9 -9
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
data/bin/lib/Image/ExifTool.pm
CHANGED
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
|
|
29
29
|
%jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
|
30
30
|
%static_vars);
|
31
31
|
|
32
|
-
$VERSION = '12.
|
32
|
+
$VERSION = '12.72';
|
33
33
|
$RELEASE = '';
|
34
34
|
@ISA = qw(Exporter);
|
35
35
|
%EXPORT_TAGS = (
|
@@ -132,7 +132,7 @@ sub Rename($$$);
|
|
132
132
|
sub Unlink($@);
|
133
133
|
sub SetFileTime($$;$$$$);
|
134
134
|
sub DoEscape($$);
|
135
|
-
sub ConvertFileSize(
|
135
|
+
sub ConvertFileSize($;$);
|
136
136
|
sub ParseArguments($;@); #(defined in attempt to avoid mod_perl problem)
|
137
137
|
sub ReadValue($$$;$$$);
|
138
138
|
|
@@ -145,16 +145,16 @@ sub ReadValue($$$;$$$);
|
|
145
145
|
WPG ICO PICT PNG MNG FLIF DjVu DPX OpenEXR ZISRAW MRC LIF MRC::FEI12 MIFF
|
146
146
|
PCX PGF PSP PhotoCD Radiance Other::PFM PDF PostScript Photoshop::Header
|
147
147
|
Photoshop::Layers Photoshop::ImageData FujiFilm::RAF FujiFilm::IFD
|
148
|
-
Samsung::Trailer Sony::SRF2 Sony::SR2SubIFD Sony::PMP ITC ID3
|
149
|
-
FLAC Ogg Vorbis APE APE::NewHeader APE::OldHeader Audible
|
150
|
-
MPEG::Video MPEG::Xing M2TS QuickTime QuickTime::ImageFile
|
151
|
-
QuickTime::Tags360Fly Matroska Matroska::StdTag MOI MXF DV
|
152
|
-
Real::Media Real::Audio Real::Metafile Red RIFF AIFF ASF
|
153
|
-
MIE JSON HTML XMP::SVG Palm Palm::MOBI Palm::EXTH
|
154
|
-
EXE
|
155
|
-
Text VCard::VCalendar VCard::VNote RSRC
|
156
|
-
ZIP::RAR5 RTF OOXML iWork ISO FLIR::AFF
|
157
|
-
FlashPix::DocTable
|
148
|
+
FujiFilm::MRAW Samsung::Trailer Sony::SRF2 Sony::SR2SubIFD Sony::PMP ITC ID3
|
149
|
+
ID3::Lyrics3 FLAC AAC Ogg Vorbis APE APE::NewHeader APE::OldHeader Audible
|
150
|
+
MPC MPEG::Audio MPEG::Video MPEG::Xing M2TS QuickTime QuickTime::ImageFile
|
151
|
+
QuickTime::Stream QuickTime::Tags360Fly Matroska Matroska::StdTag MOI MXF DV
|
152
|
+
Flash Flash::FLV Real::Media Real::Audio Real::Metafile Red RIFF AIFF ASF
|
153
|
+
WTV DICOM FITS XISF MIE JSON HTML XMP::SVG Palm Palm::MOBI Palm::EXTH
|
154
|
+
Torrent EXE EXE::PEVersion EXE::PEString EXE::MachO EXE::PEF EXE::ELF
|
155
|
+
EXE::AR EXE::CHM LNK Font VCard Text VCard::VCalendar VCard::VNote RSRC
|
156
|
+
Rawzor ZIP ZIP::GZIP ZIP::RAR ZIP::RAR5 RTF OOXML iWork ISO FLIR::AFF
|
157
|
+
FLIR::FPF MacOS MacOS::MDItem FlashPix::DocTable
|
158
158
|
);
|
159
159
|
|
160
160
|
# alphabetical list of current Lang modules
|
@@ -197,7 +197,7 @@ $defaultLang = 'en'; # default language
|
|
197
197
|
RAR 7Z BZ2 CZI TAR EXE EXR HDR CHM LNK WMF AVC DEX DPX RAW Font
|
198
198
|
RSRC M2TS MacOS PHP PCX DCX DWF DWG DXF WTV Torrent VCard LRI
|
199
199
|
R3D AA PDB PFM2 MRC LIF JXL MOI ISO ALIAS JSON MP3 DICOM PCD ICO
|
200
|
-
TXT);
|
200
|
+
TXT AAC);
|
201
201
|
|
202
202
|
# file types that we can write (edit)
|
203
203
|
my @writeTypes = qw(JPEG TIFF GIF CRW MRW ORF RAF RAW PNG MIE PSD XMP PPM EPS
|
@@ -206,6 +206,7 @@ my @writeTypes = qw(JPEG TIFF GIF CRW MRW ORF RAF RAW PNG MIE PSD XMP PPM EPS
|
|
206
206
|
my %writeTypes; # lookup for writable file types (hash filled if required)
|
207
207
|
|
208
208
|
# file extensions that we can't write for various base types
|
209
|
+
# (See here for 3FR reason: https://exiftool.org/forum/index.php?msg=17570)
|
209
210
|
%noWriteFile = (
|
210
211
|
TIFF => [ qw(3FR DCR K25 KDC SRF) ],
|
211
212
|
XMP => [ qw(SVG INX) ],
|
@@ -232,6 +233,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
|
|
232
233
|
'7Z' => ['7Z', '7z archive'],
|
233
234
|
A => ['EXE', 'Static library'],
|
234
235
|
AA => ['AA', 'Audible Audiobook'],
|
236
|
+
AAC => ['AAC', 'Advanced Audio Coding'],
|
235
237
|
AAE => ['PLIST','Apple edit information'],
|
236
238
|
AAX => ['MOV', 'Audible Enhanced Audiobook'],
|
237
239
|
ACR => ['DICOM','American College of Radiology ACR-NEMA'],
|
@@ -365,6 +367,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
|
|
365
367
|
JPC => 'J2C',
|
366
368
|
JPE => 'JPEG',
|
367
369
|
JPEG => ['JPEG', 'Joint Photographic Experts Group'],
|
370
|
+
JPH => ['JP2', 'High-throughput JPEG 2000'],
|
368
371
|
JPF => 'JP2',
|
369
372
|
JPG => 'JPEG',
|
370
373
|
JPM => ['JP2', 'JPEG 2000 compound image'],
|
@@ -596,6 +599,7 @@ my %fileDescription = (
|
|
596
599
|
'3FR' => 'image/x-hasselblad-3fr',
|
597
600
|
'7Z' => 'application/x-7z-compressed',
|
598
601
|
AA => 'audio/audible',
|
602
|
+
AAC => 'audio/aac',
|
599
603
|
AAE => 'application/vnd.apple.photos',
|
600
604
|
AI => 'application/vnd.adobe.illustrator',
|
601
605
|
AIFF => 'audio/x-aiff',
|
@@ -677,6 +681,7 @@ my %fileDescription = (
|
|
677
681
|
JNG => 'image/jng',
|
678
682
|
JP2 => 'image/jp2',
|
679
683
|
JPEG => 'image/jpeg',
|
684
|
+
JPH => 'image/jph',
|
680
685
|
JPM => 'image/jpm',
|
681
686
|
JPS => 'image/x-jps',
|
682
687
|
JPX => 'image/jpx',
|
@@ -891,6 +896,7 @@ $testLen = 1024; # number of bytes to read when testing for magic number
|
|
891
896
|
# - this test must not be more stringent than module logic
|
892
897
|
%magicNumber = (
|
893
898
|
AA => '.{4}\x57\x90\x75\x36',
|
899
|
+
AAC => '\xff[\xf0\xf1]',
|
894
900
|
AIFF => '(FORM....AIF[FC]|AT&TFORM)',
|
895
901
|
ALIAS=> "book\0\0\0\0mark\0\0\0\0",
|
896
902
|
APE => '(MAC |APETAGEX|ID3)',
|
@@ -1066,6 +1072,7 @@ my %xmpShorthandOpt = ( 0 => 'None', 1 => 'Shorthand', 2 => ['Shorthand','OneDes
|
|
1066
1072
|
my @availableOptions = (
|
1067
1073
|
[ 'Binary', undef, 'flag to extract binary values even if tag not specified' ],
|
1068
1074
|
[ 'ByteOrder', undef, 'default byte order when creating EXIF information' ],
|
1075
|
+
[ 'ByteUnit', 'SI', 'units for byte conversions (SI or Binary)'],
|
1069
1076
|
[ 'Charset', 'UTF8', 'character set for converting Unicode characters' ],
|
1070
1077
|
[ 'CharsetEXIF', undef, 'internal EXIF "ASCII" string encoding' ],
|
1071
1078
|
[ 'CharsetFileName', undef, 'external encoding for file names' ],
|
@@ -1112,6 +1119,7 @@ my @availableOptions = (
|
|
1112
1119
|
[ 'MakerNotes', undef, 'extract maker notes as a block' ],
|
1113
1120
|
[ 'MDItemTags', undef, 'extract MacOS metadata item tags' ],
|
1114
1121
|
[ 'MissingTagValue', undef, 'value for missing tags when expanded in expressions' ],
|
1122
|
+
[ 'NoMandatory', undef, 'bypass writing of mandatory EXIF tags' ],
|
1115
1123
|
[ 'NoMultiExif', undef, 'raise error when writing multi-segment EXIF' ],
|
1116
1124
|
[ 'NoPDFList', undef, 'flag to avoid splitting PDF List-type tag values' ],
|
1117
1125
|
[ 'NoWarning', undef, 'regular expression for warnings to suppress' ],
|
@@ -1307,8 +1315,9 @@ my %systemTagsNotes = (
|
|
1307
1315
|
FileSize => {
|
1308
1316
|
Groups => { 1 => 'System', 2 => 'Other' },
|
1309
1317
|
Notes => q{
|
1310
|
-
note that the print conversion for this tag uses
|
1311
|
-
|
1318
|
+
note that the print conversion for this tag uses SI prefixes by default: 1
|
1319
|
+
kB = 1000 bytes, etc. Set the API ByteUnit option to "Binary" to use binary
|
1320
|
+
prefixes instead: 1 KiB = 1024 bytes, etc.
|
1312
1321
|
},
|
1313
1322
|
PrintConv => \&ConvertFileSize,
|
1314
1323
|
},
|
@@ -2413,17 +2422,28 @@ sub Options($$;@)
|
|
2413
2422
|
}
|
2414
2423
|
$$options{$param} = $newVal;
|
2415
2424
|
} elsif ($param eq 'ImageHashType') {
|
2416
|
-
if (defined $newVal
|
2425
|
+
if (not defined $newVal) {
|
2426
|
+
warn("Can't set $param to undef\n");
|
2427
|
+
} elsif ($newVal =~ /^(MD5|SHA256|SHA512)$/i) {
|
2417
2428
|
$$options{$param} = uc($newVal);
|
2418
2429
|
} else {
|
2419
|
-
warn("Invalid $param setting '${newVal}'\n")
|
2430
|
+
warn("Invalid $param setting '${newVal}'\n");
|
2420
2431
|
}
|
2421
2432
|
} elsif ($param eq 'StructFormat') {
|
2422
2433
|
if (defined $newVal) {
|
2423
|
-
$newVal =~ /^(JSON|JSONQ)$/i or warn("Invalid $param setting '${newVal}'\n"),
|
2434
|
+
$newVal =~ /^(JSON|JSONQ)$/i or warn("Invalid $param setting '${newVal}'\n"), next;
|
2424
2435
|
$newVal = uc($newVal);
|
2425
2436
|
}
|
2426
2437
|
$$options{$param} = $newVal;
|
2438
|
+
} elsif ($param eq 'ByteUnit') {
|
2439
|
+
if (defined $newVal) {
|
2440
|
+
# (allow "Metric" or "SI" for SI, and "IT" or "Binary" for Binary)
|
2441
|
+
my $goodVal = ($newVal =~ /^S|M/i ? 'SI' : ($newVal =~ /^I|B/i ? 'Binary' : undef));
|
2442
|
+
$goodVal or warn("Invalid $param setting '${newVal}'\n"), next;
|
2443
|
+
$$options{$param} = $goodVal;
|
2444
|
+
} else {
|
2445
|
+
warn("Can't set $param to undef\n");
|
2446
|
+
}
|
2427
2447
|
} else {
|
2428
2448
|
if ($param eq 'Escape') {
|
2429
2449
|
# set ESCAPE_PROC
|
@@ -2548,7 +2568,7 @@ sub ExtractInfo($;@)
|
|
2548
2568
|
$self->WarnOnce('Install Time::HiRes to generate ProcessingTime');
|
2549
2569
|
}
|
2550
2570
|
}
|
2551
|
-
|
2571
|
+
|
2552
2572
|
# create Hash object if ImageDataHash is requested
|
2553
2573
|
if ($$req{imagedatahash} and not $$self{ImageDataHash}) {
|
2554
2574
|
my $imageHashType = $self->Options('ImageHashType');
|
@@ -3456,9 +3476,10 @@ sub GetValue($$;$)
|
|
3456
3476
|
} elsif (wantarray) {
|
3457
3477
|
# return array if requested
|
3458
3478
|
return @$value;
|
3459
|
-
} elsif ($type eq 'PrintConv' and not $$self{OPTIONS}{List}
|
3460
|
-
# join PrintConv values in
|
3479
|
+
} elsif ($type eq 'PrintConv' and not $$self{OPTIONS}{List}) {
|
3480
|
+
# join PrintConv values in delimited string if List option not used
|
3461
3481
|
# and list contains simple scalars (otherwise return ARRAY ref)
|
3482
|
+
ref and return $value foreach @$value;
|
3462
3483
|
$value = join $$self{OPTIONS}{ListSep}, @$value;
|
3463
3484
|
}
|
3464
3485
|
}
|
@@ -4159,12 +4180,16 @@ sub ExtractAltInfo($)
|
|
4159
4180
|
next unless defined $fileName;
|
4160
4181
|
}
|
4161
4182
|
$altExifTool->ExtractInfo($fileName);
|
4183
|
+
my $err = $$altExifTool{VALUE}{Error};
|
4184
|
+
$err and $self->Warn(qq{$err "$fileName"});
|
4162
4185
|
# set family 8 group name for all tags
|
4163
4186
|
foreach (keys %{$$altExifTool{VALUE}}) {
|
4164
4187
|
my $ex = $$altExifTool{TAG_EXTRA}{$_};
|
4165
4188
|
$ex or $ex = $$altExifTool{TAG_EXTRA}{$_} = { };
|
4166
4189
|
$$ex{G8} = $g8;
|
4167
4190
|
}
|
4191
|
+
# prepare our sorted list of found tags
|
4192
|
+
$$altExifTool{FoundTags} = [ reverse sort keys %{$$altExifTool{VALUE}} ];
|
4168
4193
|
$$altExifTool{DID_EXTRACT} = 1;
|
4169
4194
|
}
|
4170
4195
|
# if necessary, build composite tags that rely on tags from alternate files
|
@@ -6023,7 +6048,7 @@ sub ConvertDateTime($$)
|
|
6023
6048
|
++$a[5];
|
6024
6049
|
last; # (this was a goto)
|
6025
6050
|
}
|
6026
|
-
}
|
6051
|
+
}
|
6027
6052
|
}
|
6028
6053
|
$neg and $frac =~ s/^\.//;
|
6029
6054
|
$fmt =~ s/(^|[^%])((%%)*)%-?\.?\d*f/$1$2$frac/g;
|
@@ -6203,16 +6228,26 @@ sub GetUnixTime($;$)
|
|
6203
6228
|
# Print conversion for file size
|
6204
6229
|
# Inputs: 0) file size in bytes
|
6205
6230
|
# Returns: converted file size
|
6206
|
-
sub ConvertFileSize(
|
6207
|
-
{
|
6208
|
-
my $val =
|
6209
|
-
$
|
6210
|
-
|
6211
|
-
|
6212
|
-
|
6213
|
-
|
6214
|
-
|
6215
|
-
|
6231
|
+
sub ConvertFileSize($;$)
|
6232
|
+
{
|
6233
|
+
my ($val, $et) = @_;
|
6234
|
+
if ($et and $$et{OPTIONS}{ByteUnit} eq 'Binary') {
|
6235
|
+
$val < 2048 and return "$val bytes";
|
6236
|
+
$val < 10240 and return sprintf('%.1f KiB', $val / 1024);
|
6237
|
+
$val < 2097152 and return sprintf('%.0f KiB', $val / 1024);
|
6238
|
+
$val < 10485760 and return sprintf('%.1f MiB', $val / 1048576);
|
6239
|
+
$val < 2147483648 and return sprintf('%.0f MiB', $val / 1048576);
|
6240
|
+
$val < 10737418240 and return sprintf('%.1f GiB', $val / 1073741824);
|
6241
|
+
return sprintf('%.0f GiB', $val / 1073741824);
|
6242
|
+
} else {
|
6243
|
+
$val < 2000 and return "$val bytes";
|
6244
|
+
$val < 10000 and return sprintf('%.1f kB', $val / 1000);
|
6245
|
+
$val < 2000000 and return sprintf('%.0f kB', $val / 1000);
|
6246
|
+
$val < 10000000 and return sprintf('%.1f MB', $val / 1000000);
|
6247
|
+
$val < 2000000000 and return sprintf('%.0f MB', $val / 1000000);
|
6248
|
+
$val < 10000000000 and return sprintf('%.1f GB', $val / 1000000000);
|
6249
|
+
return sprintf('%.0f GB', $val / 1000000000);
|
6250
|
+
}
|
6216
6251
|
}
|
6217
6252
|
|
6218
6253
|
#------------------------------------------------------------------------------
|
@@ -6714,6 +6749,7 @@ sub ProcessJPEG($$)
|
|
6714
6749
|
pop @$path;
|
6715
6750
|
$verbose and print $out "JPEG EOI\n";
|
6716
6751
|
my $pos = $raf->Tell();
|
6752
|
+
$$self{TrailerStart} = $pos unless $$self{DOC_NUM};
|
6717
6753
|
if ($htmlDump and $dumpEnd) {
|
6718
6754
|
$self->HDump($dumpEnd, $pos-2-$dumpEnd, '[JPEG Image Data]', undef, 0x08);
|
6719
6755
|
$self->HDump($pos-2, 2, 'JPEG EOI', undef);
|
@@ -6852,8 +6888,10 @@ sub ProcessJPEG($$)
|
|
6852
6888
|
require Image::ExifTool::Panasonic;
|
6853
6889
|
Image::ExifTool::Panasonic::ProcessLeicaTrailer($self);
|
6854
6890
|
$wantTrailer = 1 if $$self{LeicaTrailer};
|
6855
|
-
}
|
6856
|
-
|
6891
|
+
} elsif ($$options{ExtractEmbedded} or ($$self{VALUE}{HiddenDataOffset} and
|
6892
|
+
$$self{VALUE}{HiddenDataLength} and ($$options{Validate} or $$req{hiddendata})))
|
6893
|
+
{
|
6894
|
+
$wantTrailer = 1;
|
6857
6895
|
}
|
6858
6896
|
next if $trailInfo or $wantTrailer or $verbose > 2 or $htmlDump;
|
6859
6897
|
}
|
@@ -7480,7 +7518,8 @@ sub ProcessJPEG($$)
|
|
7480
7518
|
my $hdr = $1;
|
7481
7519
|
$dumpType = 'JUMBF';
|
7482
7520
|
SetByteOrder('MM');
|
7483
|
-
|
7521
|
+
# (sequence should start from 1, but some software incorrectly writes 0)
|
7522
|
+
my $seq = Get32u($segDataPt, 4);
|
7484
7523
|
my $len = Get32u($segDataPt, 8);
|
7485
7524
|
my $type = substr($$segDataPt, 12, 4);
|
7486
7525
|
my $hdrLen;
|
@@ -7490,14 +7529,13 @@ sub ProcessJPEG($$)
|
|
7490
7529
|
} else {
|
7491
7530
|
$hdrLen = 8;
|
7492
7531
|
}
|
7493
|
-
$jumbfChunk{$type} or $jumbfChunk{$type} = [ ];
|
7532
|
+
$jumbfChunk{$type} or $jumbfChunk{$type} = [ '' ];
|
7494
7533
|
if ($len < $hdrLen) {
|
7495
7534
|
$self->Warn('Invalid JUMBF segment');
|
7496
|
-
} elsif ($seq
|
7497
|
-
$self->Warn('Invalid JUMBF sequence number');
|
7498
|
-
} elsif (defined $jumbfChunk{$type}[$seq]) {
|
7535
|
+
} elsif (defined $jumbfChunk{$type}[$seq] and length $jumbfChunk{$type}[$seq]) {
|
7499
7536
|
$self->Warn('Duplicate JUMBF sequence number');
|
7500
7537
|
} else {
|
7538
|
+
$seq or $self->Warn('Incorrect JUMBF sequence numbering (should start from 0, not 1)');
|
7501
7539
|
# add to list of JUMBF chunks
|
7502
7540
|
$jumbfChunk{$type}[$seq] = substr($$segDataPt, 8 + $hdrLen);
|
7503
7541
|
# check to see if we have a complete JUMBF box
|
@@ -7721,6 +7759,19 @@ sub ProcessTIFF($$;$)
|
|
7721
7759
|
return $rtnVal;
|
7722
7760
|
}
|
7723
7761
|
|
7762
|
+
#------------------------------------------------------------------------------
|
7763
|
+
# Process TIFF as a sub-document
|
7764
|
+
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) optional tag table ref
|
7765
|
+
# Returns: 1 if this looked like a valid EXIF block, 0 otherwise, or -1 on write error
|
7766
|
+
sub ProcessSubTIFF($$;$)
|
7767
|
+
{
|
7768
|
+
my ($self, $dirInfo, $tagTablePtr) = @_;
|
7769
|
+
$$self{DOC_NUM} = ++$$self{DOC_COUNT};
|
7770
|
+
my $rtnVal = $self->ProcessTIFF($dirInfo, $tagTablePtr);
|
7771
|
+
delete $$self{DOC_NUM};
|
7772
|
+
return $rtnVal;
|
7773
|
+
}
|
7774
|
+
|
7724
7775
|
#------------------------------------------------------------------------------
|
7725
7776
|
# Process TIFF data
|
7726
7777
|
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) optional tag table ref
|
@@ -7736,8 +7787,8 @@ sub DoProcessTIFF($$;$)
|
|
7736
7787
|
my ($err, $sig, $canonSig, $otherSig);
|
7737
7788
|
|
7738
7789
|
# attempt to read TIFF header
|
7739
|
-
$$self{EXIF_DATA} = '';
|
7740
7790
|
if ($raf) {
|
7791
|
+
$$self{EXIF_DATA} = '';
|
7741
7792
|
if ($outfile) {
|
7742
7793
|
$raf->Seek(0, 0) or return 0;
|
7743
7794
|
if ($base) {
|
@@ -8089,8 +8140,8 @@ sub DoProcessTIFF($$;$)
|
|
8089
8140
|
# check DNG version
|
8090
8141
|
if ($$self{DNGVersion}) {
|
8091
8142
|
my $ver = $$self{DNGVersion};
|
8092
|
-
# currently support up to DNG version 1.
|
8093
|
-
unless ($ver =~ /^(\d+) (\d+)/ and "$1.$2" <= 1.
|
8143
|
+
# currently support up to DNG version 1.7
|
8144
|
+
unless ($ver =~ /^(\d+) (\d+)/ and "$1.$2" <= 1.7) {
|
8094
8145
|
$ver =~ tr/ /./;
|
8095
8146
|
$self->Error("DNG Version $ver not yet tested", 1);
|
8096
8147
|
}
|
@@ -8359,7 +8410,7 @@ sub GetTagInfo($$$;$$$)
|
|
8359
8410
|
}
|
8360
8411
|
}
|
8361
8412
|
# don't return Unknown tags unless that option is set (also see forum13716)
|
8362
|
-
if ($$tagInfo{Unknown} and not $$self{OPTIONS}{Unknown} and not
|
8413
|
+
if ($$tagInfo{Unknown} and not $$self{OPTIONS}{Unknown} and not
|
8363
8414
|
($$self{OPTIONS}{Verbose} or $$self{HTML_DUMP} or
|
8364
8415
|
($$self{OPTIONS}{Validate} and not $$tagInfo{AddedUnknown})))
|
8365
8416
|
{
|
data/bin/lib/Image/ExifTool.pod
CHANGED
@@ -467,6 +467,12 @@ big-endian ('MM') order is assumed. This can also be set via the
|
|
467
467
|
L<ExifByteOrder tag|Image::ExifTool::TagNames/Extra Tags>, but the ByteOrder
|
468
468
|
option takes precedence if both are set.
|
469
469
|
|
470
|
+
=item ByteUnit
|
471
|
+
|
472
|
+
Units for print conversion of FileSize and other byte values. Either 'SI'
|
473
|
+
(eg. kB for 1000 bytes) or 'Binary' (eg. KiB for 1024 bytes). Default is
|
474
|
+
'SI'.
|
475
|
+
|
470
476
|
=item Charset
|
471
477
|
|
472
478
|
Character set for encoding character tag values passed to/from ExifTool with
|
@@ -554,12 +560,12 @@ without recoding. Default is 0.
|
|
554
560
|
Comma-delimited list of settings for writing compact XMP. Below is a list
|
555
561
|
of available settings. Note that 'NoPadding' effects only embedded XMP
|
556
562
|
since padding is never written for stand-alone XMP files. Also note that
|
557
|
-
'OneDesc' is not recommended when writing XMP larger than 64
|
563
|
+
'OneDesc' is not recommended when writing XMP larger than 64 KiB to a JPG
|
558
564
|
file because it interferes with ExifTool's technique of splitting off large
|
559
565
|
rdf:Description elements into the extended XMP. Case is not significant for
|
560
566
|
any of these options. Aliases are given in brackets. Default is undef.
|
561
567
|
|
562
|
-
NoPadding - Avoid 2
|
568
|
+
NoPadding - Avoid 2 KiB of recommended padding at end of XMP (NoPad)
|
563
569
|
NoIndent - No spaces to indent lines (NoSpace, NoSpaces)
|
564
570
|
NoNewline - Avoid unnecessary newlines (NoNewlines)
|
565
571
|
Shorthand - Use XMP Shorthand format
|
@@ -867,6 +873,10 @@ writing. This applies only to queued values, and doesn't resolve duplicates
|
|
867
873
|
with existing values in the file when adding to an existing list. Default
|
868
874
|
is undef.
|
869
875
|
|
876
|
+
=item NoMandatory
|
877
|
+
|
878
|
+
Flag to bypass writing of mandatory EXIF tags. Default is undef.
|
879
|
+
|
870
880
|
=item NoMultiExif
|
871
881
|
|
872
882
|
Raise error when attempting to write multi-segment EXIF in a JPEG image.
|
@@ -2415,23 +2425,24 @@ Here is a complete list of groups for each of these families:
|
|
2415
2425
|
|
2416
2426
|
=item Family 0 (Information Type):
|
2417
2427
|
|
2418
|
-
AFCP, AIFF, APE, APP0, APP1, APP11, APP12, APP13, APP14, APP15, APP2,
|
2419
|
-
APP4, APP5, APP6, APP8, ASF, Audible, CanonVRD, Composite, DICOM, DNG,
|
2420
|
-
DjVu, Ducky, EXE, EXIF, ExifTool, FITS, FLAC, FLIR, File, Flash,
|
2421
|
-
Font, FotoStation, GIF, GIMP, GeoTiff, GoPro, H264, HTML,
|
2422
|
-
IPTC, ISO, ITC, JFIF, JPEG, JSON, JUMBF, Jpeg2000, LNK,
|
2423
|
-
MIE, MIFF, MISB, MNG, MOI, MPC, MPEG, MPF, MXF,
|
2424
|
-
Ogg, OpenEXR, Opus, PDF, PICT, PLIST, PNG, PSP,
|
2425
|
-
|
2426
|
-
RIFF, RSRC, RTF, Radiance, Rawzor, Real, Red, SVG,
|
2427
|
-
Torrent, Trailer, UserParam, VCard, Vorbis, WTV,
|
2428
|
+
AAC, AFCP, AIFF, APE, APP0, APP1, APP11, APP12, APP13, APP14, APP15, APP2,
|
2429
|
+
APP3, APP4, APP5, APP6, APP8, ASF, Audible, CanonVRD, Composite, DICOM, DNG,
|
2430
|
+
DV, DjVu, Ducky, EXE, EXIF, ExifTool, FITS, FLAC, FLIR, File, Flash,
|
2431
|
+
FlashPix, Font, FotoStation, GIF, GIMP, GeoTiff, GoPro, H264, HTML,
|
2432
|
+
ICC_Profile, ID3, IPTC, ISO, ITC, JFIF, JPEG, JSON, JUMBF, Jpeg2000, LNK,
|
2433
|
+
Leaf, Lytro, M2TS, MIE, MIFF, MISB, MNG, MOI, MPC, MPEG, MPF, MXF,
|
2434
|
+
MakerNotes, Matroska, Meta, Ogg, OpenEXR, Opus, PDF, PICT, PLIST, PNG, PSP,
|
2435
|
+
Palm, Parrot, PanasonicRaw, PhotoCD, PhotoMechanic, Photoshop, PostScript,
|
2436
|
+
PrintIM, QuickTime, RAF, RIFF, RSRC, RTF, Radiance, Rawzor, Real, Red, SVG,
|
2437
|
+
SigmaRaw, Stim, Theora, Torrent, Trailer, UserParam, VCard, Vorbis, WTV,
|
2438
|
+
XML, XMP, ZIP
|
2428
2439
|
|
2429
2440
|
=item Family 1 (Specific Location):
|
2430
2441
|
|
2431
|
-
AC3, AFCP, AIFF, APE, ASF, AVI1, Adobe, AdobeCM, AdobeDNG, Apple,
|
2432
|
-
CBOR, CIFF, CameraIFD, Canon, CanonCustom, CanonDR4, CanonRaw,
|
2433
|
-
Casio, Chapter#, Composite, DICOM, DJI, DNG, DV, DjVu, DjVu-Meta,
|
2434
|
-
EPPIM, EXE, EXIF, ExifIFD, ExifTool, FITS, FLAC, FLIR, File, Flash,
|
2442
|
+
AAC, AC3, AFCP, AIFF, APE, ASF, AVI1, Adobe, AdobeCM, AdobeDNG, Apple,
|
2443
|
+
Audible, CBOR, CIFF, CameraIFD, Canon, CanonCustom, CanonDR4, CanonRaw,
|
2444
|
+
CanonVRD, Casio, Chapter#, Composite, DICOM, DJI, DNG, DV, DjVu, DjVu-Meta,
|
2445
|
+
Ducky, EPPIM, EXE, EXIF, ExifIFD, ExifTool, FITS, FLAC, FLIR, File, Flash,
|
2435
2446
|
FlashPix, Font, FotoStation, FujiFilm, FujiIFD, GE, GIF, GIMP, GPS,
|
2436
2447
|
GSpherical, Garmin, GeoTiff, GlobParamIFD, GoPro, GraphConv, H264, HP, HTC,
|
2437
2448
|
HTML, HTML-dc, HTML-ncc, HTML-office, HTML-prod, HTML-vw96, HTTP-equiv,
|
@@ -2440,7 +2451,7 @@ ICC_Profile#, ID3, ID3v1, ID3v1_Enh, ID3v2_2, ID3v2_3, ID3v2_4, IFD0, IFD1,
|
|
2440
2451
|
IPTC, IPTC#, ISO, ITC, InfiRay, Insta360, InteropIFD, ItemList, JFIF, JFXX,
|
2441
2452
|
JPEG, JPEG-HDR, JPS, JSON, JUMBF, JVC, Jpeg2000, KDC_IFD, Keys, Kodak,
|
2442
2453
|
KodakBordersIFD, KodakEffectsIFD, KodakIFD, KyoceraRaw, LNK, Leaf,
|
2443
|
-
LeafSubIFD, Leica, Lyrics3, Lytro, M2TS, MAC, MIE-Audio, MIE-Camera,
|
2454
|
+
LeafSubIFD, Leica, Lyrics3, Lytro, M-RAW, M2TS, MAC, MIE-Audio, MIE-Camera,
|
2444
2455
|
MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS, MIE-Geo, MIE-Image,
|
2445
2456
|
MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta, MIE-Orient, MIE-Preview,
|
2446
2457
|
MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video, MIFF, MISB, MNG, MOBI, MOI,
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Summary: perl module for image data extraction
|
2
2
|
Name: perl-Image-ExifTool
|
3
|
-
Version: 12.
|
3
|
+
Version: 12.72
|
4
4
|
Release: 1
|
5
5
|
License: Artistic/GPL
|
6
6
|
Group: Development/Libraries/Perl
|
@@ -22,13 +22,14 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
22
22
|
|
23
23
|
File Types
|
24
24
|
------------+-------------+-------------+-------------+------------
|
25
|
-
360 r/w |
|
26
|
-
3FR r |
|
27
|
-
3G2 r/w |
|
28
|
-
3GP r/w |
|
29
|
-
7Z r |
|
30
|
-
A r |
|
31
|
-
AA r |
|
25
|
+
360 r/w | DOCX r | ISO r | NRW r/w | RAR r
|
26
|
+
3FR r | DPX r | ITC r | NUMBERS r | RAW r/w
|
27
|
+
3G2 r/w | DR4 r/w/c | J2C r | O r | RIFF r
|
28
|
+
3GP r/w | DSS r | JNG r/w | ODP r | RSRC r
|
29
|
+
7Z r | DV r | JP2 r/w | ODS r | RTF r
|
30
|
+
A r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
|
31
|
+
AA r | DVR-MS r | JSON r | OFR r | RWL r/w
|
32
|
+
AAC r | DYLIB r | JXL r | OGG r | RWZ r
|
32
33
|
AAE r | EIP r | K25 r | OGV r | RM r
|
33
34
|
AAX r/w | EPS r/w | KDC r | ONP r | SEQ r
|
34
35
|
ACR r | EPUB r | KEY r | OPUS r | SKETCH r
|
@@ -64,7 +65,6 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
64
65
|
DLL r | INSP r/w | MXF r | RA r | XLSX r
|
65
66
|
DNG r/w | INSV r | NEF r/w | RAF r/w | XMP r/w/c
|
66
67
|
DOC r | INX r | NKSC r/w | RAM r | ZIP r
|
67
|
-
DOCX r | ISO r | NRW r/w | RAR r |
|
68
68
|
|
69
69
|
Meta Information
|
70
70
|
----------------------+----------------------+---------------------
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exiftool_vendored
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 12.
|
4
|
+
version: 12.72.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew McEachen
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-
|
12
|
+
date: 2023-12-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: exiftool
|
@@ -78,6 +78,7 @@ files:
|
|
78
78
|
- bin/lib/Image/ExifTool.pm
|
79
79
|
- bin/lib/Image/ExifTool.pod
|
80
80
|
- bin/lib/Image/ExifTool/7Z.pm
|
81
|
+
- bin/lib/Image/ExifTool/AAC.pm
|
81
82
|
- bin/lib/Image/ExifTool/AES.pm
|
82
83
|
- bin/lib/Image/ExifTool/AFCP.pm
|
83
84
|
- bin/lib/Image/ExifTool/AIFF.pm
|