exiftool_vendored 13.06.0 → 13.10.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 +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
|