exiftool_vendored 12.74.0 → 12.76.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 +24 -3
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +46 -45
- data/bin/exiftool +50 -45
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +3 -3
- data/bin/lib/Image/ExifTool/Canon.pm +3 -2
- data/bin/lib/Image/ExifTool/Exif.pm +2 -1
- data/bin/lib/Image/ExifTool/HtmlDump.pm +5 -3
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +50 -11
- data/bin/lib/Image/ExifTool/MIE.pm +3 -3
- data/bin/lib/Image/ExifTool/PDF.pm +54 -4
- data/bin/lib/Image/ExifTool/QuickTime.pm +2 -1
- data/bin/lib/Image/ExifTool/Shift.pl +1 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +3 -0
- data/bin/lib/Image/ExifTool/TagNames.pod +32 -5
- data/bin/lib/Image/ExifTool/WriteExif.pl +11 -8
- data/bin/lib/Image/ExifTool/Writer.pl +2 -2
- data/bin/lib/Image/ExifTool/XMP.pm +2 -1
- data/bin/lib/Image/ExifTool/XMP2.pl +9 -0
- data/bin/lib/Image/ExifTool.pm +16 -4
- data/bin/lib/Image/ExifTool.pod +69 -65
- data/bin/perl-Image-ExifTool.spec +45 -44
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
@@ -21,7 +21,7 @@ use vars qw($VERSION $AUTOLOAD $lastFetched);
|
|
21
21
|
use Image::ExifTool qw(:DataAccess :Utils);
|
22
22
|
require Exporter;
|
23
23
|
|
24
|
-
$VERSION = '1.
|
24
|
+
$VERSION = '1.58';
|
25
25
|
|
26
26
|
sub FetchObject($$$$);
|
27
27
|
sub ExtractObject($$;$$);
|
@@ -178,6 +178,9 @@ my %supportedFilter = (
|
|
178
178
|
AcroForm => {
|
179
179
|
SubDirectory => { TagTable => 'Image::ExifTool::PDF::AcroForm' },
|
180
180
|
},
|
181
|
+
AF => {
|
182
|
+
SubDirectory => { TagTable => 'Image::ExifTool::PDF::AF' },
|
183
|
+
},
|
181
184
|
Lang => 'Language',
|
182
185
|
PageLayout => { },
|
183
186
|
PageMode => { },
|
@@ -251,6 +254,37 @@ my %supportedFilter = (
|
|
251
254
|
},
|
252
255
|
);
|
253
256
|
|
257
|
+
# tags extracted from AF dictionary
|
258
|
+
%Image::ExifTool::PDF::AF = (
|
259
|
+
PROCESS_PROC => \&ProcessAF,
|
260
|
+
NOTES => 'Processed only for C2PA information if AFRelationship is "/C2PA_Manifest".',
|
261
|
+
EF => {
|
262
|
+
SubDirectory => { TagTable => 'Image::ExifTool::PDF::EF' },
|
263
|
+
},
|
264
|
+
);
|
265
|
+
|
266
|
+
# tags extracted from EF dictionary
|
267
|
+
%Image::ExifTool::PDF::EF = (
|
268
|
+
F => {
|
269
|
+
Name => 'F_', # (don't want single-letter tag names)
|
270
|
+
SubDirectory => { TagTable => 'Image::ExifTool::PDF::F' },
|
271
|
+
},
|
272
|
+
);
|
273
|
+
|
274
|
+
# tags extracted from F dictionary
|
275
|
+
%Image::ExifTool::PDF::F = (
|
276
|
+
NOTES => 'C2PA JUMBF metadata extracted from "/C2PA_Manifest" file.',
|
277
|
+
_stream => {
|
278
|
+
Name => 'JUMBF',
|
279
|
+
Condition => '$$self{AFRelationship} eq "/C2PA_Manifest"',
|
280
|
+
SubDirectory => {
|
281
|
+
TagTable => 'Image::ExifTool::Jpeg2000::Main',
|
282
|
+
DirName => 'JUMBF',
|
283
|
+
ByteOrder => 'BigEndian',
|
284
|
+
},
|
285
|
+
},
|
286
|
+
);
|
287
|
+
|
254
288
|
# tags in PDF Kids dictionary
|
255
289
|
%Image::ExifTool::PDF::Kids = (
|
256
290
|
Metadata => {
|
@@ -1739,6 +1773,19 @@ sub ProcessAcroForm($$$$;$$)
|
|
1739
1773
|
{
|
1740
1774
|
my ($et, $tagTablePtr, $dict, $xref, $nesting, $type) = @_;
|
1741
1775
|
$et->HandleTag($tagTablePtr, '_has_xfa', $$dict{XFA} ? 'true' : 'false');
|
1776
|
+
return 1 unless $et->Options('Verbose');
|
1777
|
+
return ProcessDict($et, $tagTablePtr, $dict, $xref, $nesting, $type);
|
1778
|
+
}
|
1779
|
+
|
1780
|
+
#------------------------------------------------------------------------------
|
1781
|
+
# Process AF dictionary to extract C2PA manifest
|
1782
|
+
# Inputs: Same as ProcessDict
|
1783
|
+
sub ProcessAF($$$$;$$)
|
1784
|
+
{
|
1785
|
+
my ($et, $tagTablePtr, $dict, $xref, $nesting, $type) = @_;
|
1786
|
+
$$et{AFRelationship} = $$dict{AFRelationship} || '';
|
1787
|
+
# go no further unless Verbose or this is the C2PA_Manifest item
|
1788
|
+
return 1 unless $et->Options('Verbose') or $$et{AFRelationship} eq '/C2PA_Manifest';
|
1742
1789
|
return ProcessDict($et, $tagTablePtr, $dict, $xref, $nesting, $type);
|
1743
1790
|
}
|
1744
1791
|
|
@@ -1987,7 +2034,8 @@ sub ProcessDict($$$$;$$)
|
|
1987
2034
|
$$et{INDENT} .= '| ';
|
1988
2035
|
$$et{DIR_NAME} = $tag;
|
1989
2036
|
$et->VerboseDir($tag, scalar(@{$$subDict{_tags}}));
|
1990
|
-
|
2037
|
+
my $proc = $$subTablePtr{PROCESS_PROC} || \&ProcessDict;
|
2038
|
+
&$proc($et, $subTablePtr, $subDict, $xref, $nesting);
|
1991
2039
|
$$et{INDENT} = $oldIndent;
|
1992
2040
|
$$et{DIR_NAME} = $oldDir;
|
1993
2041
|
}
|
@@ -2087,7 +2135,8 @@ sub ProcessDict($$$$;$$)
|
|
2087
2135
|
($tag = $$dict{Subtype} . $tag) =~ s/^\/// if $$dict{Subtype};
|
2088
2136
|
last unless $$tagTablePtr{$tag};
|
2089
2137
|
my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag) or last;
|
2090
|
-
|
2138
|
+
my $subdir = $$tagInfo{SubDirectory};
|
2139
|
+
unless ($subdir) {
|
2091
2140
|
# don't build filter lists across different images
|
2092
2141
|
delete $$et{LIST_TAGS}{$$tagTablePtr{Filter}};
|
2093
2142
|
# we arrive here only when extracting embedded images
|
@@ -2120,8 +2169,9 @@ sub ProcessDict($$$$;$$)
|
|
2120
2169
|
DirStart => 0,
|
2121
2170
|
DirLen => length $$dict{_stream},
|
2122
2171
|
Parent => 'PDF',
|
2172
|
+
DirName => $$subdir{DirName},
|
2123
2173
|
);
|
2124
|
-
my $subTablePtr = GetTagTable(
|
2174
|
+
my $subTablePtr = GetTagTable($$subdir{TagTable});
|
2125
2175
|
unless ($et->ProcessDirectory(\%dirInfo, $subTablePtr)) {
|
2126
2176
|
$et->Warn("Error processing $$tagInfo{Name} information");
|
2127
2177
|
}
|
@@ -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 = '2.
|
51
|
+
$VERSION = '2.93';
|
52
52
|
|
53
53
|
sub ProcessMOV($$;$);
|
54
54
|
sub ProcessKeys($$$);
|
@@ -663,6 +663,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
663
663
|
Deletable => 1,
|
664
664
|
SubDirectory => {
|
665
665
|
TagTable => 'Image::ExifTool::Jpeg2000::Main',
|
666
|
+
DirName => 'JUMBF',
|
666
667
|
# 16 bytes uuid
|
667
668
|
# +4 bytes 0
|
668
669
|
# +9 bytes "manifest\0"
|
@@ -361,7 +361,7 @@ sub ShiftTime($;$$$)
|
|
361
361
|
};
|
362
362
|
# not a problem if we failed here since we'll just try again next time,
|
363
363
|
# so don't return error message
|
364
|
-
unless (
|
364
|
+
unless ($@) {
|
365
365
|
my $mode;
|
366
366
|
if (defined $time[0]) {
|
367
367
|
$mode = defined $time[3] ? 'DateTime' : 'Date';
|
@@ -403,7 +403,6 @@ sub ShiftTime($;$$$)
|
|
403
403
|
};
|
404
404
|
$@ and return CleanWarning($@);
|
405
405
|
$tm += $$shiftOffset{$mode}; # apply the shift
|
406
|
-
$tm < 0 and return 'Shift results in date before 1970';
|
407
406
|
# save fractional seconds in shifted time
|
408
407
|
$frac = $tm - int($tm);
|
409
408
|
if ($frac) {
|
@@ -7595,6 +7595,7 @@ my %tagExists = (
|
|
7595
7595
|
'aeliveviewhistograminfo' => 1,
|
7596
7596
|
'aeliveviewlocalhistogram' => 1,
|
7597
7597
|
'aelocalhistogram' => 1,
|
7598
|
+
'af' => 1,
|
7598
7599
|
'af-cprioritysel' => 1,
|
7599
7600
|
'af-sprioritysel' => 1,
|
7600
7601
|
'afarea' => 1,
|
@@ -9042,6 +9043,7 @@ my %tagExists = (
|
|
9042
9043
|
'editedby' => 1,
|
9043
9044
|
'editor' => 1,
|
9044
9045
|
'edittagarray' => 1,
|
9046
|
+
'ef' => 1,
|
9045
9047
|
'effect' => 1,
|
9046
9048
|
'effectivebw' => 1,
|
9047
9049
|
'effectstrength' => 1,
|
@@ -9195,6 +9197,7 @@ my %tagExists = (
|
|
9195
9197
|
'extrasamples' => 1,
|
9196
9198
|
'extraticklocations' => 1,
|
9197
9199
|
'f-stop' => 1,
|
9200
|
+
'f_' => 1,
|
9198
9201
|
'face1birthday' => 1,
|
9199
9202
|
'face1category' => 1,
|
9200
9203
|
'face1name' => 1,
|
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
|
|
12
12
|
=head1 TAG TABLES
|
13
13
|
|
14
14
|
The tables listed below give the names of all tags recognized by ExifTool.
|
15
|
-
They contain a total of
|
15
|
+
They contain a total of 27474 tags, with 17233 unique tag names.
|
16
16
|
|
17
17
|
B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
|
18
18
|
table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
|
@@ -25405,10 +25405,13 @@ C2PA (Coalition for Content Provenance and Authenticity) CAI (Content
|
|
25405
25405
|
Authenticity Initiative) JUMBF (JPEG Universal Metadata Box Format) metdata
|
25406
25406
|
is currently extracted from JPEG, PNG, TIFF-based (eg. TIFF, DNG),
|
25407
25407
|
QuickTime-based (eg. MP4, MOV, HEIF, AVIF), RIFF-based (eg. WAV, AVI, WebP),
|
25408
|
-
GIF files and ID3v2 metadata. The suggested ExifTool
|
25409
|
-
for reading C2PA metadata are C<-jumbf:all -G3 -b -j
|
25410
|
-
metadata may be deleted from writable JPEG, PNG, WebP,
|
25411
|
-
QuickTime-based files by deleting the JUMBF group with
|
25408
|
+
PDF, SVG and GIF files, and ID3v2 metadata. The suggested ExifTool
|
25409
|
+
command-line arguments for reading C2PA metadata are C<-jumbf:all -G3 -b -j
|
25410
|
+
-u -struct>. This metadata may be deleted from writable JPEG, PNG, WebP,
|
25411
|
+
TIFF-based, and QuickTime-based files by deleting the JUMBF group with
|
25412
|
+
C<-jumbf:all=>. The C2PA JUMBF metadata may be extracted as a block via the
|
25413
|
+
JUMBF tag. See L<https://c2pa.org/specifications/> for the C2PA
|
25414
|
+
specification.
|
25412
25415
|
|
25413
25416
|
Tag ID Tag Name Writable
|
25414
25417
|
------ -------- --------
|
@@ -28532,6 +28535,7 @@ This is the PDF document catalog.
|
|
28532
28535
|
|
28533
28536
|
Tag ID Tag Name Writable
|
28534
28537
|
------ -------- --------
|
28538
|
+
'AF' AF PDF AF
|
28535
28539
|
'AcroForm' AcroForm PDF AcroForm
|
28536
28540
|
'Lang' Language no
|
28537
28541
|
'MarkInfo' MarkInfo PDF MarkInfo
|
@@ -28542,6 +28546,28 @@ This is the PDF document catalog.
|
|
28542
28546
|
'Perms' Perms PDF Perms
|
28543
28547
|
'Version' PDFVersion no
|
28544
28548
|
|
28549
|
+
=head3 PDF AF Tags
|
28550
|
+
|
28551
|
+
Processed only for C2PA information if AFRelationship is "/C2PA_Manifest".
|
28552
|
+
|
28553
|
+
Tag ID Tag Name Writable
|
28554
|
+
------ -------- --------
|
28555
|
+
'EF' EF PDF EF
|
28556
|
+
|
28557
|
+
=head3 PDF EF Tags
|
28558
|
+
|
28559
|
+
Tag ID Tag Name Writable
|
28560
|
+
------ -------- --------
|
28561
|
+
'F' F_ PDF F
|
28562
|
+
|
28563
|
+
=head3 PDF F Tags
|
28564
|
+
|
28565
|
+
C2PA JUMBF metadata extracted from "/C2PA_Manifest" file.
|
28566
|
+
|
28567
|
+
Tag ID Tag Name Writable
|
28568
|
+
------ -------- --------
|
28569
|
+
'_stream' JUMBF Jpeg2000
|
28570
|
+
|
28545
28571
|
=head3 PDF AcroForm Tags
|
28546
28572
|
|
28547
28573
|
Tag ID Tag Name Writable
|
@@ -39548,6 +39574,7 @@ FileName.
|
|
39548
39574
|
JPEGDigest File no
|
39549
39575
|
JPEGImageLength File no
|
39550
39576
|
JPEGQualityEstimate File no
|
39577
|
+
JUMBF JUMBF no
|
39551
39578
|
MIMEType File no
|
39552
39579
|
MaxVal File no
|
39553
39580
|
NewGUID ExifTool no
|
@@ -2277,14 +2277,17 @@ NoOverwrite: next if $isNew > 0;
|
|
2277
2277
|
$$offsetInfo{0x117} and $$offsetInfo{0x145} and
|
2278
2278
|
$$offsetInfo{0x111}[2]==1) # (must be a single strip or the tile offsets could get out of sync)
|
2279
2279
|
{
|
2280
|
-
#
|
2281
|
-
|
2282
|
-
|
2283
|
-
|
2284
|
-
|
2285
|
-
|
2286
|
-
|
2287
|
-
|
2280
|
+
# check the start offsets to see if they are the same
|
2281
|
+
if ($$offsetInfo{0x111}[3][0] == $$offsetInfo{0x144}[3][0]) {
|
2282
|
+
# some Sony ARW images contain double-referenced raw data stored as both strips
|
2283
|
+
# and tiles. Copy the data using only the strip tags, but store the TileOffets
|
2284
|
+
# information for updating later (see PanasonicRaw:PatchRawDataOffset for a
|
2285
|
+
# description of offsetInfo elements)
|
2286
|
+
$$offsetInfo{0x111}[5] = $$offsetInfo{0x144}; # hack to save TileOffsets
|
2287
|
+
# delete tile information from offsetInfo because we will copy as strips
|
2288
|
+
delete $$offsetInfo{0x144};
|
2289
|
+
delete $$offsetInfo{0x145};
|
2290
|
+
}
|
2288
2291
|
} else {
|
2289
2292
|
$et->Error("TIFF $dirName contains both strip and tile data");
|
2290
2293
|
}
|
@@ -3353,7 +3353,7 @@ sub InsertTagValues($$;$$$$)
|
|
3353
3353
|
$advFmtSelf = $self;
|
3354
3354
|
if ($asList) {
|
3355
3355
|
foreach (@val) {
|
3356
|
-
#### eval advanced formatting expression ($_, $self, @val, $advFmtSelf)
|
3356
|
+
#### eval advanced formatting expression ($_, $self, @val, $tag, $advFmtSelf)
|
3357
3357
|
eval $expr;
|
3358
3358
|
$@ and $evalWarning = $@;
|
3359
3359
|
}
|
@@ -3362,7 +3362,7 @@ sub InsertTagValues($$;$$$$)
|
|
3362
3362
|
$val = @val ? join $$self{OPTIONS}{ListSep}, @val : undef;
|
3363
3363
|
} else {
|
3364
3364
|
$_ = $val;
|
3365
|
-
#### eval advanced formatting expression ($_, $self, @val, $advFmtSelf)
|
3365
|
+
#### eval advanced formatting expression ($_, $self, @val, $tag, $advFmtSelf)
|
3366
3366
|
eval $expr;
|
3367
3367
|
$@ and $evalWarning = $@;
|
3368
3368
|
$val = ref $_ eq 'ARRAY' ? join($$self{OPTIONS}{ListSep}, @$_): $_;
|
@@ -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.63';
|
54
54
|
@ISA = qw(Exporter);
|
55
55
|
@EXPORT_OK = qw(EscapeXML UnescapeXML);
|
56
56
|
|
@@ -3644,6 +3644,7 @@ NoLoop:
|
|
3644
3644
|
IgnoreProp => $$subdir{IgnoreProp}, # (allow XML to ignore specified properties)
|
3645
3645
|
IsExtended => 1, # (hack to avoid Duplicate warning for embedded XMP)
|
3646
3646
|
NoStruct => 1, # (don't try to build structures since this isn't true XMP)
|
3647
|
+
NoBlockSave => 1,# (don't save as a block because we already did this)
|
3647
3648
|
);
|
3648
3649
|
my $oldOrder = GetByteOrder();
|
3649
3650
|
SetByteOrder($$subdir{ByteOrder}) if $$subdir{ByteOrder};
|
@@ -2191,6 +2191,15 @@ my %sSubVersion = (
|
|
2191
2191
|
GROUPS => { 0 => 'SVG', 2 => 'Unknown' },
|
2192
2192
|
LANG_INFO => \&GetLangInfo,
|
2193
2193
|
NAMESPACE => undef, # variable namespace
|
2194
|
+
'c2pa:manifest' => {
|
2195
|
+
Name => 'JUMBF',
|
2196
|
+
Groups => { 0 => 'JUMBF' },
|
2197
|
+
RawConv => 'Image::ExifTool::XMP::DecodeBase64($val)',
|
2198
|
+
SubDirectory => {
|
2199
|
+
TagTable => 'Image::ExifTool::Jpeg2000::Main',
|
2200
|
+
ByteOrder => 'BigEndian',
|
2201
|
+
},
|
2202
|
+
},
|
2194
2203
|
);
|
2195
2204
|
|
2196
2205
|
#------------------------------------------------------------------------------
|
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.76';
|
33
33
|
$RELEASE = '';
|
34
34
|
@ISA = qw(Exporter);
|
35
35
|
%EXPORT_TAGS = (
|
@@ -195,9 +195,9 @@ $defaultLang = 'en'; # default language
|
|
195
195
|
OGG FLAC APE MPC MKV MXF DV PMP IND PGF ICC ITC FLIR FLIF FPF
|
196
196
|
LFP HTML VRD RTF FITS XISF XCF DSS QTIF FPX PICT ZIP GZIP PLIST
|
197
197
|
RAR 7Z BZ2 CZI TAR EXE EXR HDR CHM LNK WMF AVC DEX DPX RAW Font
|
198
|
-
RSRC M2TS MacOS PHP PCX DCX DWF DWG DXF WTV Torrent VCard
|
199
|
-
R3D AA PDB PFM2 MRC LIF JXL MOI ISO ALIAS JSON MP3 DICOM PCD
|
200
|
-
TXT AAC);
|
198
|
+
JUMBF RSRC M2TS MacOS PHP PCX DCX DWF DWG DXF WTV Torrent VCard
|
199
|
+
LRI R3D AA PDB PFM2 MRC LIF JXL MOI ISO ALIAS JSON MP3 DICOM PCD
|
200
|
+
ICO 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
|
@@ -260,6 +260,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
|
|
260
260
|
BPG => ['BPG', 'Better Portable Graphics'],
|
261
261
|
BTF => ['BTF', 'Big Tagged Image File Format'], #(unofficial)
|
262
262
|
BZ2 => ['BZ2', 'BZIP2 archive'],
|
263
|
+
C2PA => ['JUMBF','Coalition for Content Provenance and Authenticity'],
|
263
264
|
CHM => ['CHM', 'Microsoft Compiled HTML format'],
|
264
265
|
CIFF => ['CRW', 'Camera Image File Format'],
|
265
266
|
COS => ['COS', 'Capture One Settings'],
|
@@ -374,6 +375,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
|
|
374
375
|
JPS => ['JPEG', 'JPEG Stereo image'],
|
375
376
|
JPX => ['JP2', 'JPEG 2000 with extensions'],
|
376
377
|
JSON => ['JSON', 'JavaScript Object Notation'],
|
378
|
+
JUMBF=> ['JUMBF','JPEG Universal Metadata Box Format'],
|
377
379
|
JXL => ['JXL', 'JPEG XL'],
|
378
380
|
JXR => ['TIFF', 'JPEG XR'],
|
379
381
|
K25 => ['TIFF', 'Kodak DC25 RAW'],
|
@@ -612,6 +614,7 @@ my %fileDescription = (
|
|
612
614
|
BPG => 'image/bpg',
|
613
615
|
BTF => 'image/x-tiff-big', #(NC) (ref http://www.asmail.be/msg0055371937.html)
|
614
616
|
BZ2 => 'application/bzip2',
|
617
|
+
C2PA => 'application/c2pa',
|
615
618
|
'Canon 1D RAW' => 'image/x-raw', # (uses .TIF file extension)
|
616
619
|
CHM => 'application/x-chm',
|
617
620
|
COS => 'application/octet-stream', #PH (NC)
|
@@ -686,6 +689,7 @@ my %fileDescription = (
|
|
686
689
|
JPS => 'image/x-jps',
|
687
690
|
JPX => 'image/jpx',
|
688
691
|
JSON => 'application/json',
|
692
|
+
JUMBF=> 'application/octet-stream', #PH (invented format)
|
689
693
|
JXL => 'image/jxl', #PH (NC)
|
690
694
|
JXR => 'image/jxr',
|
691
695
|
K25 => 'image/x-kodak-k25',
|
@@ -856,6 +860,7 @@ my %moduleName = (
|
|
856
860
|
HDR => 'Radiance',
|
857
861
|
JP2 => 'Jpeg2000',
|
858
862
|
JPEG => '',
|
863
|
+
JUMBF=> 'Jpeg2000',
|
859
864
|
JXL => 'Jpeg2000',
|
860
865
|
LFP => 'Lytro',
|
861
866
|
LRI => 0,
|
@@ -947,6 +952,7 @@ $testLen = 1024; # number of bytes to read when testing for magic number
|
|
947
952
|
JP2 => '(\0\0\0\x0cjP( |\x1a\x1a)\x0d\x0a\x87\x0a|\xff\x4f\xff\x51\0)',
|
948
953
|
JPEG => '\xff\xd8\xff',
|
949
954
|
JSON => '(\xef\xbb\xbf)?\s*(\[\s*)?\{\s*"[^"]*"\s*:',
|
955
|
+
JUMBF=> '.{4}jumb\0.{3}jumd',
|
950
956
|
JXL => '\xff\x0a|\0\0\0\x0cJXL \x0d\x0a......ftypjxl ',
|
951
957
|
LFP => '\x89LFP\x0d\x0a\x1a\x0a',
|
952
958
|
LIF => '\x70\0{3}.{4}\x2a.{4}<\0',
|
@@ -1640,6 +1646,11 @@ my %systemTagsNotes = (
|
|
1640
1646
|
Groups => { 0 => 'XML', 1 => 'XML' },
|
1641
1647
|
Binary => 1,
|
1642
1648
|
},
|
1649
|
+
JUMBF => {
|
1650
|
+
Notes => 'the C2PA JUMBF data block, extracted only if specifically requested',
|
1651
|
+
Groups => { 0 => 'JUMBF', 1 => 'JUMBF' },
|
1652
|
+
Binary => 1,
|
1653
|
+
},
|
1643
1654
|
ICC_Profile => {
|
1644
1655
|
Notes => q{
|
1645
1656
|
the full ICC_Profile data block. This tag is generated only if specifically
|
@@ -7568,6 +7579,7 @@ sub ProcessJPEG($$)
|
|
7568
7579
|
$dirInfo{DataPt} = \$buff;
|
7569
7580
|
$dirInfo{DataPos} = $segPos + 8; # (shows correct offsets for single-segment JUMBF)
|
7570
7581
|
$dirInfo{DataLen} = $dirInfo{DirLen} = $size;
|
7582
|
+
$dirInfo{DirName} = 'JUMBF';
|
7571
7583
|
my $tagTablePtr = GetTagTable('Image::ExifTool::Jpeg2000::Main');
|
7572
7584
|
$self->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
7573
7585
|
delete $jumbfChunk{$type};
|
data/bin/lib/Image/ExifTool.pod
CHANGED
@@ -65,49 +65,50 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
65
65
|
|
66
66
|
File Types
|
67
67
|
------------+-------------+-------------+-------------+------------
|
68
|
-
360 r/w |
|
69
|
-
3FR r |
|
70
|
-
3G2 r/w |
|
71
|
-
3GP r/w |
|
72
|
-
7Z r |
|
73
|
-
A r |
|
74
|
-
AA r |
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
68
|
+
360 r/w | DOCX r | ITC r | O r | RSRC r
|
69
|
+
3FR r | DPX r | J2C r | ODP r | RTF r
|
70
|
+
3G2 r/w | DR4 r/w/c | JNG r/w | ODS r | RW2 r/w
|
71
|
+
3GP r/w | DSS r | JP2 r/w | ODT r | RWL r/w
|
72
|
+
7Z r | DV r | JPEG r/w | OFR r | RWZ r
|
73
|
+
A r | DVB r/w | JSON r | OGG r | RM r
|
74
|
+
AA r | DVR-MS r | JXL r | OGV r | SEQ r
|
75
|
+
AAC r | DYLIB r | K25 r | ONP r | SKETCH r
|
76
|
+
AAE r | EIP r | KDC r | OPUS r | SO r
|
77
|
+
AAX r/w | EPS r/w | KEY r | ORF r/w | SR2 r/w
|
78
|
+
ACR r | EPUB r | LA r | ORI r/w | SRF r
|
79
|
+
AFM r | ERF r/w | LFP r | OTF r | SRW r/w
|
80
|
+
AI r/w | EXE r | LIF r | PAC r | SVG r
|
81
|
+
AIFF r | EXIF r/w/c | LNK r | PAGES r | SWF r
|
82
|
+
APE r | EXR r | LRV r/w | PBM r/w | THM r/w
|
83
|
+
ARQ r/w | EXV r/w/c | M2TS r | PCD r | TIFF r/w
|
84
|
+
ARW r/w | F4A/V r/w | M4A/V r/w | PCX r | TORRENT r
|
85
|
+
ASF r | FFF r/w | MACOS r | PDB r | TTC r
|
86
|
+
AVI r | FITS r | MAX r | PDF r/w | TTF r
|
87
|
+
AVIF r/w | FLA r | MEF r/w | PEF r/w | TXT r
|
88
|
+
AZW r | FLAC r | MIE r/w/c | PFA r | VCF r
|
89
|
+
BMP r | FLIF r/w | MIFF r | PFB r | VNT r
|
90
|
+
BPG r | FLV r | MKA r | PFM r | VRD r/w/c
|
91
|
+
BTF r | FPF r | MKS r | PGF r | VSD r
|
92
|
+
C2PA r | FPX r | MKV r | PGM r/w | WAV r
|
93
|
+
CHM r | GIF r/w | MNG r/w | PLIST r | WDP r/w
|
94
|
+
COS r | GLV r/w | MOBI r | PICT r | WEBP r/w
|
95
|
+
CR2 r/w | GPR r/w | MODD r | PMP r | WEBM r
|
96
|
+
CR3 r/w | GZ r | MOI r | PNG r/w | WMA r
|
97
|
+
CRM r/w | HDP r/w | MOS r/w | PPM r/w | WMV r
|
98
|
+
CRW r/w | HDR r | MOV r/w | PPT r | WPG r
|
99
|
+
CS1 r/w | HEIC r/w | MP3 r | PPTX r | WTV r
|
100
|
+
CSV r | HEIF r/w | MP4 r/w | PS r/w | WV r
|
101
|
+
CUR r | HTML r | MPC r | PSB r/w | X3F r/w
|
102
|
+
CZI r | ICC r/w/c | MPG r | PSD r/w | XCF r
|
103
|
+
DCM r | ICO r | MPO r/w | PSP r | XISF r
|
104
|
+
DCP r/w | ICS r | MQV r/w | QTIF r/w | XLS r
|
105
|
+
DCR r | IDML r | MRC r | R3D r | XLSX r
|
106
|
+
DFONT r | IIQ r/w | MRW r/w | RA r | XMP r/w/c
|
107
|
+
DIVX r | IND r/w | MXF r | RAF r/w | ZIP r
|
108
|
+
DJVU r | INSP r/w | NEF r/w | RAM r |
|
109
|
+
DLL r | INSV r | NKSC r/w | RAR r |
|
110
|
+
DNG r/w | INX r | NRW r/w | RAW r/w |
|
111
|
+
DOC r | ISO r | NUMBERS r | RIFF r |
|
111
112
|
|
112
113
|
Meta Information
|
113
114
|
----------------------+----------------------+---------------------
|
@@ -1801,8 +1802,9 @@ or a trailing '#' causes the ValueConv value to be copied (same as setting
|
|
1801
1802
|
the Type option to 'ValueConv' for this tag only). A leading '+' sets the
|
1802
1803
|
Replace option to 0 on a per-tag basis (see Options below). Wildcards ('*'
|
1803
1804
|
and '?') may be used in the tag name. A tag name of '*' is commonly used
|
1804
|
-
when a group is specified to copy all tags in the group (eg. 'XMP:*').
|
1805
|
-
|
1805
|
+
when a group is specified to copy all tags in the group (eg. 'XMP:*').
|
1806
|
+
|
1807
|
+
A special feature allows tag names of the form 'DSTTAGE<lt>SRCTAG' (or
|
1806
1808
|
'SRCTAGE<gt>DSTTAG') to be specified to copy information to a tag with a
|
1807
1809
|
different name or a specified group. Both 'SRCTAG' and 'DSTTAG' may contain
|
1808
1810
|
wildcards and/or be prefixed by a group name (eg.
|
@@ -1812,18 +1814,20 @@ a list with arguments of the form 'DSTTAG+E<lt>SRCTAG' or
|
|
1812
1814
|
'DSTTAG-E<lt>SRCTAG'. Tags are evaluated in order, so exclusions apply only
|
1813
1815
|
to tags included earlier in the list. An extension of this feature allows
|
1814
1816
|
the tag value to be set from a string containing tag names with leading '$'
|
1815
|
-
symbols (eg. 'CommentE<lt>the file is $filename').
|
1816
|
-
around
|
1817
|
-
to
|
1818
|
-
|
1817
|
+
symbols (eg. 'CommentE<lt>the file is $filename'). Braces '{}' may be used
|
1818
|
+
around a tag name to separate it from subsequent text, and a '$$' is used to
|
1819
|
+
to represent a '$' symbol. The behaviour for missing tags in expressions is
|
1820
|
+
defined by the L</MissingTagValue> option. The tag value may be modified
|
1819
1821
|
via changes to the default input variable ($_) in a Perl expression placed
|
1820
1822
|
inside the braces and after a semicolon following the tag name (see the last
|
1821
1823
|
example above). A '@' may be added after the tag name (before the
|
1822
1824
|
semicolon) to make the expression act on individual list items instead of
|
1823
|
-
the concatenated string for list-type tags.
|
1824
|
-
|
1825
|
-
|
1826
|
-
|
1825
|
+
the concatenated string for list-type tags. The expression has access to
|
1826
|
+
the full ExifTool API through the current ExifTool object (C<$self>) and the
|
1827
|
+
tag key (C<$tag>). Braces within the expression must be balanced.
|
1828
|
+
|
1829
|
+
Multiple options hash references may be passed to set different options for
|
1830
|
+
different tags. Options apply to subsequent tags in the argument list.
|
1827
1831
|
|
1828
1832
|
By default, this routine will commute information between same-named tags in
|
1829
1833
|
different groups, allowing information to be translated between images with
|
@@ -2435,16 +2439,16 @@ Here is a complete list of groups for each of these families:
|
|
2435
2439
|
=item Family 0 (Information Type):
|
2436
2440
|
|
2437
2441
|
AAC, AFCP, AIFF, APE, APP0, APP1, APP11, APP12, APP13, APP14, APP15, APP2,
|
2438
|
-
APP3, APP4, APP5, APP6,
|
2439
|
-
DV, DjVu, Ducky, EXE, EXIF, ExifTool, FITS, FLAC,
|
2440
|
-
FlashPix, Font, FotoStation, GIF, GIMP, GeoTiff, GoPro,
|
2441
|
-
ICC_Profile, ID3, IPTC, ISO, ITC, JFIF, JPEG, JSON, JUMBF,
|
2442
|
-
Leaf, Lytro, M2TS, MIE, MIFF, MISB, MNG, MOI, MPC, MPEG, MPF,
|
2443
|
-
MakerNotes, Matroska, Meta, Ogg, OpenEXR, Opus, PDF, PICT, PLIST, PNG,
|
2444
|
-
|
2445
|
-
PrintIM, QuickTime, RAF, RIFF, RSRC, RTF, Radiance, Rawzor,
|
2446
|
-
SigmaRaw, Stim, Theora, Torrent, Trailer,
|
2447
|
-
XML, XMP, ZIP
|
2442
|
+
APP3, APP4, APP5, APP6, APP7, APP8, APP9, ASF, Audible, Canon, CanonVRD,
|
2443
|
+
Composite, DICOM, DNG, DV, DjVu, Ducky, EXE, EXIF, ExifTool, FITS, FLAC,
|
2444
|
+
FLIR, File, Flash, FlashPix, Font, FotoStation, GIF, GIMP, GeoTiff, GoPro,
|
2445
|
+
H264, HTML, ICC_Profile, ID3, IPTC, ISO, ITC, JFIF, JPEG, JSON, JUMBF,
|
2446
|
+
Jpeg2000, LNK, Leaf, Lytro, M2TS, MIE, MIFF, MISB, MNG, MOI, MPC, MPEG, MPF,
|
2447
|
+
MXF, MakerNotes, Matroska, Meta, Ogg, OpenEXR, Opus, PDF, PICT, PLIST, PNG,
|
2448
|
+
PSP, Palm, PanasonicRaw, Parrot, PhotoCD, PhotoMechanic, Photoshop,
|
2449
|
+
PostScript, PrintIM, QuickTime, RAF, RIFF, RSRC, RTF, Radiance, Rawzor,
|
2450
|
+
Real, Red, SVG, SigmaRaw, Sony, Stim, Theora, Torrent, Trailer, VCard,
|
2451
|
+
Vorbis, WTV, XML, XMP, ZIP
|
2448
2452
|
|
2449
2453
|
=item Family 1 (Specific Location):
|
2450
2454
|
|
@@ -2486,8 +2490,8 @@ XMP-ics, XMP-iptcCore, XMP-iptcExt, XMP-lr, XMP-mediapro, XMP-microsoft,
|
|
2486
2490
|
XMP-mwg-coll, XMP-mwg-kw, XMP-mwg-rs, XMP-nine, XMP-panorama, XMP-pdf,
|
2487
2491
|
XMP-pdfx, XMP-photomech, XMP-photoshop, XMP-plus, XMP-pmi, XMP-prism,
|
2488
2492
|
XMP-prl, XMP-prm, XMP-pur, XMP-rdf, XMP-sdc, XMP-swf, XMP-tiff, XMP-x,
|
2489
|
-
XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-
|
2490
|
-
XMP-xmpRights, XMP-xmpTPg, ZIP, iTunes
|
2493
|
+
XMP-xmp, XMP-xmpBJ, XMP-xmpDM, XMP-xmpDSA, XMP-xmpMM, XMP-xmpNote,
|
2494
|
+
XMP-xmpPLUS, XMP-xmpRights, XMP-xmpTPg, ZIP, iTunes
|
2491
2495
|
|
2492
2496
|
=item Family 2 (Category):
|
2493
2497
|
|