exiftool-vendored.pl 12.60.0 → 12.62.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.
- package/bin/Changes +35 -0
- package/bin/LICENSE +674 -0
- package/bin/MANIFEST +7 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +45 -44
- package/bin/exiftool +100 -73
- package/bin/lib/Image/ExifTool/BMP.pm +0 -1
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +4 -4
- package/bin/lib/Image/ExifTool/FlashPix.pm +2 -1
- package/bin/lib/Image/ExifTool/Jpeg2000.pm +31 -6
- package/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
- package/bin/lib/Image/ExifTool/Nikon.pm +3 -3
- package/bin/lib/Image/ExifTool/PDF.pm +17 -8
- package/bin/lib/Image/ExifTool/QuickTime.pm +10 -7
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +51 -21
- package/bin/lib/Image/ExifTool/Sony.pm +16 -10
- package/bin/lib/Image/ExifTool/TagLookup.pm +9 -0
- package/bin/lib/Image/ExifTool/TagNames.pod +34 -5
- package/bin/lib/Image/ExifTool/WPG.pm +296 -0
- package/bin/lib/Image/ExifTool/WritePDF.pl +7 -8
- package/bin/lib/Image/ExifTool/Writer.pl +12 -4
- package/bin/lib/Image/ExifTool/XMP.pm +17 -5
- package/bin/lib/Image/ExifTool/ZIP.pm +159 -41
- package/bin/lib/Image/ExifTool.pm +118 -50
- package/bin/lib/Image/ExifTool.pod +51 -42
- package/bin/perl-Image-ExifTool.spec +44 -43
- package/bin/pp_build_exe.args +5 -4
- package/package.json +2 -2
package/bin/MANIFEST
CHANGED
|
@@ -176,6 +176,7 @@ html/TagNames/Torrent.html
|
|
|
176
176
|
html/TagNames/Unknown.html
|
|
177
177
|
html/TagNames/VCard.html
|
|
178
178
|
html/TagNames/Vorbis.html
|
|
179
|
+
html/TagNames/WPG.html
|
|
179
180
|
html/TagNames/WTV.html
|
|
180
181
|
html/TagNames/XMP.html
|
|
181
182
|
html/TagNames/ZIP.html
|
|
@@ -416,6 +417,7 @@ lib/Image/ExifTool/Unknown.pm
|
|
|
416
417
|
lib/Image/ExifTool/VCard.pm
|
|
417
418
|
lib/Image/ExifTool/Validate.pm
|
|
418
419
|
lib/Image/ExifTool/Vorbis.pm
|
|
420
|
+
lib/Image/ExifTool/WPG.pm
|
|
419
421
|
lib/Image/ExifTool/WTV.pm
|
|
420
422
|
lib/Image/ExifTool/WriteCanonRaw.pl
|
|
421
423
|
lib/Image/ExifTool/WriteExif.pl
|
|
@@ -856,6 +858,8 @@ t/VCard_2.out
|
|
|
856
858
|
t/VCard_3.out
|
|
857
859
|
t/Vorbis.t
|
|
858
860
|
t/Vorbis_2.out
|
|
861
|
+
t/WPG.t
|
|
862
|
+
t/WPG_2.out
|
|
859
863
|
t/WTV.t
|
|
860
864
|
t/WTV_2.out
|
|
861
865
|
t/Writer.t
|
|
@@ -965,6 +969,7 @@ t/ZIP_4.out
|
|
|
965
969
|
t/ZIP_5.out
|
|
966
970
|
t/ZIP_6.out
|
|
967
971
|
t/ZIP_7.out
|
|
972
|
+
t/ZIP_8.out
|
|
968
973
|
t/ZISRAW.t
|
|
969
974
|
t/ZISRAW_2.out
|
|
970
975
|
t/images/AFCP.jpg
|
|
@@ -1132,6 +1137,7 @@ t/images/Unknown.jpg
|
|
|
1132
1137
|
t/images/VCard.ics
|
|
1133
1138
|
t/images/VCard.vcf
|
|
1134
1139
|
t/images/Vorbis.ogg
|
|
1140
|
+
t/images/WPG.wpg
|
|
1135
1141
|
t/images/WTV.wtv
|
|
1136
1142
|
t/images/Writer.jpg
|
|
1137
1143
|
t/images/XMP.inx
|
|
@@ -1148,6 +1154,7 @@ t/images/XMP7.xmp
|
|
|
1148
1154
|
t/images/XMP8.xmp
|
|
1149
1155
|
t/images/XMP9.xmp
|
|
1150
1156
|
t/images/ZIP.gz
|
|
1157
|
+
t/images/ZIP.rar
|
|
1151
1158
|
t/images/ZIP.zip
|
|
1152
1159
|
t/images/ZISRAW.czi
|
|
1153
1160
|
t/images/iWork.numbers
|
package/bin/META.json
CHANGED
package/bin/META.yml
CHANGED
package/bin/README
CHANGED
|
@@ -14,48 +14,49 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
14
14
|
|
|
15
15
|
File Types
|
|
16
16
|
------------+-------------+-------------+-------------+------------
|
|
17
|
-
360 r/w |
|
|
18
|
-
3FR r |
|
|
19
|
-
3G2 r/w |
|
|
20
|
-
3GP r/w |
|
|
21
|
-
A r |
|
|
22
|
-
AA r |
|
|
23
|
-
AAE r |
|
|
24
|
-
AAX r/w |
|
|
25
|
-
ACR r |
|
|
26
|
-
AFM r |
|
|
27
|
-
AI r/w |
|
|
28
|
-
AIFF r |
|
|
29
|
-
APE r |
|
|
30
|
-
ARQ r/w |
|
|
31
|
-
ARW r/w |
|
|
32
|
-
ASF r |
|
|
33
|
-
AVI r |
|
|
34
|
-
AVIF r/w |
|
|
35
|
-
AZW r |
|
|
36
|
-
BMP r |
|
|
37
|
-
BPG r |
|
|
38
|
-
BTF r |
|
|
39
|
-
CHM r |
|
|
40
|
-
COS r |
|
|
41
|
-
CR2 r/w |
|
|
42
|
-
CR3 r/w |
|
|
43
|
-
CRM r/w |
|
|
44
|
-
CRW r/w |
|
|
45
|
-
CS1 r/w |
|
|
46
|
-
CSV r |
|
|
47
|
-
CUR r |
|
|
48
|
-
CZI r |
|
|
49
|
-
DCM r |
|
|
50
|
-
DCP r/w |
|
|
51
|
-
DCR r |
|
|
52
|
-
DFONT r |
|
|
53
|
-
DIVX r |
|
|
54
|
-
DJVU r |
|
|
55
|
-
DLL r |
|
|
56
|
-
DNG r/w |
|
|
57
|
-
DOC r |
|
|
58
|
-
DOCX r |
|
|
17
|
+
360 r/w | DR4 r/w/c | JNG r/w | ODP r | RSRC r
|
|
18
|
+
3FR r | DSS r | JP2 r/w | ODS r | RTF r
|
|
19
|
+
3G2 r/w | DV r | JPEG r/w | ODT r | RW2 r/w
|
|
20
|
+
3GP r/w | DVB r/w | JSON r | OFR r | RWL r/w
|
|
21
|
+
A r | DVR-MS r | JXL r | OGG r | RWZ r
|
|
22
|
+
AA r | DYLIB r | K25 r | OGV r | RM r
|
|
23
|
+
AAE r | EIP r | KDC r | ONP r | SEQ r
|
|
24
|
+
AAX r/w | EPS r/w | KEY r | OPUS r | SKETCH r
|
|
25
|
+
ACR r | EPUB r | LA r | ORF r/w | SO r
|
|
26
|
+
AFM r | ERF r/w | LFP r | ORI r/w | SR2 r/w
|
|
27
|
+
AI r/w | EXE r | LIF r | OTF r | SRF r
|
|
28
|
+
AIFF r | EXIF r/w/c | LNK r | PAC r | SRW r/w
|
|
29
|
+
APE r | EXR r | LRV r/w | PAGES r | SVG r
|
|
30
|
+
ARQ r/w | EXV r/w/c | M2TS r | PBM r/w | SWF r
|
|
31
|
+
ARW r/w | F4A/V r/w | M4A/V r/w | PCD r | THM r/w
|
|
32
|
+
ASF r | FFF r/w | MACOS r | PCX r | TIFF r/w
|
|
33
|
+
AVI r | FITS r | MAX r | PDB r | TORRENT r
|
|
34
|
+
AVIF r/w | FLA r | MEF r/w | PDF r/w | TTC r
|
|
35
|
+
AZW r | FLAC r | MIE r/w/c | PEF r/w | TTF r
|
|
36
|
+
BMP r | FLIF r/w | MIFF r | PFA r | TXT r
|
|
37
|
+
BPG r | FLV r | MKA r | PFB r | VCF r
|
|
38
|
+
BTF r | FPF r | MKS r | PFM r | VNT r
|
|
39
|
+
CHM r | FPX r | MKV r | PGF r | VRD r/w/c
|
|
40
|
+
COS r | GIF r/w | MNG r/w | PGM r/w | VSD r
|
|
41
|
+
CR2 r/w | GPR r/w | MOBI r | PLIST r | WAV r
|
|
42
|
+
CR3 r/w | GZ r | MODD r | PICT r | WDP r/w
|
|
43
|
+
CRM r/w | HDP r/w | MOI r | PMP r | WEBP r/w
|
|
44
|
+
CRW r/w | HDR r | MOS r/w | PNG r/w | WEBM r
|
|
45
|
+
CS1 r/w | HEIC r/w | MOV r/w | PPM r/w | WMA r
|
|
46
|
+
CSV r | HEIF r/w | MP3 r | PPT r | WMV r
|
|
47
|
+
CUR r | HTML r | MP4 r/w | PPTX r | WPG r
|
|
48
|
+
CZI r | ICC r/w/c | MPC r | PS r/w | WTV r
|
|
49
|
+
DCM r | ICO r | MPG r | PSB r/w | WV r
|
|
50
|
+
DCP r/w | ICS r | MPO r/w | PSD r/w | X3F r/w
|
|
51
|
+
DCR r | IDML r | MQV r/w | PSP r | XCF r
|
|
52
|
+
DFONT r | IIQ r/w | MRC r | QTIF r/w | XLS r
|
|
53
|
+
DIVX r | IND r/w | MRW r/w | R3D r | XLSX r
|
|
54
|
+
DJVU r | INSP r/w | MXF r | RA r | XMP r/w/c
|
|
55
|
+
DLL r | INSV r | NEF r/w | RAF r/w | ZIP r
|
|
56
|
+
DNG r/w | INX r | NKSC r/w | RAM r |
|
|
57
|
+
DOC r | ISO r | NRW r/w | RAR r |
|
|
58
|
+
DOCX r | ITC r | NUMBERS r | RAW r/w |
|
|
59
|
+
DPX r | J2C r | O r | RIFF r |
|
|
59
60
|
|
|
60
61
|
Meta Information
|
|
61
62
|
----------------------+----------------------+---------------------
|
|
@@ -107,8 +108,8 @@ your home directory, then you would type the following commands in a
|
|
|
107
108
|
terminal window to extract and run ExifTool:
|
|
108
109
|
|
|
109
110
|
cd ~/Desktop
|
|
110
|
-
gzip -dc Image-ExifTool-12.
|
|
111
|
-
cd Image-ExifTool-12.
|
|
111
|
+
gzip -dc Image-ExifTool-12.62.tar.gz | tar -xf -
|
|
112
|
+
cd Image-ExifTool-12.62
|
|
112
113
|
./exiftool t/images/ExifTool.jpg
|
|
113
114
|
|
|
114
115
|
Note: These commands extract meta information from one of the test images.
|
package/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.62';
|
|
15
15
|
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
17
17
|
BEGIN {
|
|
@@ -365,13 +365,14 @@ sub Cleanup() {
|
|
|
365
365
|
|
|
366
366
|
# isolate arguments common to all commands
|
|
367
367
|
if (grep /^-common_args$/i, @ARGV) {
|
|
368
|
-
my (@newArgs, $common);
|
|
368
|
+
my (@newArgs, $common, $end);
|
|
369
369
|
foreach (@ARGV) {
|
|
370
|
-
if (/^-common_args$/i) {
|
|
370
|
+
if (/^-common_args$/i and not $end) {
|
|
371
371
|
$common = 1;
|
|
372
372
|
} elsif ($common) {
|
|
373
373
|
push @commonArgs, $_;
|
|
374
374
|
} else {
|
|
375
|
+
$end = 1 if $_ eq '--';
|
|
375
376
|
push @newArgs, $_;
|
|
376
377
|
}
|
|
377
378
|
}
|
|
@@ -836,7 +837,7 @@ for (;;) {
|
|
|
836
837
|
$mt->Options(Charset => $charset);
|
|
837
838
|
}
|
|
838
839
|
if ($evalWarning) {
|
|
839
|
-
|
|
840
|
+
Warn $evalWarning;
|
|
840
841
|
} else {
|
|
841
842
|
$setCharset = $mt->Options('Charset');
|
|
842
843
|
}
|
|
@@ -1737,7 +1738,8 @@ if ($textOut) {
|
|
|
1737
1738
|
if ($outOpt) {
|
|
1738
1739
|
my $type = GetFileType($outOpt);
|
|
1739
1740
|
if ($type) {
|
|
1740
|
-
|
|
1741
|
+
# (must test original file name because we can write .webp but not other RIFF types)
|
|
1742
|
+
unless (CanWrite($outOpt)) {
|
|
1741
1743
|
Warn "Can't write $type files\n";
|
|
1742
1744
|
$rtnVal = 1;
|
|
1743
1745
|
next;
|
|
@@ -1951,23 +1953,31 @@ sub GetImageInfo($$)
|
|
|
1951
1953
|
my (@foundTags, $info, $file, $ind, $g8);
|
|
1952
1954
|
|
|
1953
1955
|
# set window title for this file if necessary
|
|
1954
|
-
if (defined $windowTitle
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1956
|
+
if (defined $windowTitle) {
|
|
1957
|
+
if ($progressCount >= $progressNext) {
|
|
1958
|
+
my $prog = $progressMax ? "$progressCount/$progressMax" : '0/0';
|
|
1959
|
+
my $title = $windowTitle;
|
|
1960
|
+
my ($num, $denom) = split '/', $prog;
|
|
1961
|
+
my $frac = $num / ($denom || 1);
|
|
1962
|
+
my $n = $title =~ s/%(\d+)b/%b/ ? $1 : 20; # length of bar
|
|
1963
|
+
my $bar = int($frac * $n + 0.5);
|
|
1964
|
+
my %lkup = (
|
|
1965
|
+
b => ('I' x $bar) . ('.' x ($n - $bar)),
|
|
1966
|
+
f => $orig,
|
|
1967
|
+
p => int(100 * $frac + 0.5),
|
|
1968
|
+
r => $prog,
|
|
1969
|
+
'%'=> '%',
|
|
1970
|
+
);
|
|
1971
|
+
$title =~ s/%([%bfpr])/$lkup{$1}/eg;
|
|
1972
|
+
SetWindowTitle($title);
|
|
1973
|
+
if (defined $progressMax) {
|
|
1974
|
+
undef $progressNext;
|
|
1975
|
+
} else {
|
|
1976
|
+
$progressNext += $progressIncr;
|
|
1977
|
+
}
|
|
1978
|
+
}
|
|
1979
|
+
# ($progressMax is not defined for "-progress:%f")
|
|
1980
|
+
++$progressCount unless defined $progressMax;
|
|
1971
1981
|
}
|
|
1972
1982
|
unless (length $orig or $outOpt) {
|
|
1973
1983
|
Warn qq(Error: Zero-length file name - ""\n);
|
|
@@ -1993,7 +2003,11 @@ sub GetImageInfo($$)
|
|
|
1993
2003
|
}
|
|
1994
2004
|
# set alternate file names
|
|
1995
2005
|
foreach $g8 (sort keys %altFile) {
|
|
1996
|
-
my $altName =
|
|
2006
|
+
my $altName = $orig;
|
|
2007
|
+
# must double any '$' symbols in the original file name because
|
|
2008
|
+
# they are used for tag names in a -fileNUM argument
|
|
2009
|
+
$altName =~ s/\$/\$\$/g;
|
|
2010
|
+
$altName = FilenameSPrintf($altFile{$g8}, $altName);
|
|
1997
2011
|
$et->SetAlternateFile($g8, $altName);
|
|
1998
2012
|
}
|
|
1999
2013
|
|
|
@@ -2536,6 +2550,7 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2536
2550
|
$xtra .= " et:table='${table}'";
|
|
2537
2551
|
$xtra .= " et:index='${index}'" if defined $index;
|
|
2538
2552
|
}
|
|
2553
|
+
# Note: New $xtra attributes must be added to %ignoreEtProp in XMP.pm!
|
|
2539
2554
|
my $lastVal = $val;
|
|
2540
2555
|
for ($valNum=0; $valNum<2; ++$valNum) {
|
|
2541
2556
|
$val = FormatXML($val, $ind, $group);
|
|
@@ -3700,7 +3715,7 @@ sub ProcessFiles($;$)
|
|
|
3700
3715
|
if (defined $progressMax) {
|
|
3701
3716
|
unless (defined $progressNext) {
|
|
3702
3717
|
$progressNext = $progressCount + $progressIncr;
|
|
3703
|
-
$progressNext -= $progressNext % $progressIncr;
|
|
3718
|
+
$progressNext -= $progressNext % $progressIncr; # (show even multiples)
|
|
3704
3719
|
$progressNext = $progressMax if $progressNext > $progressMax;
|
|
3705
3720
|
}
|
|
3706
3721
|
++$progressCount;
|
|
@@ -4479,7 +4494,7 @@ sub Progress($$)
|
|
|
4479
4494
|
my ($file, $msg) = @_;
|
|
4480
4495
|
if (defined $progStr) {
|
|
4481
4496
|
print $file $msg, $progStr, "\n";
|
|
4482
|
-
undef $progressNext;
|
|
4497
|
+
undef $progressNext if defined $progressMax;
|
|
4483
4498
|
}
|
|
4484
4499
|
}
|
|
4485
4500
|
|
|
@@ -4590,48 +4605,49 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
4590
4605
|
|
|
4591
4606
|
File Types
|
|
4592
4607
|
------------+-------------+-------------+-------------+------------
|
|
4593
|
-
360 r/w |
|
|
4594
|
-
3FR r |
|
|
4595
|
-
3G2 r/w |
|
|
4596
|
-
3GP r/w |
|
|
4597
|
-
A r |
|
|
4598
|
-
AA r |
|
|
4599
|
-
AAE r |
|
|
4600
|
-
AAX r/w |
|
|
4601
|
-
ACR r |
|
|
4602
|
-
AFM r |
|
|
4603
|
-
AI r/w |
|
|
4604
|
-
AIFF r |
|
|
4605
|
-
APE r |
|
|
4606
|
-
ARQ r/w |
|
|
4607
|
-
ARW r/w |
|
|
4608
|
-
ASF r |
|
|
4609
|
-
AVI r |
|
|
4610
|
-
AVIF r/w |
|
|
4611
|
-
AZW r |
|
|
4612
|
-
BMP r |
|
|
4613
|
-
BPG r |
|
|
4614
|
-
BTF r |
|
|
4615
|
-
CHM r |
|
|
4616
|
-
COS r |
|
|
4617
|
-
CR2 r/w |
|
|
4618
|
-
CR3 r/w |
|
|
4619
|
-
CRM r/w |
|
|
4620
|
-
CRW r/w |
|
|
4621
|
-
CS1 r/w |
|
|
4622
|
-
CSV r |
|
|
4623
|
-
CUR r |
|
|
4624
|
-
CZI r |
|
|
4625
|
-
DCM r |
|
|
4626
|
-
DCP r/w |
|
|
4627
|
-
DCR r |
|
|
4628
|
-
DFONT r |
|
|
4629
|
-
DIVX r |
|
|
4630
|
-
DJVU r |
|
|
4631
|
-
DLL r |
|
|
4632
|
-
DNG r/w |
|
|
4633
|
-
DOC r |
|
|
4634
|
-
DOCX r |
|
|
4608
|
+
360 r/w | DR4 r/w/c | JNG r/w | ODP r | RSRC r
|
|
4609
|
+
3FR r | DSS r | JP2 r/w | ODS r | RTF r
|
|
4610
|
+
3G2 r/w | DV r | JPEG r/w | ODT r | RW2 r/w
|
|
4611
|
+
3GP r/w | DVB r/w | JSON r | OFR r | RWL r/w
|
|
4612
|
+
A r | DVR-MS r | JXL r | OGG r | RWZ r
|
|
4613
|
+
AA r | DYLIB r | K25 r | OGV r | RM r
|
|
4614
|
+
AAE r | EIP r | KDC r | ONP r | SEQ r
|
|
4615
|
+
AAX r/w | EPS r/w | KEY r | OPUS r | SKETCH r
|
|
4616
|
+
ACR r | EPUB r | LA r | ORF r/w | SO r
|
|
4617
|
+
AFM r | ERF r/w | LFP r | ORI r/w | SR2 r/w
|
|
4618
|
+
AI r/w | EXE r | LIF r | OTF r | SRF r
|
|
4619
|
+
AIFF r | EXIF r/w/c | LNK r | PAC r | SRW r/w
|
|
4620
|
+
APE r | EXR r | LRV r/w | PAGES r | SVG r
|
|
4621
|
+
ARQ r/w | EXV r/w/c | M2TS r | PBM r/w | SWF r
|
|
4622
|
+
ARW r/w | F4A/V r/w | M4A/V r/w | PCD r | THM r/w
|
|
4623
|
+
ASF r | FFF r/w | MACOS r | PCX r | TIFF r/w
|
|
4624
|
+
AVI r | FITS r | MAX r | PDB r | TORRENT r
|
|
4625
|
+
AVIF r/w | FLA r | MEF r/w | PDF r/w | TTC r
|
|
4626
|
+
AZW r | FLAC r | MIE r/w/c | PEF r/w | TTF r
|
|
4627
|
+
BMP r | FLIF r/w | MIFF r | PFA r | TXT r
|
|
4628
|
+
BPG r | FLV r | MKA r | PFB r | VCF r
|
|
4629
|
+
BTF r | FPF r | MKS r | PFM r | VNT r
|
|
4630
|
+
CHM r | FPX r | MKV r | PGF r | VRD r/w/c
|
|
4631
|
+
COS r | GIF r/w | MNG r/w | PGM r/w | VSD r
|
|
4632
|
+
CR2 r/w | GPR r/w | MOBI r | PLIST r | WAV r
|
|
4633
|
+
CR3 r/w | GZ r | MODD r | PICT r | WDP r/w
|
|
4634
|
+
CRM r/w | HDP r/w | MOI r | PMP r | WEBP r/w
|
|
4635
|
+
CRW r/w | HDR r | MOS r/w | PNG r/w | WEBM r
|
|
4636
|
+
CS1 r/w | HEIC r/w | MOV r/w | PPM r/w | WMA r
|
|
4637
|
+
CSV r | HEIF r/w | MP3 r | PPT r | WMV r
|
|
4638
|
+
CUR r | HTML r | MP4 r/w | PPTX r | WPG r
|
|
4639
|
+
CZI r | ICC r/w/c | MPC r | PS r/w | WTV r
|
|
4640
|
+
DCM r | ICO r | MPG r | PSB r/w | WV r
|
|
4641
|
+
DCP r/w | ICS r | MPO r/w | PSD r/w | X3F r/w
|
|
4642
|
+
DCR r | IDML r | MQV r/w | PSP r | XCF r
|
|
4643
|
+
DFONT r | IIQ r/w | MRC r | QTIF r/w | XLS r
|
|
4644
|
+
DIVX r | IND r/w | MRW r/w | R3D r | XLSX r
|
|
4645
|
+
DJVU r | INSP r/w | MXF r | RA r | XMP r/w/c
|
|
4646
|
+
DLL r | INSV r | NEF r/w | RAF r/w | ZIP r
|
|
4647
|
+
DNG r/w | INX r | NKSC r/w | RAM r |
|
|
4648
|
+
DOC r | ISO r | NRW r/w | RAR r |
|
|
4649
|
+
DOCX r | ITC r | NUMBERS r | RAW r/w |
|
|
4650
|
+
DPX r | J2C r | O r | RIFF r |
|
|
4635
4651
|
|
|
4636
4652
|
Meta Information
|
|
4637
4653
|
----------------------+----------------------+---------------------
|
|
@@ -4669,7 +4685,7 @@ L<Tag operations|/Tag operations>
|
|
|
4669
4685
|
-TAG or --TAG Extract or exclude specified tag
|
|
4670
4686
|
-TAG[+-^]=[VALUE] Write new value for tag
|
|
4671
4687
|
-TAG[+-]<=DATFILE Write tag value from contents of file
|
|
4672
|
-
-TAG[+-]<SRCTAG
|
|
4688
|
+
-[+]TAG[+-]<SRCTAG Copy tag value (see -tagsFromFile)
|
|
4673
4689
|
|
|
4674
4690
|
-tagsFromFile SRCFILE Copy tag values from file
|
|
4675
4691
|
-x TAG (-exclude) Exclude specified tag
|
|
@@ -5541,7 +5557,7 @@ with this command:
|
|
|
5541
5557
|
|
|
5542
5558
|
produces output like this:
|
|
5543
5559
|
|
|
5544
|
-
-- Generated by ExifTool 12.
|
|
5560
|
+
-- Generated by ExifTool 12.62 --
|
|
5545
5561
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5546
5562
|
(f/5.6, 1/60s, ISO 100)
|
|
5547
5563
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -6544,11 +6560,22 @@ option no longer suppresses the output "{readyNUM}" message.
|
|
|
6544
6560
|
|
|
6545
6561
|
=item B<-file>I<NUM> I<ALTFILE>
|
|
6546
6562
|
|
|
6547
|
-
Read tags from an alternate source file.
|
|
6563
|
+
Read tags from an alternate source file. Among other things, this allows
|
|
6564
|
+
tags from different files to be compared and combined using the B<-if> and
|
|
6565
|
+
B<-p> options. Tags from alternate files are accessed via the corresponding
|
|
6548
6566
|
family 8 group name (eg. C<File1:TAG> for the B<-file1> option, C<File2:TAG>
|
|
6549
|
-
for B<-file2>, etc). I<ALTFILE> may contain filename formatting codes
|
|
6550
|
-
|
|
6551
|
-
|
|
6567
|
+
for B<-file2>, etc). I<ALTFILE> may contain filename formatting codes like
|
|
6568
|
+
the B<-w> option (%d, %f, etc), and/or tag names with a leading C<$> symbol
|
|
6569
|
+
to access tags from the source file in the same way as the B<-p> option (so
|
|
6570
|
+
any other dollar symbol in the file name must be doubled, eg.
|
|
6571
|
+
C<money$$.jpg>). For example, assuming that the OriginalFileName tag has
|
|
6572
|
+
been set in the edited file, a command to copy Rights from the original file
|
|
6573
|
+
could look like this:
|
|
6574
|
+
|
|
6575
|
+
exiftool -file1 '$originalfilename' '-rights<file1:rights' edited.jpg
|
|
6576
|
+
|
|
6577
|
+
Composite tags may access tags from alternate files using the appropriate
|
|
6578
|
+
(case-sensitive) family 8 group name.
|
|
6552
6579
|
|
|
6553
6580
|
=item B<-list_dir>
|
|
6554
6581
|
|
|
@@ -582,10 +582,10 @@ number of available PDF tags. See
|
|
|
582
582
|
L<http://www.adobe.com/devnet/pdf/pdf_reference.html> for the official PDF
|
|
583
583
|
specification.
|
|
584
584
|
|
|
585
|
-
ExifTool supports reading and writing PDF documents up to version
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
password-protected PDF files.
|
|
585
|
+
ExifTool supports reading and writing PDF documents up to version 2.0,
|
|
586
|
+
including support for RC4, AES-128 and AES-256 encryption. A
|
|
587
|
+
L<Password|../ExifTool.html#Password> option is provided to allow processing
|
|
588
|
+
of password-protected PDF files.
|
|
589
589
|
|
|
590
590
|
ExifTool may be used to write native PDF and XMP metadata to PDF files. It
|
|
591
591
|
uses an incremental update technique that has the advantages of being both
|
|
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
21
21
|
use Image::ExifTool::Exif;
|
|
22
22
|
use Image::ExifTool::ASF; # for GetGUID()
|
|
23
23
|
|
|
24
|
-
$VERSION = '1.
|
|
24
|
+
$VERSION = '1.45';
|
|
25
25
|
|
|
26
26
|
sub ProcessFPX($$);
|
|
27
27
|
sub ProcessFPXR($$$);
|
|
@@ -1539,6 +1539,7 @@ sub ReadFPXValue($$$$$;$$)
|
|
|
1539
1539
|
}
|
|
1540
1540
|
$_[2] = $valPos; # return updated value position
|
|
1541
1541
|
|
|
1542
|
+
push @vals, '' if $type eq 0; # (VT_EMPTY)
|
|
1542
1543
|
if (wantarray) {
|
|
1543
1544
|
return @vals;
|
|
1544
1545
|
} elsif (@vals > 1) {
|
|
@@ -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.34';
|
|
20
20
|
|
|
21
21
|
sub ProcessJpeg2000Box($$$);
|
|
22
22
|
sub ProcessJUMD($$$);
|
|
@@ -34,6 +34,9 @@ my %resolutionUnit = (
|
|
|
34
34
|
6 => 'um',
|
|
35
35
|
);
|
|
36
36
|
|
|
37
|
+
# top-level boxes containing image data
|
|
38
|
+
my %isImageData = ( jp2c=>1, jbrd=>1, jxlp=>1, jxlc=>1 );
|
|
39
|
+
|
|
37
40
|
# map of where information is written in JPEG2000 image
|
|
38
41
|
my %jp2Map = (
|
|
39
42
|
IPTC => 'UUID-IPTC',
|
|
@@ -428,6 +431,7 @@ my %j2cMarker = (
|
|
|
428
431
|
# stuff seen in JPEG XL images:
|
|
429
432
|
#
|
|
430
433
|
# jbrd - JPEG Bitstream Reconstruction Data (allows lossless conversion back to original JPG)
|
|
434
|
+
# jxlp - partial JXL codestream
|
|
431
435
|
jxlc => {
|
|
432
436
|
Name => 'JXLCodestream',
|
|
433
437
|
Format => 'undef',
|
|
@@ -930,7 +934,7 @@ sub ProcessJpeg2000Box($$$)
|
|
|
930
934
|
my $raf = $$dirInfo{RAF};
|
|
931
935
|
my $outfile = $$dirInfo{OutFile};
|
|
932
936
|
my $dirEnd = $dirStart + $dirLen;
|
|
933
|
-
my ($err, $outBuff, $verbose, $doColour);
|
|
937
|
+
my ($err, $outBuff, $verbose, $doColour, $md5);
|
|
934
938
|
|
|
935
939
|
if ($outfile) {
|
|
936
940
|
unless ($raf) {
|
|
@@ -948,6 +952,8 @@ sub ProcessJpeg2000Box($$$)
|
|
|
948
952
|
# (must not set verbose flag when writing!)
|
|
949
953
|
$verbose = $$et{OPTIONS}{Verbose};
|
|
950
954
|
$et->VerboseDir($$dirInfo{DirName}) if $verbose;
|
|
955
|
+
# do MD5 if requested, but only for top-level image data
|
|
956
|
+
$md5 = $$et{ImageDataMD5} if $raf;
|
|
951
957
|
}
|
|
952
958
|
# loop through all contained boxes
|
|
953
959
|
my ($pos, $boxLen, $lastBox);
|
|
@@ -971,6 +977,11 @@ sub ProcessJpeg2000Box($$$)
|
|
|
971
977
|
}
|
|
972
978
|
$boxLen = unpack("x$pos N",$$dataPt); # (length includes header and data)
|
|
973
979
|
$boxID = substr($$dataPt, $pos+4, 4);
|
|
980
|
+
# (ftbl box contains flst boxes with absolute file offsets, not currently handled)
|
|
981
|
+
if ($outfile and $boxID eq 'ftbl') {
|
|
982
|
+
$et->Error("Can't yet handle fragmented JPX files");
|
|
983
|
+
return -1;
|
|
984
|
+
}
|
|
974
985
|
# remove old colr boxes if necessary
|
|
975
986
|
if ($doColour and $boxID eq 'colr') {
|
|
976
987
|
if ($doColour == 1) { # did we successfully write the new colr box?
|
|
@@ -1007,9 +1018,14 @@ sub ProcessJpeg2000Box($$$)
|
|
|
1007
1018
|
while ($raf->Read($buff, 65536)) {
|
|
1008
1019
|
Write($outfile, $buff) or $err = 1;
|
|
1009
1020
|
}
|
|
1010
|
-
}
|
|
1011
|
-
|
|
1012
|
-
|
|
1021
|
+
} else {
|
|
1022
|
+
if ($verbose) {
|
|
1023
|
+
my $msg = sprintf("offset 0x%.4x to end of file", $dataPos + $base + $pos);
|
|
1024
|
+
$et->VPrint(0, "$$et{INDENT}- Tag '${boxID}' ($msg)\n");
|
|
1025
|
+
}
|
|
1026
|
+
if ($md5 and $isImageData{$boxID}) {
|
|
1027
|
+
$et->ImageDataMD5($raf, undef, $boxID);
|
|
1028
|
+
}
|
|
1013
1029
|
}
|
|
1014
1030
|
last; # (ignore the rest of the file when reading)
|
|
1015
1031
|
}
|
|
@@ -1026,6 +1042,8 @@ sub ProcessJpeg2000Box($$$)
|
|
|
1026
1042
|
Write($outfile, $$dataPt) or $err = 1;
|
|
1027
1043
|
$raf->Read($buff,$boxLen) == $boxLen or $err = '', last;
|
|
1028
1044
|
Write($outfile, $buff) or $err = 1;
|
|
1045
|
+
} elsif ($md5 and $isImageData{$boxID}) {
|
|
1046
|
+
$et->ImageDataMD5($raf, $boxLen, $boxID);
|
|
1029
1047
|
} else {
|
|
1030
1048
|
$raf->Seek($boxLen, 1) or $err = 'Seek error', last;
|
|
1031
1049
|
}
|
|
@@ -1038,6 +1056,10 @@ sub ProcessJpeg2000Box($$$)
|
|
|
1038
1056
|
# read the box data
|
|
1039
1057
|
$dataPos = $raf->Tell() - $base;
|
|
1040
1058
|
$raf->Read($buff,$boxLen) == $boxLen or $err = '', last;
|
|
1059
|
+
if ($md5 and $isImageData{$boxID}) {
|
|
1060
|
+
$md5->add($buff);
|
|
1061
|
+
$et->VPrint(0, "$$et{INDENT}(ImageDataMD5: $boxLen bytes of $boxID data)\n");
|
|
1062
|
+
}
|
|
1041
1063
|
$valuePtr = 0;
|
|
1042
1064
|
$dataLen = $boxLen;
|
|
1043
1065
|
} elsif ($pos + $boxLen > $dirEnd) {
|
|
@@ -1311,7 +1333,7 @@ sub ProcessJP2($$)
|
|
|
1311
1333
|
}
|
|
1312
1334
|
|
|
1313
1335
|
#------------------------------------------------------------------------------
|
|
1314
|
-
# Read meta information
|
|
1336
|
+
# Read/write meta information in a JPEG XL image
|
|
1315
1337
|
# Inputs: 0) ExifTool object reference, 1) dirInfo reference
|
|
1316
1338
|
# Returns: 1 on success, 0 if this wasn't a valid JPEG XL file, -1 on write error
|
|
1317
1339
|
sub ProcessJXL($$)
|
|
@@ -1340,6 +1362,9 @@ sub ProcessJXL($$)
|
|
|
1340
1362
|
$$dirInfo{RAF} = new File::RandomAccess(\$buff);
|
|
1341
1363
|
} else {
|
|
1342
1364
|
$et->SetFileType('JXL Codestream','image/jxl', 'jxl');
|
|
1365
|
+
if ($$et{ImageDataMD5} and $raf->Seek(0,0)) {
|
|
1366
|
+
$et->ImageDataMD5($raf, undef, 'JXL');
|
|
1367
|
+
}
|
|
1343
1368
|
return ProcessJXLCodestream($et, \$hdr);
|
|
1344
1369
|
}
|
|
1345
1370
|
} else {
|
|
@@ -17,7 +17,7 @@ use vars qw($VERSION);
|
|
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
18
18
|
use Image::ExifTool::Minolta;
|
|
19
19
|
|
|
20
|
-
$VERSION = '1.
|
|
20
|
+
$VERSION = '1.18';
|
|
21
21
|
|
|
22
22
|
sub ProcessMRW($$;$);
|
|
23
23
|
sub WriteMRW($$;$);
|
|
@@ -489,7 +489,7 @@ sub ProcessMRW($$;$)
|
|
|
489
489
|
$err and $et->Error("MRW format error", $$et{TIFF_TYPE} eq 'ARW');
|
|
490
490
|
} else {
|
|
491
491
|
$err and $et->Warn("MRW format error");
|
|
492
|
-
$et->ImageDataMD5($raf, undef, 'raw');
|
|
492
|
+
$et->ImageDataMD5($raf, undef, 'raw') unless $$et{A100DataOffset};
|
|
493
493
|
}
|
|
494
494
|
return $rtnVal;
|
|
495
495
|
}
|
|
@@ -64,7 +64,7 @@ use Image::ExifTool::Exif;
|
|
|
64
64
|
use Image::ExifTool::GPS;
|
|
65
65
|
use Image::ExifTool::XMP;
|
|
66
66
|
|
|
67
|
-
$VERSION = '4.
|
|
67
|
+
$VERSION = '4.22';
|
|
68
68
|
|
|
69
69
|
sub LensIDConv($$$);
|
|
70
70
|
sub ProcessNikonAVI($$$);
|
|
@@ -2300,8 +2300,8 @@ my %base64coord = (
|
|
|
2300
2300
|
},
|
|
2301
2301
|
},
|
|
2302
2302
|
{ # (Z6_2 firmware version 1.00 and Z7II firmware versions 1.00 & 1.01, ref 28)
|
|
2303
|
-
# 0800=Z6/Z7 0801=Z50 0802=Z5 0803=Z6II/Z7II 0804=Zfc
|
|
2304
|
-
Condition => '$$valPt =~ /^080[
|
|
2303
|
+
# 0800=Z6/Z7 0801=Z50 0802=Z5 0803=Z6II/Z7II 0804=Zfc 0807=Z30
|
|
2304
|
+
Condition => '$$valPt =~ /^080[012347]/',
|
|
2305
2305
|
Name => 'ShotInfoZ7II',
|
|
2306
2306
|
SubDirectory => {
|
|
2307
2307
|
TagTable => 'Image::ExifTool::Nikon::ShotInfoZ7II',
|