exiftool_vendored 12.97.0 → 12.98.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 +9 -1
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +9 -8
- data/bin/lib/File/RandomAccess.pm +5 -2
- data/bin/lib/Image/ExifTool/InDesign.pm +4 -3
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +2 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +8 -0
- data/bin/lib/Image/ExifTool/QuickTime.pm +7 -6
- data/bin/lib/Image/ExifTool/Sony.pm +6 -1
- data/bin/lib/Image/ExifTool/TagNames.pod +3 -3
- data/bin/lib/Image/ExifTool/WritePDF.pl +47 -21
- data/bin/lib/Image/ExifTool/XMP.pm +8 -3
- data/bin/lib/Image/ExifTool.pm +11 -8
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c1a9880dae5035dc08ddc167d771f69b84d15bc6e5f8d4bcb2eb410c22dd531f
|
|
4
|
+
data.tar.gz: 6e3b103009afb397df4213f33c9f695a961a153b647264dadfbf3917aba063fc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a09fd4ca266dd56cac58e246d5a899f34d90f0a93749e9b522129bb3d009e3d36b8ecef7187e54caf6c0a775ab7a9a234e32608b45ae08b778e4de9d3747872b
|
|
7
|
+
data.tar.gz: 4119e87dd640a1c9ee73041b5fb915b5cbfbee7c21689ebdefa826f933a35e29e40d7ec5cd952c68b62ab90c5cc544292346e7a45581f355b92ba7a49ca76ec1
|
data/bin/Changes
CHANGED
|
@@ -7,6 +7,14 @@ RSS feed: https://exiftool.org/rss.xml
|
|
|
7
7
|
Note: The most recent production release is Version 12.76. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
Oct. 8, 2024 - Version 12.98
|
|
11
|
+
|
|
12
|
+
- Added write support for PDF files with huge offsets
|
|
13
|
+
- Added a number of new Sony LensType values (thanks Jos Roost)
|
|
14
|
+
- Require -v4 or higher to output "JPG RST" lines
|
|
15
|
+
- Patched problem with -fast option when reading HEIC file via a pipe
|
|
16
|
+
- Patched to avoid hang when reading some corrupted XMP
|
|
17
|
+
|
|
10
18
|
Sept. 25, 2024 - Version 12.97
|
|
11
19
|
|
|
12
20
|
- Added ability to ignore up to 4095 bytes of garbage at the end of an INDD
|
|
@@ -143,7 +151,7 @@ June 7, 2024 - Version 12.86
|
|
|
143
151
|
- Patched some Olympus WB_RBLevels tags to allow 4 values to be written as per
|
|
144
152
|
some newer models
|
|
145
153
|
- Fixed issue when writing IPTC date tags with a date/time value containing
|
|
146
|
-
subseconds with 4 or more digits
|
|
154
|
+
subseconds with 4 or more digits
|
|
147
155
|
|
|
148
156
|
May 21, 2024 - Version 12.85
|
|
149
157
|
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
|
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
|
|
|
109
109
|
terminal window to extract and run ExifTool:
|
|
110
110
|
|
|
111
111
|
cd ~/Desktop
|
|
112
|
-
gzip -dc Image-ExifTool-12.
|
|
113
|
-
cd Image-ExifTool-12.
|
|
112
|
+
gzip -dc Image-ExifTool-12.98.tar.gz | tar -xf -
|
|
113
|
+
cd Image-ExifTool-12.98
|
|
114
114
|
./exiftool t/images/ExifTool.jpg
|
|
115
115
|
|
|
116
116
|
Note: These commands extract meta information from one of the test images.
|
data/bin/exiftool
CHANGED
|
@@ -11,7 +11,7 @@ use strict;
|
|
|
11
11
|
use warnings;
|
|
12
12
|
require 5.004;
|
|
13
13
|
|
|
14
|
-
my $version = '12.
|
|
14
|
+
my $version = '12.98';
|
|
15
15
|
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
17
17
|
my $exePath;
|
|
@@ -5662,7 +5662,7 @@ with this command:
|
|
|
5662
5662
|
|
|
5663
5663
|
produces output like this:
|
|
5664
5664
|
|
|
5665
|
-
-- Generated by ExifTool 12.
|
|
5665
|
+
-- Generated by ExifTool 12.98 --
|
|
5666
5666
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5667
5667
|
(f/5.6, 1/60s, ISO 100)
|
|
5668
5668
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -6204,9 +6204,10 @@ B<-fileNUM> option is used to read an alternate file and the corresponding
|
|
|
6204
6204
|
family 8 group name is specified for the tag. See the B<-fileNUM> option
|
|
6205
6205
|
details for more information.
|
|
6206
6206
|
|
|
6207
|
-
5) The B<-a> option
|
|
6208
|
-
the values of duplicate tags are accessible
|
|
6209
|
-
(such as a family 4 instance number, eg.
|
|
6207
|
+
5) The B<-a> (Duplicates) option is implied when B<-if> is used without a
|
|
6208
|
+
fast I<NUM>, and the values of duplicate tags are accessible by specifying a
|
|
6209
|
+
group name in the expression (such as a family 4 instance number, eg.
|
|
6210
|
+
C<$Copy1:TAG>, C<$Copy2:TAG>, etc).
|
|
6210
6211
|
|
|
6211
6212
|
6) A special "OK" UserParam is available to test the success of the previous
|
|
6212
6213
|
command when B<-execute> was used, and may be used like any other tag in the
|
|
@@ -6472,9 +6473,9 @@ B<-f> adds 'flags' and 'struct' attributes if applicable. The flags are
|
|
|
6472
6473
|
formatted as a comma-separated list of the following possible values:
|
|
6473
6474
|
Avoid, Binary, List, Mandatory, Permanent, Protected, Unknown and Unsafe
|
|
6474
6475
|
(see the L<Tag Name documentation|Image::ExifTool::TagNames>). For XMP List
|
|
6475
|
-
tags, the list type (Alt, Bag or Seq) is
|
|
6476
|
-
|
|
6477
|
-
|
|
6476
|
+
tags, the list type (Alt, Bag or Seq) is also given, and flattened structure
|
|
6477
|
+
tags are indicated by a Flattened flag with 'struct' giving the ID of the
|
|
6478
|
+
parent structure.
|
|
6478
6479
|
|
|
6479
6480
|
Note that none of the B<-list> options require an input I<FILE>.
|
|
6480
6481
|
|
|
@@ -41,7 +41,7 @@ require 5.002;
|
|
|
41
41
|
require Exporter;
|
|
42
42
|
|
|
43
43
|
use vars qw($VERSION @ISA @EXPORT_OK);
|
|
44
|
-
$VERSION = '1.
|
|
44
|
+
$VERSION = '1.13';
|
|
45
45
|
@ISA = qw(Exporter);
|
|
46
46
|
|
|
47
47
|
sub Read($$$);
|
|
@@ -158,7 +158,10 @@ sub Seek($$;$)
|
|
|
158
158
|
$self->Slurp(); # read whole file into buffer
|
|
159
159
|
$newPos = $num + $self->{LEN}; # relative to end of file
|
|
160
160
|
}
|
|
161
|
-
if ($newPos >= 0
|
|
161
|
+
if ($newPos >= 0 and
|
|
162
|
+
# can't go backwards in unbuffered non-seekable file
|
|
163
|
+
(not $self->{NoBuffer} or $newPos >= $self->{POS}))
|
|
164
|
+
{
|
|
162
165
|
$self->{POS} = $newPos;
|
|
163
166
|
$rtnVal = 1;
|
|
164
167
|
}
|
|
@@ -14,7 +14,7 @@ use strict;
|
|
|
14
14
|
use vars qw($VERSION);
|
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
16
|
|
|
17
|
-
$VERSION = '1.
|
|
17
|
+
$VERSION = '1.09';
|
|
18
18
|
|
|
19
19
|
# map for writing metadata to InDesign files (currently only write XMP)
|
|
20
20
|
my %indMap = (
|
|
@@ -104,9 +104,10 @@ sub ProcessIND($$)
|
|
|
104
104
|
# this must be null padding or we have a possible error
|
|
105
105
|
last if $hdr =~ /^\0+$/;
|
|
106
106
|
# (could be up to 4095 bytes of non-null garbage plus 4095 null bytes from ExifTool)
|
|
107
|
-
$raf->Read($buff,
|
|
107
|
+
$raf->Read($buff, 8192) and $hdr .= $buff;
|
|
108
|
+
my $n = length $hdr;
|
|
108
109
|
$hdr =~ s/\0+$//; # remove trailing nulls
|
|
109
|
-
if (length($hdr) > 4095) {
|
|
110
|
+
if ($n > 8190 or length($hdr) > 4095) {
|
|
110
111
|
$err = 'Corrupt file or unsupported InDesign version';
|
|
111
112
|
last;
|
|
112
113
|
}
|
|
@@ -16,7 +16,7 @@ use strict;
|
|
|
16
16
|
use vars qw($VERSION);
|
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.41';
|
|
20
20
|
|
|
21
21
|
sub ProcessJpeg2000Box($$$);
|
|
22
22
|
sub ProcessJUMD($$$);
|
|
@@ -574,6 +574,7 @@ my %j2cMarker = (
|
|
|
574
574
|
2 => {
|
|
575
575
|
Name => 'CompatibleBrands',
|
|
576
576
|
Format => 'undef[$size-8]',
|
|
577
|
+
List => 1, # (for documentation only)
|
|
577
578
|
# ignore any entry with a null, and return others as a list
|
|
578
579
|
ValueConv => 'my @a=($val=~/.{4}/sg); @a=grep(!/\0/,@a); \@a',
|
|
579
580
|
},
|
|
@@ -328,6 +328,14 @@ sub ParsePID($$$$$)
|
|
|
328
328
|
$more = 1; # read past unknown 0x15 packets if ExtractEmbedded > 2
|
|
329
329
|
}
|
|
330
330
|
}
|
|
331
|
+
# still have a lot of questions about how to decode this...
|
|
332
|
+
# (see https://exiftool.org/forum/index.php?topic=16486 and ../testpics/gps_video/forum16486.ts)
|
|
333
|
+
# } elsif ($type == 6) {
|
|
334
|
+
# my @a = unpack('x17x2NNx2nx2nx2nx2Cx2a4x2a5x2Nx2Nx2nx2Nx2Nx2Nx2nx2nx2Nx2nx2n', $$dataPt . " ");
|
|
335
|
+
# my $hi = shift @a;
|
|
336
|
+
# $a[0] = Image::ExifTool::ConvertUnixTime(($a[0] + $hi * 4294967296) * 1e-6, undef, 6);
|
|
337
|
+
# print "@a\n";
|
|
338
|
+
# $more = 1;
|
|
331
339
|
} elsif ($type < 0) {
|
|
332
340
|
if ($$dataPt =~ /^(.{164})?(.{24})A[NS][EW]/s) {
|
|
333
341
|
# (Blueskysea B4K, Novatek NT96670)
|
|
@@ -48,7 +48,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
48
48
|
use Image::ExifTool::Exif;
|
|
49
49
|
use Image::ExifTool::GPS;
|
|
50
50
|
|
|
51
|
-
$VERSION = '3.
|
|
51
|
+
$VERSION = '3.03';
|
|
52
52
|
|
|
53
53
|
sub ProcessMOV($$;$);
|
|
54
54
|
sub ProcessKeys($$$);
|
|
@@ -935,6 +935,7 @@ my %userDefined = (
|
|
|
935
935
|
2 => {
|
|
936
936
|
Name => 'CompatibleBrands',
|
|
937
937
|
Format => 'undef[$size-8]',
|
|
938
|
+
List => 1, # (for documentation only)
|
|
938
939
|
# ignore any entry with a null, and return others as a list
|
|
939
940
|
ValueConv => 'my @a=($val=~/.{4}/sg); @a=grep(!/\0/,@a); \@a',
|
|
940
941
|
},
|
|
@@ -2551,7 +2552,7 @@ my %userDefined = (
|
|
|
2551
2552
|
TTID => { Name => 'TomTomID', ValueConv => 'unpack("x4H*",$val)' },
|
|
2552
2553
|
TTVI => { Name => 'TomTomVI', Format => 'int32u', Unknown => 1 }, # seen: "0 1 61 508 508"
|
|
2553
2554
|
# TTVD seen: "normal 720p 60fps 60fps 16/9 wide 1x"
|
|
2554
|
-
TTVD => { Name => 'TomTomVD', ValueConv => 'my @a = ($val =~ /[\x20-\x7f]+/g); "@a"' },
|
|
2555
|
+
TTVD => { Name => 'TomTomVD', ValueConv => 'my @a = ($val =~ /[\x20-\x7f]+/g); "@a"', List => 1 },
|
|
2555
2556
|
);
|
|
2556
2557
|
|
|
2557
2558
|
# User-specific media data atoms (ref 11)
|
|
@@ -9151,7 +9152,7 @@ sub HandleItemInfo($)
|
|
|
9151
9152
|
$et->ProcessDirectory(\%dirInfo, $subTable, $proc);
|
|
9152
9153
|
delete $$et{DOC_NUM};
|
|
9153
9154
|
}
|
|
9154
|
-
$raf->Seek($curPos, 0); # seek back to original position
|
|
9155
|
+
$raf->Seek($curPos, 0) or $et->Warn('Seek error'), last; # seek back to original position
|
|
9155
9156
|
pop @{$$et{PATH}};
|
|
9156
9157
|
}
|
|
9157
9158
|
# process the item properties now that we should know their associations and document numbers
|
|
@@ -9577,7 +9578,7 @@ sub ProcessMOV($$;$)
|
|
|
9577
9578
|
if ($tag eq 'ftyp' and $size >= 12) {
|
|
9578
9579
|
# read ftyp atom to see what type of file this is
|
|
9579
9580
|
if ($raf->Read($buff, $size-8) == $size-8) {
|
|
9580
|
-
$raf->Seek(-($size-8), 1);
|
|
9581
|
+
$raf->Seek(-($size-8), 1) or $et->Warn('Seek error'), return 0;
|
|
9581
9582
|
my $type = substr($buff, 0, 4);
|
|
9582
9583
|
$$et{save_ftyp} = $type;
|
|
9583
9584
|
# see if we know the extension for this file type
|
|
@@ -9629,7 +9630,7 @@ sub ProcessMOV($$;$)
|
|
|
9629
9630
|
# a zero size isn't legal for contained atoms, but Canon uses it to
|
|
9630
9631
|
# terminate the CNTH atom (eg. CanonEOS100D.mov), so tolerate it here
|
|
9631
9632
|
my $pos = $raf->Tell() - 4;
|
|
9632
|
-
$raf->Seek(0,2);
|
|
9633
|
+
$raf->Seek(0,2) or $et->Warn('Seek error'), return 0;
|
|
9633
9634
|
my $str = $$dirInfo{DirName} . ' with ' . ($raf->Tell() - $pos) . ' bytes';
|
|
9634
9635
|
$et->VPrint(0,"$$et{INDENT}\[Terminator found in $str remaining]");
|
|
9635
9636
|
} else {
|
|
@@ -9638,7 +9639,7 @@ sub ProcessMOV($$;$)
|
|
|
9638
9639
|
if ($$tagTablePtr{"$tag-size"}) {
|
|
9639
9640
|
my $pos = $raf->Tell();
|
|
9640
9641
|
unless ($fast) {
|
|
9641
|
-
$raf->Seek(0, 2);
|
|
9642
|
+
$raf->Seek(0, 2) or $et->Warn('Seek error'), return 0;
|
|
9642
9643
|
$et->HandleTag($tagTablePtr, "$tag-size", $raf->Tell() - $pos);
|
|
9643
9644
|
}
|
|
9644
9645
|
$et->HandleTag($tagTablePtr, "$tag-offset", $pos) if $$tagTablePtr{"$tag-offset"};
|
|
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
34
34
|
use Image::ExifTool::Exif;
|
|
35
35
|
use Image::ExifTool::Minolta;
|
|
36
36
|
|
|
37
|
-
$VERSION = '3.
|
|
37
|
+
$VERSION = '3.70';
|
|
38
38
|
|
|
39
39
|
sub ProcessSRF($$$);
|
|
40
40
|
sub ProcessSR2($$$);
|
|
@@ -170,6 +170,7 @@ sub PrintInvLensSpec($;$$);
|
|
|
170
170
|
32885 => 'Sony FE 16-35mm F2.8 GM II', #JR
|
|
171
171
|
32886 => 'Sony FE 300mm F2.8 GM OSS', #JR
|
|
172
172
|
32887 => 'Sony E PZ 16-50mm F3.5-5.6 OSS II', #JR
|
|
173
|
+
32888 => 'Sony FE 85mm F1.4 GM II', #JR
|
|
173
174
|
|
|
174
175
|
# (comment this out so LensID will report the LensModel, which is more useful)
|
|
175
176
|
# 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
|
|
@@ -241,6 +242,8 @@ sub PrintInvLensSpec($;$$);
|
|
|
241
242
|
49474.9 => 'Viltrox 75mm F1.2 E', #JR
|
|
242
243
|
'49474.10' => 'Viltrox 20mm F2.8 FE', #JR
|
|
243
244
|
49475 => 'Tamron 50-300mm F4.5-6.3 Di III VC VXD', #JR (Model A069)
|
|
245
|
+
49476 => 'Tamron 28-300mm F4-7.1 Di III VC VXD', #JR (Model A074)
|
|
246
|
+
49477 => 'Tamron 90mm F2.8 Di III Macro VXD', #JR (Model F072)
|
|
244
247
|
|
|
245
248
|
49712 => 'Tokina FiRIN 20mm F2 FE AF', # (firmware Ver.01)
|
|
246
249
|
49713 => 'Tokina FiRIN 100mm F2.8 FE MACRO', # (firmware Ver.01)
|
|
@@ -299,6 +302,7 @@ sub PrintInvLensSpec($;$$);
|
|
|
299
302
|
50547 => 'Sigma 10-18mm F2.8 DC DN | C', #JR (023)
|
|
300
303
|
50548 => 'Sigma 15mm F1.4 DG DN DIAGONAL FISHEYE | A', #JR (024)
|
|
301
304
|
50549 => 'Sigma 50mm F1.2 DG DN | A', #JR (024)
|
|
305
|
+
50550 => 'Sigma 28-105mm F2.8 DG DN | A', #JR (024)
|
|
302
306
|
50551 => 'Sigma 28-45mm F1.8 DG DN | A', #JR (024)
|
|
303
307
|
|
|
304
308
|
50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
|
|
@@ -315,6 +319,7 @@ sub PrintInvLensSpec($;$$);
|
|
|
315
319
|
51003 => 'Voigtlander NOKTON 35mm F1.2 Aspherical SE', #JR
|
|
316
320
|
51006 => 'Voigtlander APO-LANTHAR 35mm F2 Aspherical', #JR
|
|
317
321
|
51007 => 'Voigtlander NOKTON 50mm F1 Aspherical', #JR
|
|
322
|
+
51008 => 'Voigtlander NOKTON 75mm F1.5 Aspherical', #JR
|
|
318
323
|
|
|
319
324
|
# lenses listed in the Sigma MC-11 list, but not yet seen:
|
|
320
325
|
# 504xx => 'Sigma 18-200mm F3.5-6.3 DC MACRO OS HSM | C + MC-11', # (014)
|
|
@@ -26108,7 +26108,7 @@ the image undisplayable.
|
|
|
26108
26108
|
------ -------- --------
|
|
26109
26109
|
0 MajorBrand no
|
|
26110
26110
|
1 MinorVersion no
|
|
26111
|
-
2 CompatibleBrands no
|
|
26111
|
+
2 CompatibleBrands no+
|
|
26112
26112
|
|
|
26113
26113
|
=head3 Jpeg2000 ImageHeader Tags
|
|
26114
26114
|
|
|
@@ -30230,7 +30230,7 @@ Tags found in Pittasoft Blackvue dashcam "free" data.
|
|
|
30230
30230
|
------ -------- --------
|
|
30231
30231
|
0 MajorBrand no
|
|
30232
30232
|
1 MinorVersion no
|
|
30233
|
-
2 CompatibleBrands no
|
|
30233
|
+
2 CompatibleBrands no+
|
|
30234
30234
|
|
|
30235
30235
|
=head3 QuickTime OtherMeta Tags
|
|
30236
30236
|
|
|
@@ -31280,7 +31280,7 @@ Tags found in TomTom Bandit Action Cam MP4 videos.
|
|
|
31280
31280
|
'TTAD' TomTomAD QuickTime Stream
|
|
31281
31281
|
'TTHL' TomTomHL? no
|
|
31282
31282
|
'TTID' TomTomID no
|
|
31283
|
-
'TTVD' TomTomVD no
|
|
31283
|
+
'TTVD' TomTomVD no+
|
|
31284
31284
|
'TTVI' TomTomVI? no
|
|
31285
31285
|
|
|
31286
31286
|
=head3 QuickTime HintTrackInfo Tags
|
|
@@ -184,11 +184,19 @@ sub GetFreeEntries($)
|
|
|
184
184
|
{
|
|
185
185
|
my $dict = shift;
|
|
186
186
|
my %xrefFree;
|
|
187
|
-
#
|
|
188
|
-
# so we can simplify things for now and only support this type of entry
|
|
187
|
+
# we write xref stream entries in 'CNn' or 'CNNn' format (with 8-byte 'NN' offset),
|
|
189
188
|
my $w = $$dict{W};
|
|
190
|
-
if (ref $w eq 'ARRAY'
|
|
191
|
-
my $
|
|
189
|
+
if (ref $w eq 'ARRAY') {
|
|
190
|
+
my $bytes = "@$w";
|
|
191
|
+
my $fmt;
|
|
192
|
+
if ($bytes eq '1 4 2') {
|
|
193
|
+
$fmt = 'CNn';
|
|
194
|
+
} elsif ($bytes eq '1 8 2') {
|
|
195
|
+
$fmt = 'CNNn';
|
|
196
|
+
} else {
|
|
197
|
+
return \%xrefFree;
|
|
198
|
+
}
|
|
199
|
+
my $size = $$dict{_entry_size}; # this will be 7 for 'CNn' or 11 for 'CNNn'
|
|
192
200
|
my $index = $$dict{Index};
|
|
193
201
|
my $len = length $$dict{_stream};
|
|
194
202
|
# scan the table for free objects
|
|
@@ -200,7 +208,12 @@ sub GetFreeEntries($)
|
|
|
200
208
|
my $count = $$index[$i*2+1];
|
|
201
209
|
for ($j=0; $j<$count; ++$j) {
|
|
202
210
|
last if $pos + $size > $len;
|
|
203
|
-
my @t = unpack("x$pos
|
|
211
|
+
my @t = unpack("x$pos $fmt", $$dict{_stream});
|
|
212
|
+
if (@t == 4) {
|
|
213
|
+
$t[1] = $t[1] * 4294967296 + $t[2];
|
|
214
|
+
$t[2] = $t[3];
|
|
215
|
+
@t = 3;
|
|
216
|
+
}
|
|
204
217
|
# add entry if object was free
|
|
205
218
|
$xrefFree{$start+$j} = [ $t[1], $t[2], 'f' ] if $t[0] == 0;
|
|
206
219
|
$pos += $size; # step to next entry
|
|
@@ -657,24 +670,37 @@ sub WritePDF($$)
|
|
|
657
670
|
$newXRef{$nextObject++} = [ Tell($outfile) - $$et{PDFBase} + length($/), 0, 'n' ];
|
|
658
671
|
$$mainDict{Size} = $nextObject;
|
|
659
672
|
# create xref stream and Index entry
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
my
|
|
666
|
-
|
|
667
|
-
$
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
$
|
|
671
|
-
|
|
673
|
+
my $bits = 4;
|
|
674
|
+
Restart: for (;;) {
|
|
675
|
+
$$mainDict{W} = [ 1, $bits, 2 ]; # int8u, int32u/int64u, int16u ('CNn' or 'CNNn')
|
|
676
|
+
$$mainDict{Index} = [ ];
|
|
677
|
+
$$mainDict{_stream} = '';
|
|
678
|
+
my @ids = sort { $a <=> $b } keys %newXRef;
|
|
679
|
+
while (@ids) {
|
|
680
|
+
my $startID = $ids[0];
|
|
681
|
+
for (;;) {
|
|
682
|
+
$id = shift @ids;
|
|
683
|
+
my ($pos, $gen, $type) = @{$newXRef{$id}};
|
|
684
|
+
if ($pos > 0xffffffff) {
|
|
685
|
+
if ($bits == 4) {
|
|
686
|
+
# switch to 64-bit integer offsets
|
|
687
|
+
$bits = 8;
|
|
688
|
+
next Restart;
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
if ($bits == 4) {
|
|
692
|
+
$$mainDict{_stream} .= pack('CNn', $type eq 'f' ? 0 : 1, $pos, $gen);
|
|
693
|
+
} else {
|
|
694
|
+
my $hi = int($pos / 4294967296);
|
|
695
|
+
my $lo = $pos - $hi * 4294967296;
|
|
696
|
+
$$mainDict{_stream} .= pack('CNNn', $type eq 'f' ? 0 : 1, $hi, $lo, $gen);
|
|
697
|
+
}
|
|
698
|
+
last if not @ids or $ids[0] != $id + 1;
|
|
672
699
|
}
|
|
673
|
-
|
|
674
|
-
|
|
700
|
+
# add Index entries for this section of the xref stream
|
|
701
|
+
push @{$$mainDict{Index}}, $startID, $id - $startID + 1;
|
|
675
702
|
}
|
|
676
|
-
|
|
677
|
-
push @{$$mainDict{Index}}, $startID, $id - $startID + 1;
|
|
703
|
+
last;
|
|
678
704
|
}
|
|
679
705
|
# write the xref stream object
|
|
680
706
|
$keyExt = "$id 0 obj"; # (set anyway, but xref stream should NOT be encrypted)
|
|
@@ -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.67';
|
|
54
54
|
@ISA = qw(Exporter);
|
|
55
55
|
@EXPORT_OK = qw(EscapeXML UnescapeXML);
|
|
56
56
|
|
|
@@ -3777,8 +3777,13 @@ sub ParseXMPElement($$$;$$$$)
|
|
|
3777
3777
|
|
|
3778
3778
|
# extract property attributes
|
|
3779
3779
|
my ($parseResource, %attrs, @attrs);
|
|
3780
|
-
|
|
3781
|
-
|
|
3780
|
+
# this hangs Perl (v5.18.4) for a specific capture string [patched in ExifTool 12.98]
|
|
3781
|
+
# while ($attrs =~ m/(\S+?)\s*=\s*(['"])(.*?)\2/sg) {
|
|
3782
|
+
while ($attrs =~ /(\S+?)\s*=\s*(['"])/g) {
|
|
3783
|
+
my ($attr, $quote) = ($1, $2);
|
|
3784
|
+
my $p0 = pos($attrs);
|
|
3785
|
+
last unless $attrs =~ /$quote/g;
|
|
3786
|
+
my $val = substr($attrs, $p0, pos($attrs)-$p0-1);
|
|
3782
3787
|
# handle namespace prefixes (defined by xmlns:PREFIX, or used with PREFIX:tag)
|
|
3783
3788
|
if ($attr =~ /(.*?):/) {
|
|
3784
3789
|
if ($1 eq 'xmlns') {
|
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 = '12.
|
|
32
|
+
$VERSION = '12.98';
|
|
33
33
|
$RELEASE = '';
|
|
34
34
|
@ISA = qw(Exporter);
|
|
35
35
|
%EXPORT_TAGS = (
|
|
@@ -1466,12 +1466,12 @@ my %systemTagsNotes = (
|
|
|
1466
1466
|
PrintConv => sub {
|
|
1467
1467
|
my ($mask, $val) = (0400, oct(shift));
|
|
1468
1468
|
my %types = (
|
|
1469
|
-
0010000 => 'p',
|
|
1470
|
-
0020000 => 'c',
|
|
1471
|
-
0040000 => 'd',
|
|
1472
|
-
0060000 => 'b',
|
|
1473
|
-
0120000 => 'l',
|
|
1474
|
-
0140000 => 's',
|
|
1469
|
+
0010000 => 'p', # FIFO
|
|
1470
|
+
0020000 => 'c', # character special file
|
|
1471
|
+
0040000 => 'd', # directory
|
|
1472
|
+
0060000 => 'b', # block special file
|
|
1473
|
+
0120000 => 'l', # sym link
|
|
1474
|
+
0140000 => 's', # socket link
|
|
1475
1475
|
);
|
|
1476
1476
|
my $str = $types{$val & 0170000} || '-';
|
|
1477
1477
|
while ($mask) {
|
|
@@ -7290,7 +7290,10 @@ sub ProcessJPEG($$;$)
|
|
|
7290
7290
|
last; # all done parsing file
|
|
7291
7291
|
} elsif (defined $markerLenBytes{$marker}) {
|
|
7292
7292
|
# handle other stand-alone markers and segments we skipped over
|
|
7293
|
-
$verbose and $marker
|
|
7293
|
+
if ($verbose and $marker) {
|
|
7294
|
+
next if $verbose < 4 and ($marker & 0xf8) == 0xd0;
|
|
7295
|
+
print $out "${indent}JPEG $markerName\n";
|
|
7296
|
+
}
|
|
7294
7297
|
next;
|
|
7295
7298
|
} elsif ($marker == 0xdb and length($$segDataPt) and # DQT
|
|
7296
7299
|
# save the DQT data only if JPEGDigest has been requested
|
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.98.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-09
|
|
12
|
+
date: 2024-10-09 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: exiftool
|