exiftool_vendored 13.06.0 → 13.10.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.
- checksums.yaml +4 -4
- data/bin/Changes +55 -4
- data/bin/MANIFEST +1 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +29 -15
- data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/APE.pm +1 -1
- data/bin/lib/Image/ExifTool/ASF.pm +1 -1
- data/bin/lib/Image/ExifTool/Apple.pm +9 -7
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +12 -3
- data/bin/lib/Image/ExifTool/Canon.pm +19 -1
- data/bin/lib/Image/ExifTool/DJI.pm +1 -1
- data/bin/lib/Image/ExifTool/Exif.pm +2 -2
- data/bin/lib/Image/ExifTool/FITS.pm +2 -2
- data/bin/lib/Image/ExifTool/FLIF.pm +2 -2
- data/bin/lib/Image/ExifTool/FlashPix.pm +11 -11
- data/bin/lib/Image/ExifTool/Font.pm +1 -1
- data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- data/bin/lib/Image/ExifTool/HP.pm +1 -1
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +80 -1
- data/bin/lib/Image/ExifTool/ID3.pm +3 -3
- data/bin/lib/Image/ExifTool/IPTC.pm +2 -2
- data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +8 -7
- data/bin/lib/Image/ExifTool/M2TS.pm +39 -9
- data/bin/lib/Image/ExifTool/MXF.pm +2 -2
- data/bin/lib/Image/ExifTool/Matroska.pm +1 -1
- data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
- data/bin/lib/Image/ExifTool/PDF.pm +15 -15
- data/bin/lib/Image/ExifTool/PLIST.pm +3 -3
- data/bin/lib/Image/ExifTool/PNG.pm +6 -5
- data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
- data/bin/lib/Image/ExifTool/PhaseOne.pm +3 -3
- data/bin/lib/Image/ExifTool/Photoshop.pm +64 -3
- data/bin/lib/Image/ExifTool/Protobuf.pm +4 -4
- data/bin/lib/Image/ExifTool/QuickTime.pm +72 -24
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +336 -91
- data/bin/lib/Image/ExifTool/README +4 -1
- data/bin/lib/Image/ExifTool/RIFF.pm +3 -3
- data/bin/lib/Image/ExifTool/RTF.pm +1 -1
- data/bin/lib/Image/ExifTool/Ricoh.pm +3 -3
- data/bin/lib/Image/ExifTool/Sony.pm +2 -2
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +4 -3
- data/bin/lib/Image/ExifTool/TagLookup.pm +6982 -6970
- data/bin/lib/Image/ExifTool/TagNames.pod +48 -5
- data/bin/lib/Image/ExifTool/VCard.pm +2 -2
- data/bin/lib/Image/ExifTool/Validate.pm +3 -3
- data/bin/lib/Image/ExifTool/WriteExif.pl +2 -2
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +47 -13
- data/bin/lib/Image/ExifTool/WriteXMP.pl +2 -2
- data/bin/lib/Image/ExifTool/Writer.pl +32 -21
- data/bin/lib/Image/ExifTool/XMP.pm +9 -9
- data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
- data/bin/lib/Image/ExifTool.pm +65 -61
- data/bin/lib/Image/ExifTool.pod +41 -35
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -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 $advFmtSelf);
|
31
31
|
|
32
|
-
$VERSION = '13.
|
32
|
+
$VERSION = '13.10';
|
33
33
|
$RELEASE = '';
|
34
34
|
@ISA = qw(Exporter);
|
35
35
|
%EXPORT_TAGS = (
|
@@ -1142,6 +1142,7 @@ my @availableOptions = (
|
|
1142
1142
|
[ 'ListJoin', ', ', 'join lists together with this separator' ],
|
1143
1143
|
[ 'ListSep', ', ', '[deprecated, use ListSplit and ListJoin instead]', 1 ],
|
1144
1144
|
[ 'ListSplit', undef, 'regex for splitting list-type tag values when writing' ],
|
1145
|
+
# LigoGPSScale - undocumented scale for unfuzzing LIGO GPS: 1,2,3 for standard scales (1 default), or scale value
|
1145
1146
|
[ 'MakerNotes', undef, 'extract maker notes as a block' ],
|
1146
1147
|
[ 'MDItemTags', undef, 'extract MacOS metadata item tags' ],
|
1147
1148
|
[ 'MissingTagValue', undef, 'value for missing tags when expanded in expressions' ],
|
@@ -1173,7 +1174,7 @@ my @availableOptions = (
|
|
1173
1174
|
[ 'UserParam', { }, 'user parameters for additional user-defined tag values' ],
|
1174
1175
|
[ 'Validate', undef, 'perform additional validation' ],
|
1175
1176
|
[ 'Verbose', 0, 'print verbose messages (0-5, higher # = more verbose)' ],
|
1176
|
-
[ 'WindowsLongPath',
|
1177
|
+
[ 'WindowsLongPath', 1, 'enable support for long pathnames (enables WindowsWideFile)' ],
|
1177
1178
|
[ 'WindowsWideFile', undef, 'force the use of Windows wide-character file routines' ], # (see forum15208)
|
1178
1179
|
[ 'WriteMode', 'wcg', 'enable all write modes by default' ],
|
1179
1180
|
[ 'XAttrTags', undef, 'extract MacOS extended attribute tags' ],
|
@@ -1265,7 +1266,9 @@ my %systemTagsNotes = (
|
|
1265
1266
|
Use the -a or L<Duplicates|../ExifTool.html#Duplicates> option to see all warnings if more than one
|
1266
1267
|
occurred. Minor warnings may be ignored with the -m or L<IgnoreMinorErrors|../ExifTool.html#IgnoreMinorErrors>
|
1267
1268
|
option. Minor warnings with a capital "M" in the "[Minor]" designation
|
1268
|
-
indicate that the processing is affected by ignoring the warning
|
1269
|
+
indicate that the processing is affected by ignoring the warning. Multiple
|
1270
|
+
identical warnings are indicated by a count after the warning message, eg.
|
1271
|
+
"[x2]" if the same warning occurred twice
|
1269
1272
|
},
|
1270
1273
|
},
|
1271
1274
|
Comment => {
|
@@ -2661,7 +2664,7 @@ sub ExtractInfo($;@)
|
|
2661
2664
|
my $fast = $$options{FastScan} || 0;
|
2662
2665
|
my $req = $$self{REQ_TAG_LOOKUP};
|
2663
2666
|
my $reqAll = $$options{RequestAll} || 0;
|
2664
|
-
my (%saveOptions, $reEntry, $rsize, $zid, $type, @startTime, $saveOrder, $isDir);
|
2667
|
+
my (%saveOptions, $reEntry, $rsize, $zid, $type, @startTime, $saveOrder, $isDir, $i);
|
2665
2668
|
|
2666
2669
|
# check for internal ReEntry option to allow recursive calls to ExtractInfo
|
2667
2670
|
if (ref $_[1] eq 'HASH' and $_[1]{ReEntry} and
|
@@ -2718,7 +2721,7 @@ sub ExtractInfo($;@)
|
|
2718
2721
|
if ($$req{processingtime} or $reqAll) {
|
2719
2722
|
eval { require Time::HiRes; @startTime = Time::HiRes::gettimeofday() };
|
2720
2723
|
if (not @startTime and $$req{processingtime}) {
|
2721
|
-
$self->
|
2724
|
+
$self->Warn('Install Time::HiRes to generate ProcessingTime');
|
2722
2725
|
}
|
2723
2726
|
}
|
2724
2727
|
|
@@ -2729,12 +2732,12 @@ sub ExtractInfo($;@)
|
|
2729
2732
|
if (require Digest::SHA) {
|
2730
2733
|
$$self{ImageDataHash} = Digest::SHA->new($1);
|
2731
2734
|
} else {
|
2732
|
-
$self->
|
2735
|
+
$self->Warn("Install Digest::SHA to calculate image data SHA$1");
|
2733
2736
|
}
|
2734
2737
|
} elsif (require Digest::MD5) {
|
2735
2738
|
$$self{ImageDataHash} = Digest::MD5->new;
|
2736
2739
|
} else {
|
2737
|
-
$self->
|
2740
|
+
$self->Warn('Install Digest::MD5 to calculate image data MD5');
|
2738
2741
|
}
|
2739
2742
|
}
|
2740
2743
|
++$$self{FILE_SEQUENCE}; # count files read
|
@@ -2774,7 +2777,7 @@ sub ExtractInfo($;@)
|
|
2774
2777
|
$path =~ tr/\\/\// if $^O eq 'MSWin32'; # return forward slashes
|
2775
2778
|
$self->FoundTag('FilePath', $path);
|
2776
2779
|
} elsif ($$req{filepath}) {
|
2777
|
-
$self->
|
2780
|
+
$self->Warn('The Perl Cwd module must be installed to use FilePath');
|
2778
2781
|
}
|
2779
2782
|
}
|
2780
2783
|
# get size of resource fork on Mac OS
|
@@ -3113,6 +3116,15 @@ sub ExtractInfo($;@)
|
|
3113
3116
|
# and as such it can't be used in user-defined Composite tags
|
3114
3117
|
@startTime and $self->FoundTag('ProcessingTime', Time::HiRes::tv_interval(\@startTime));
|
3115
3118
|
|
3119
|
+
# add numbers to warnings with multiple occurrences
|
3120
|
+
if (%{$$self{WAS_WARNED}}) {
|
3121
|
+
my ($tag, $val) = ( 'Warning', $$self{VALUE} );
|
3122
|
+
for ($i=1; $$val{$tag}; ++$i) {
|
3123
|
+
my $n = $$self{WAS_WARNED}{$$val{$tag}};
|
3124
|
+
$$val{$tag} .= " [x$n]" if $n and $n > 1;
|
3125
|
+
$tag = "Warning ($i)";
|
3126
|
+
}
|
3127
|
+
}
|
3116
3128
|
# restore original options
|
3117
3129
|
%saveOptions and $$self{OPTIONS} = \%saveOptions;
|
3118
3130
|
|
@@ -4252,7 +4264,7 @@ sub Init($)
|
|
4252
4264
|
$$self{PROCESSED} = { }; # hash of processed directory start positions
|
4253
4265
|
$$self{DIR_COUNT} = { }; # count various types of directories
|
4254
4266
|
$$self{DUPL_TAG} = { }; # last-used index for duplicate-tag keys
|
4255
|
-
$$self{
|
4267
|
+
$$self{WAS_WARNED} = { }; # number of times each warning was issued
|
4256
4268
|
$$self{WRITTEN} = { }; # list of tags written (selected tags only)
|
4257
4269
|
$$self{FORCE_WRITE}= { }; # ForceWrite lookup (set from ForceWrite tag)
|
4258
4270
|
$$self{FOUND_DIR} = { }; # hash of directory names found in file
|
@@ -4626,13 +4638,14 @@ sub SplitFileName($)
|
|
4626
4638
|
sub EncodeFileName($$;$)
|
4627
4639
|
{
|
4628
4640
|
my ($self, $file, $force) = @_;
|
4641
|
+
return 0 if $file eq '-'; # special case for stdin pipe
|
4629
4642
|
my $enc = $$self{OPTIONS}{CharsetFileName};
|
4630
4643
|
my $hasSpecialChars;
|
4631
4644
|
if ($file =~ /[\x80-\xff]/) {
|
4632
4645
|
$hasSpecialChars = 1;
|
4633
4646
|
if (not $enc and $^O eq 'MSWin32') {
|
4634
4647
|
if (IsUTF8(\$file) < 0) {
|
4635
|
-
$self->
|
4648
|
+
$self->Warn('FileName encoding must be specified') if not defined $enc;
|
4636
4649
|
return 0;
|
4637
4650
|
} else {
|
4638
4651
|
$enc = 'UTF8'; # assume UTF8
|
@@ -4649,7 +4662,7 @@ sub EncodeFileName($$;$)
|
|
4649
4662
|
$_[1] = $self->Decode($file, $enc, undef, 'UTF16', 'II') . "\0\0";
|
4650
4663
|
return 1;
|
4651
4664
|
}
|
4652
|
-
$self->
|
4665
|
+
$self->Warn('Install Win32API::File for Windows wide/long file name support');
|
4653
4666
|
} elsif ($enc ne 'UTF8') {
|
4654
4667
|
# recode as UTF-8 for other platforms if necessary
|
4655
4668
|
$_[1] = $self->Decode($file, $enc, undef, 'UTF8');
|
@@ -4697,13 +4710,13 @@ sub WindowsLongPath($$)
|
|
4697
4710
|
$debug and print $out "WindowsLongPath input : $path$suffix\n";
|
4698
4711
|
|
4699
4712
|
for (;;) { # (cheap goto)
|
4700
|
-
($longPath = $path) =~ tr(/)(\\); # convert slashes to backslashes
|
4713
|
+
($longPath = $path) =~ tr(/)(\\); # convert slashes to backslashes
|
4701
4714
|
last if $longPath =~ /^\\\\\?\\/; # already a device path in the format we want
|
4702
|
-
|
4715
|
+
|
4703
4716
|
unless ($k32GetFullPathName) { # need to import (once) GetFullPathNameW
|
4704
4717
|
last if defined $k32GetFullPathName;
|
4705
4718
|
unless (eval { require Win32::API }) {
|
4706
|
-
$self->
|
4719
|
+
$self->Warn('Install Win32::API to use WindowsLongPath option');
|
4707
4720
|
last;
|
4708
4721
|
}
|
4709
4722
|
$k32GetFullPathName = Win32::API->new('KERNEL32', 'GetFullPathNameW', 'PNPP', 'I');
|
@@ -4713,13 +4726,13 @@ sub WindowsLongPath($$)
|
|
4713
4726
|
last;
|
4714
4727
|
}
|
4715
4728
|
}
|
4716
|
-
my $enc = $$self{OPTIONS}{CharsetFileName};
|
4717
|
-
my $encPath = $self->
|
4729
|
+
my $enc = $$self{OPTIONS}{CharsetFileName} || 'UTF8';
|
4730
|
+
my $encPath = $self->Decode($longPath, $enc, undef, 'UTF16', 'II');# need to encode to UTF16
|
4718
4731
|
my $lenReq = $k32GetFullPathName->Call($encPath,0,0,0) + 1; # first pass gets length required, +1 for safety (null?)
|
4719
4732
|
my $fullPath = "\0" x $lenReq x 2; # create buffer to hold full path
|
4720
4733
|
$k32GetFullPathName->Call($encPath, $lenReq, $fullPath, 0); # fullPath is UTF16 now
|
4721
4734
|
$longPath = $self->Decode($fullPath, 'UTF16', 'II', $enc);
|
4722
|
-
|
4735
|
+
|
4723
4736
|
last if length($longPath) <= 247 - length($suffix);
|
4724
4737
|
|
4725
4738
|
if ($longPath =~ /^\\\\/) {
|
@@ -4916,9 +4929,9 @@ sub GetFileTime($$)
|
|
4916
4929
|
# on Windows, try to work around incorrect file times when daylight saving time is in effect
|
4917
4930
|
if ($^O eq 'MSWin32') {
|
4918
4931
|
if (not eval { require Win32::API }) {
|
4919
|
-
$self->
|
4932
|
+
$self->Warn('Install Win32::API for proper handling of Windows file times', 1);
|
4920
4933
|
} elsif (not eval { require Win32API::File }) {
|
4921
|
-
$self->
|
4934
|
+
$self->Warn('Install Win32API::File for proper handling of Windows file times', 1);
|
4922
4935
|
} else {
|
4923
4936
|
# get Win32 handle, needed for GetFileTime
|
4924
4937
|
my $win32Handle = eval { Win32API::File::GetOsFHandle($file) };
|
@@ -5494,28 +5507,21 @@ sub AddCleanup($)
|
|
5494
5507
|
sub Warn($$;$)
|
5495
5508
|
{
|
5496
5509
|
my ($self, $str, $ignorable) = @_;
|
5497
|
-
my $noWarn =
|
5510
|
+
my $noWarn = $$self{OPTIONS}{NoWarning};
|
5498
5511
|
if ($ignorable) {
|
5499
5512
|
return 0 if $$self{OPTIONS}{IgnoreMinorErrors};
|
5500
5513
|
return 0 if $ignorable eq '3' and $$self{OPTIONS}{Validate};
|
5501
5514
|
return 1 if defined $noWarn and eval { $str =~ /$noWarn/ };
|
5502
5515
|
$str = $ignorable eq '2' ? "[Minor] $str" : "[minor] $str";
|
5503
5516
|
}
|
5504
|
-
|
5505
|
-
|
5506
|
-
}
|
5507
|
-
|
5508
|
-
|
5509
|
-
|
5510
|
-
|
5511
|
-
|
5512
|
-
sub WarnOnce($$;$)
|
5513
|
-
{
|
5514
|
-
my ($self, $str, $ignorable) = @_;
|
5515
|
-
return 0 if $ignorable and $$self{OPTIONS}{IgnoreMinorErrors};
|
5516
|
-
unless ($$self{WARNED_ONCE}{$str}) {
|
5517
|
-
$self->Warn($str, $ignorable);
|
5518
|
-
$$self{WARNED_ONCE}{$str} = 1;
|
5517
|
+
unless (defined $noWarn and eval { $str =~ /$noWarn/ }) {
|
5518
|
+
# add each warning only once but count number of occurrences
|
5519
|
+
if ($$self{WAS_WARNED}{$str}) {
|
5520
|
+
++$$self{WAS_WARNED}{$str};
|
5521
|
+
} else {
|
5522
|
+
$self->FoundTag('Warning', $str);
|
5523
|
+
$$self{WAS_WARNED}{$str} = 1;
|
5524
|
+
}
|
5519
5525
|
}
|
5520
5526
|
return 1;
|
5521
5527
|
}
|
@@ -6246,7 +6252,7 @@ sub Decode($$$;$$$)
|
|
6246
6252
|
}
|
6247
6253
|
|
6248
6254
|
#------------------------------------------------------------------------------
|
6249
|
-
# Encode string
|
6255
|
+
# Encode string (in Charset encoding) to specified encoding
|
6250
6256
|
# Inputs: 0) ExifTool object ref, 1) string, 2) destination character set name,
|
6251
6257
|
# 3) optional destination byte order (2-byte and 4-byte fixed-width sets only)
|
6252
6258
|
# Returns: string in specified encoding
|
@@ -6545,11 +6551,13 @@ sub ConvertDateTime($$)
|
|
6545
6551
|
$fmt =~ s/(^|[^%])((%%)*)%-?\.?\d*f/$1$2$frac/g;
|
6546
6552
|
}
|
6547
6553
|
# parse %z and %s ourself (to handle time zones properly)
|
6548
|
-
if ($fmt =~
|
6554
|
+
if ($fmt =~ /%:?[sz]/) {
|
6549
6555
|
# use system time zone unless otherwise specified
|
6550
6556
|
$tz = TimeZoneString(\@a, TimeLocal(@a)) if not $tz and eval { require Time::Local };
|
6551
6557
|
# remove colon, setting to UTC if time zone is not numeric
|
6552
|
-
$tz =
|
6558
|
+
$tz = '+00:00' unless $tz and $tz=~/^[-+]\d{2}:\d{2}$/;
|
6559
|
+
$fmt =~ s/(^|[^%])((%%)*)%:z/$1$2$tz/g; # convert '%:z' format codes
|
6560
|
+
$tz =~ s/://;
|
6553
6561
|
$fmt =~ s/(^|[^%])((%%)*)%z/$1$2$tz/g; # convert '%z' format codes
|
6554
6562
|
if ($fmt =~ /%s/ and eval { require Time::Local }) {
|
6555
6563
|
# calculate seconds since the Epoch, UTC
|
@@ -7590,13 +7598,13 @@ sub ProcessJPEG($$;$)
|
|
7590
7598
|
my ($size, $off) = unpack('x67N2', $$segDataPt);
|
7591
7599
|
my $guid = substr($$segDataPt, 35, 32);
|
7592
7600
|
if ($guid =~ /[^A-Za-z0-9]/) { # (technically, should be uppercase)
|
7593
|
-
$self->
|
7601
|
+
$self->Warn($tip = 'Invalid extended XMP GUID');
|
7594
7602
|
} else {
|
7595
7603
|
my $extXMP = $extendedXMP{$guid};
|
7596
7604
|
if (not $extXMP) {
|
7597
7605
|
$extXMP = $extendedXMP{$guid} = { };
|
7598
7606
|
} elsif ($size != $$extXMP{Size}) {
|
7599
|
-
$self->
|
7607
|
+
$self->Warn('Inconsistent extended XMP size');
|
7600
7608
|
}
|
7601
7609
|
$$extXMP{Size} = $size;
|
7602
7610
|
$$extXMP{$off} = substr($$segDataPt, 75);
|
@@ -7605,7 +7613,7 @@ sub ProcessJPEG($$;$)
|
|
7605
7613
|
# (delay processing extended XMP until after reading all segments)
|
7606
7614
|
}
|
7607
7615
|
} else {
|
7608
|
-
$self->
|
7616
|
+
$self->Warn($tip = 'Invalid extended XMP segment');
|
7609
7617
|
}
|
7610
7618
|
} elsif ($$segDataPt =~ /^QVCI\0/) {
|
7611
7619
|
$dumpType = 'QVCI';
|
@@ -7628,7 +7636,7 @@ sub ProcessJPEG($$;$)
|
|
7628
7636
|
}
|
7629
7637
|
if (defined $flirCount) {
|
7630
7638
|
if (defined $flirChunk[$chunkNum]) {
|
7631
|
-
$self->
|
7639
|
+
$self->Warn('Duplicate FLIR chunk number(s)');
|
7632
7640
|
$flirChunk[$chunkNum] .= substr($$segDataPt, 8);
|
7633
7641
|
} else {
|
7634
7642
|
$flirChunk[$chunkNum] = substr($$segDataPt, 8);
|
@@ -7648,7 +7656,7 @@ sub ProcessJPEG($$;$)
|
|
7648
7656
|
undef $flirCount; # prevent reprocessing
|
7649
7657
|
}
|
7650
7658
|
} else {
|
7651
|
-
$self->
|
7659
|
+
$self->Warn('Invalid or extraneous FLIR chunk(s)');
|
7652
7660
|
}
|
7653
7661
|
} elsif ($$segDataPt =~ /^PARROT\0(II\x2a\0|MM\0\x2a)/) {
|
7654
7662
|
# (don't know if this could span multiple segments)
|
@@ -7693,7 +7701,7 @@ sub ProcessJPEG($$;$)
|
|
7693
7701
|
}
|
7694
7702
|
if (defined $iccChunkCount) {
|
7695
7703
|
if (defined $iccChunk[$chunkNum]) {
|
7696
|
-
$self->
|
7704
|
+
$self->Warn('Duplicate ICC_Profile chunk number(s)');
|
7697
7705
|
$iccChunk[$chunkNum] .= substr($$segDataPt, 14);
|
7698
7706
|
} else {
|
7699
7707
|
$iccChunk[$chunkNum] = substr($$segDataPt, 14);
|
@@ -7716,7 +7724,7 @@ sub ProcessJPEG($$;$)
|
|
7716
7724
|
undef $iccChunkCount; # prevent reprocessing
|
7717
7725
|
}
|
7718
7726
|
} else {
|
7719
|
-
$self->
|
7727
|
+
$self->Warn('Invalid or extraneous ICC_Profile chunk(s)');
|
7720
7728
|
}
|
7721
7729
|
} elsif ($$segDataPt =~ /^FPXR\0/) {
|
7722
7730
|
next if $fast > 1; # skip processing for very fast
|
@@ -8060,7 +8068,7 @@ sub ProcessJPEG($$;$)
|
|
8060
8068
|
my $type = substr($$segDataPt, 12, 4);
|
8061
8069
|
# a Microsoft bug writes $len and $type incorrectly as little-endian
|
8062
8070
|
if ($type eq 'bmuj') {
|
8063
|
-
$self->
|
8071
|
+
$self->Warn('Wrong byte order in C2PA APP11 JUMBF header');
|
8064
8072
|
$type = 'jumb';
|
8065
8073
|
$len = unpack('x8V', $$segDataPt);
|
8066
8074
|
# fix the header
|
@@ -8737,23 +8745,18 @@ sub GetTagTable($)
|
|
8737
8745
|
# try to load module for this table
|
8738
8746
|
if ($tableName =~ /(.*)::/) {
|
8739
8747
|
my $module = $1;
|
8740
|
-
if (eval "require $module") {
|
8748
|
+
if (not eval "require $module") {
|
8749
|
+
$@ and warn $@;
|
8750
|
+
} elsif (not %$tableName) {
|
8741
8751
|
# load additional modules if required
|
8742
|
-
if (
|
8743
|
-
|
8744
|
-
|
8745
|
-
|
8746
|
-
require 'Image/ExifTool/QuickTimeStream.pl';
|
8747
|
-
}
|
8752
|
+
if ($module eq 'Image::ExifTool::XMP') {
|
8753
|
+
require 'Image/ExifTool/XMP2.pl';
|
8754
|
+
} elsif ($tableName eq 'Image::ExifTool::QuickTime::Stream') {
|
8755
|
+
require 'Image/ExifTool/QuickTimeStream.pl';
|
8748
8756
|
}
|
8749
|
-
} else {
|
8750
|
-
$@ and warn $@;
|
8751
8757
|
}
|
8752
8758
|
}
|
8753
|
-
|
8754
|
-
warn "Can't find table $tableName\n";
|
8755
|
-
return undef;
|
8756
|
-
}
|
8759
|
+
%$tableName or warn("Can't find table $tableName\n"), return undef;
|
8757
8760
|
}
|
8758
8761
|
no strict 'refs';
|
8759
8762
|
$table = \%$tableName;
|
@@ -8960,8 +8963,9 @@ sub GetTagInfo($$$;$$$)
|
|
8960
8963
|
next;
|
8961
8964
|
}
|
8962
8965
|
}
|
8963
|
-
# don't return Unknown tags unless that option is set (also see forum13716)
|
8964
|
-
if ($$tagInfo{Unknown} and not $$options{Unknown} and
|
8966
|
+
# don't return Unknown tags unless that option is set or we are writing (also see forum13716)
|
8967
|
+
if ($$tagInfo{Unknown} and not $$options{Unknown} and
|
8968
|
+
(not $$self{IsWriting} or $$tagInfo{AddedUnknown}) and not
|
8965
8969
|
($$options{Verbose} or $$self{HTML_DUMP} or
|
8966
8970
|
($$options{Validate} and not $$tagInfo{AddedUnknown})))
|
8967
8971
|
{
|
data/bin/lib/Image/ExifTool.pod
CHANGED
@@ -613,8 +613,10 @@ different when copying tags with L</SetNewValuesFromFile>.
|
|
613
613
|
Format for printing date/time values. See C<strftime> in the L<POSIX>
|
614
614
|
package and L<https://exiftool.org/filename.html#codes> for details about
|
615
615
|
the format string. If the date can not be converted, the value is left
|
616
|
-
unchanged unless the StrictDate option is set.
|
617
|
-
|
616
|
+
unchanged unless the StrictDate option is set. ExifTool adds a few
|
617
|
+
additional format specifiers (C<%f>, C<%s> and C<%z>), see
|
618
|
+
L<https://exiftool.org/filename.html#codes> for more details. The inverse
|
619
|
+
conversion (ie. when calling L</SetNewValue>) is performed only if
|
618
620
|
POSIX::strptime or Time::Piece is installed. The default setting of undef
|
619
621
|
causes date/time values to remain in standard EXIF format (similar to a
|
620
622
|
DateFormat of "%Y:%m:%d %H:%M:%S").
|
@@ -2559,39 +2561,39 @@ Ducky, EPPIM, EXE, EXIF, ExifIFD, ExifTool, FITS, FLAC, FLIR, File, Flash,
|
|
2559
2561
|
FlashPix, Font, FotoStation, FujiFilm, FujiIFD, GE, GIF, GIMP, GM, GPS,
|
2560
2562
|
GSpherical, Garmin, GeoTiff, GlobParamIFD, GoPro, GraphConv, H264, HP, HTC,
|
2561
2563
|
HTML, HTML-dc, HTML-ncc, HTML-office, HTML-prod, HTML-vw96, HTTP-equiv,
|
2562
|
-
ICC-chrm, ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-view,
|
2563
|
-
ICC_Profile#, ID3, ID3v1, ID3v1_Enh, ID3v2_2, ID3v2_3, ID3v2_4,
|
2564
|
-
IPTC, IPTC#, ISO, ITC, InfiRay, Insta360, InteropIFD, ItemList,
|
2565
|
-
JPEG, JPEG-HDR, JPS, JSON, JUMBF, JVC, Jpeg2000, KDC_IFD, Keys,
|
2566
|
-
KodakBordersIFD, KodakEffectsIFD, KodakIFD, KyoceraRaw,
|
2567
|
-
LeafSubIFD, Leica, Lyrics3, Lytro, M-RAW, M2TS, MAC, MIE-Audio,
|
2568
|
-
MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS, MIE-Geo,
|
2569
|
-
MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta, MIE-Orient,
|
2570
|
-
MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video, MIFF, MISB,
|
2571
|
-
MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS, MakerNotes,
|
2572
|
-
Matroska, MediaJukebox, Meta, MetaIFD, Microsoft, Minolta,
|
2573
|
-
Motorola, NITF, Nextbase, Nikon, NikonCapture, NikonCustom,
|
2574
|
-
NikonSettings, NineEdits, Nintendo, Ocad, Ogg, Olympus, OpenEXR,
|
2575
|
-
PICT, PNG, PNG-cICP, PNG-pHYs, PSP, Palm, Panasonic,
|
2576
|
-
Pentax, PhaseOne, PhotoCD, PhotoMechanic, Photoshop,
|
2577
|
-
PostScript, PreviewIFD, PrintIM, ProfileIFD, Qualcomm,
|
2578
|
-
RIFF, RMETA, RSRC, RTF, Radiance, Rawzor, Real,
|
2579
|
-
Real-PROP, Real-RA3, Real-RA4, Real-RA5, Real-RJMD,
|
2580
|
-
SEAL, SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#, SVG,
|
2581
|
-
Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD,
|
2582
|
-
Track#, UserData, VCalendar, VCard, VNote,
|
2583
|
-
|
2584
|
-
XMP-
|
2585
|
-
XMP-
|
2586
|
-
XMP-
|
2587
|
-
XMP-
|
2588
|
-
XMP-digiKam, XMP-drone-dji, XMP-dwc, XMP-et, XMP-exif,
|
2589
|
-
XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-hdr,
|
2590
|
-
XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro,
|
2591
|
-
XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-nine, XMP-panorama,
|
2592
|
-
XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-pmi,
|
2593
|
-
XMP-prl, XMP-prm, XMP-pur, XMP-rdf, XMP-sdc, XMP-swf, XMP-tiff,
|
2594
|
-
XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpDSA, XMP-xmpMM, XMP-xmpNote,
|
2564
|
+
ICC-chrm, ICC-cicp, ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-view,
|
2565
|
+
ICC_Profile, ICC_Profile#, ID3, ID3v1, ID3v1_Enh, ID3v2_2, ID3v2_3, ID3v2_4,
|
2566
|
+
IFD0, IFD1, IPTC, IPTC#, ISO, ITC, InfiRay, Insta360, InteropIFD, ItemList,
|
2567
|
+
JFIF, JFXX, JPEG, JPEG-HDR, JPS, JSON, JUMBF, JVC, Jpeg2000, KDC_IFD, Keys,
|
2568
|
+
Kodak, KodakBordersIFD, KodakEffectsIFD, KodakIFD, KyoceraRaw, LIGO, LNK,
|
2569
|
+
Leaf, LeafSubIFD, Leica, Lyrics3, Lytro, M-RAW, M2TS, MAC, MIE-Audio,
|
2570
|
+
MIE-Camera, MIE-Canon, MIE-Doc, MIE-Extender, MIE-Flash, MIE-GPS, MIE-Geo,
|
2571
|
+
MIE-Image, MIE-Lens, MIE-Main, MIE-MakerNotes, MIE-Meta, MIE-Orient,
|
2572
|
+
MIE-Preview, MIE-Thumbnail, MIE-UTM, MIE-Unknown, MIE-Video, MIFF, MISB,
|
2573
|
+
MNG, MOBI, MOI, MPC, MPEG, MPF0, MPImage, MS-DOC, MXF, MacOS, MakerNotes,
|
2574
|
+
MakerUnknown, Matroska, MediaJukebox, Meta, MetaIFD, Microsoft, Minolta,
|
2575
|
+
MinoltaRaw, Motorola, NITF, Nextbase, Nikon, NikonCapture, NikonCustom,
|
2576
|
+
NikonScan, NikonSettings, NineEdits, Nintendo, Ocad, Ogg, Olympus, OpenEXR,
|
2577
|
+
Opus, PDF, PICT, PNG, PNG-cICP, PNG-pHYs, PSP, Palm, Panasonic,
|
2578
|
+
PanasonicRaw, Parrot, Pentax, PhaseOne, PhotoCD, PhotoMechanic, Photoshop,
|
2579
|
+
PictureInfo, PostScript, PreviewIFD, PrintIM, ProfileIFD, Qualcomm,
|
2580
|
+
QuickTime, RAF, RAF2, RIFF, RMETA, RSRC, RTF, Radiance, Rawzor, Real,
|
2581
|
+
Real-CONT, Real-MDPR, Real-PROP, Real-RA3, Real-RA4, Real-RA5, Real-RJMD,
|
2582
|
+
Reconyx, Red, Ricoh, SEAL, SPIFF, SR2, SR2DataIFD, SR2SubIFD, SRF#, SVG,
|
2583
|
+
Samsung, Sanyo, Scalado, Sigma, SigmaRaw, Sony, SonyIDC, Stim, SubIFD,
|
2584
|
+
System, Theora, Torrent, Track#, UserData, VCalendar, VCard, VNote,
|
2585
|
+
Version0, Vorbis, WTV, XML, XMP, XMP-DICOM, XMP-Device, XMP-GAudio,
|
2586
|
+
XMP-GCamera, XMP-GContainer, XMP-GCreations, XMP-GDepth, XMP-GFocus,
|
2587
|
+
XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage, XMP-MP, XMP-MP1,
|
2588
|
+
XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-acdsee-rs, XMP-album, XMP-apple-fi,
|
2589
|
+
XMP-ast, XMP-aux, XMP-cc, XMP-cell, XMP-crd, XMP-creatorAtom, XMP-crs,
|
2590
|
+
XMP-dc, XMP-dex, XMP-digiKam, XMP-drone-dji, XMP-dwc, XMP-et, XMP-exif,
|
2591
|
+
XMP-exifEX, XMP-expressionmedia, XMP-extensis, XMP-fpv, XMP-getty, XMP-hdr,
|
2592
|
+
XMP-hdrgm, XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro,
|
2593
|
+
XMP-microsoft, XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-nine, XMP-panorama,
|
2594
|
+
XMP-pdf, XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-pmi,
|
2595
|
+
XMP-prism, XMP-prl, XMP-prm, XMP-pur, XMP-rdf, XMP-sdc, XMP-swf, XMP-tiff,
|
2596
|
+
XMP-x, XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpDSA, XMP-xmpMM, XMP-xmpNote,
|
2595
2597
|
XMP-xmpPLUS, XMP-xmpRights, XMP-xmpTPg, ZIP, iTunes
|
2596
2598
|
|
2597
2599
|
=item Family 2 (Category):
|
@@ -2832,6 +2834,10 @@ for the system. In Windows this also has the effect of activating Unicode
|
|
2832
2834
|
filename support via the special Windows wide-character i/o routines if
|
2833
2835
|
Win32API::File is available.
|
2834
2836
|
|
2837
|
+
Note that setting the L</WindowsWideFile> or L</WindowsLongPath> option
|
2838
|
+
causes L</CharsetFileName> to default to 'UTF8' in Windows if not defined,
|
2839
|
+
and L</WindowsLongPath> is set by default in ExifTool 13.07 and later.
|
2840
|
+
|
2835
2841
|
=item Internal Character Sets:
|
2836
2842
|
|
2837
2843
|
The encodings used to store strings in the various metadata formats. These
|
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: 13.
|
4
|
+
version: 13.10.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: 2024-12-
|
12
|
+
date: 2024-12-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: exiftool
|