exiftool-vendored.exe 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/exiftool_files/Changes +35 -0
- package/bin/exiftool_files/LICENSE +674 -0
- package/bin/exiftool_files/README +45 -44
- package/bin/exiftool_files/exiftool.pl +102 -75
- package/bin/exiftool_files/lib/Image/ExifTool/BMP.pm +0 -1
- package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +4 -4
- package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +31 -6
- package/bin/exiftool_files/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +17 -8
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +10 -7
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +51 -21
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +16 -10
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +9 -0
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +34 -5
- package/bin/exiftool_files/lib/Image/ExifTool/WPG.pm +296 -0
- package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +7 -8
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +12 -4
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +17 -5
- package/bin/exiftool_files/lib/Image/ExifTool/ZIP.pm +159 -41
- package/bin/exiftool_files/lib/Image/ExifTool.pm +118 -50
- package/bin/exiftool_files/lib/Image/ExifTool.pod +51 -42
- package/package.json +2 -2
|
@@ -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.
|
|
@@ -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
|
my $exePath;
|
|
@@ -379,13 +379,14 @@ if ($exePath =~ /\(([^\\\/]+)\)(.exe|.pl)?$/i) {
|
|
|
379
379
|
|
|
380
380
|
# isolate arguments common to all commands
|
|
381
381
|
if (grep /^-common_args$/i, @ARGV) {
|
|
382
|
-
my (@newArgs, $common);
|
|
382
|
+
my (@newArgs, $common, $end);
|
|
383
383
|
foreach (@ARGV) {
|
|
384
|
-
if (/^-common_args$/i) {
|
|
384
|
+
if (/^-common_args$/i and not $end) {
|
|
385
385
|
$common = 1;
|
|
386
386
|
} elsif ($common) {
|
|
387
387
|
push @commonArgs, $_;
|
|
388
388
|
} else {
|
|
389
|
+
$end = 1 if $_ eq '--';
|
|
389
390
|
push @newArgs, $_;
|
|
390
391
|
}
|
|
391
392
|
}
|
|
@@ -850,7 +851,7 @@ for (;;) {
|
|
|
850
851
|
$mt->Options(Charset => $charset);
|
|
851
852
|
}
|
|
852
853
|
if ($evalWarning) {
|
|
853
|
-
|
|
854
|
+
Warn $evalWarning;
|
|
854
855
|
} else {
|
|
855
856
|
$setCharset = $mt->Options('Charset');
|
|
856
857
|
}
|
|
@@ -1735,7 +1736,8 @@ if ($textOut) {
|
|
|
1735
1736
|
if ($outOpt) {
|
|
1736
1737
|
my $type = GetFileType($outOpt);
|
|
1737
1738
|
if ($type) {
|
|
1738
|
-
|
|
1739
|
+
# (must test original file name because we can write .webp but not other RIFF types)
|
|
1740
|
+
unless (CanWrite($outOpt)) {
|
|
1739
1741
|
Warn "Can't write $type files\n";
|
|
1740
1742
|
$rtnVal = 1;
|
|
1741
1743
|
next;
|
|
@@ -1949,23 +1951,31 @@ sub GetImageInfo($$)
|
|
|
1949
1951
|
my (@foundTags, $info, $file, $ind, $g8);
|
|
1950
1952
|
|
|
1951
1953
|
# set window title for this file if necessary
|
|
1952
|
-
if (defined $windowTitle
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1954
|
+
if (defined $windowTitle) {
|
|
1955
|
+
if ($progressCount >= $progressNext) {
|
|
1956
|
+
my $prog = $progressMax ? "$progressCount/$progressMax" : '0/0';
|
|
1957
|
+
my $title = $windowTitle;
|
|
1958
|
+
my ($num, $denom) = split '/', $prog;
|
|
1959
|
+
my $frac = $num / ($denom || 1);
|
|
1960
|
+
my $n = $title =~ s/%(\d+)b/%b/ ? $1 : 20; # length of bar
|
|
1961
|
+
my $bar = int($frac * $n + 0.5);
|
|
1962
|
+
my %lkup = (
|
|
1963
|
+
b => ('I' x $bar) . ('.' x ($n - $bar)),
|
|
1964
|
+
f => $orig,
|
|
1965
|
+
p => int(100 * $frac + 0.5),
|
|
1966
|
+
r => $prog,
|
|
1967
|
+
'%'=> '%',
|
|
1968
|
+
);
|
|
1969
|
+
$title =~ s/%([%bfpr])/$lkup{$1}/eg;
|
|
1970
|
+
SetWindowTitle($title);
|
|
1971
|
+
if (defined $progressMax) {
|
|
1972
|
+
undef $progressNext;
|
|
1973
|
+
} else {
|
|
1974
|
+
$progressNext += $progressIncr;
|
|
1975
|
+
}
|
|
1976
|
+
}
|
|
1977
|
+
# ($progressMax is not defined for "-progress:%f")
|
|
1978
|
+
++$progressCount unless defined $progressMax;
|
|
1969
1979
|
}
|
|
1970
1980
|
unless (length $orig or $outOpt) {
|
|
1971
1981
|
Warn qq(Error: Zero-length file name - ""\n);
|
|
@@ -1991,7 +2001,11 @@ sub GetImageInfo($$)
|
|
|
1991
2001
|
}
|
|
1992
2002
|
# set alternate file names
|
|
1993
2003
|
foreach $g8 (sort keys %altFile) {
|
|
1994
|
-
my $altName =
|
|
2004
|
+
my $altName = $orig;
|
|
2005
|
+
# must double any '$' symbols in the original file name because
|
|
2006
|
+
# they are used for tag names in a -fileNUM argument
|
|
2007
|
+
$altName =~ s/\$/\$\$/g;
|
|
2008
|
+
$altName = FilenameSPrintf($altFile{$g8}, $altName);
|
|
1995
2009
|
$et->SetAlternateFile($g8, $altName);
|
|
1996
2010
|
}
|
|
1997
2011
|
|
|
@@ -2534,6 +2548,7 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2534
2548
|
$xtra .= " et:table='${table}'";
|
|
2535
2549
|
$xtra .= " et:index='${index}'" if defined $index;
|
|
2536
2550
|
}
|
|
2551
|
+
# Note: New $xtra attributes must be added to %ignoreEtProp in XMP.pm!
|
|
2537
2552
|
my $lastVal = $val;
|
|
2538
2553
|
for ($valNum=0; $valNum<2; ++$valNum) {
|
|
2539
2554
|
$val = FormatXML($val, $ind, $group);
|
|
@@ -3698,7 +3713,7 @@ sub ProcessFiles($;$)
|
|
|
3698
3713
|
if (defined $progressMax) {
|
|
3699
3714
|
unless (defined $progressNext) {
|
|
3700
3715
|
$progressNext = $progressCount + $progressIncr;
|
|
3701
|
-
$progressNext -= $progressNext % $progressIncr;
|
|
3716
|
+
$progressNext -= $progressNext % $progressIncr; # (show even multiples)
|
|
3702
3717
|
$progressNext = $progressMax if $progressNext > $progressMax;
|
|
3703
3718
|
}
|
|
3704
3719
|
++$progressCount;
|
|
@@ -4477,7 +4492,7 @@ sub Progress($$)
|
|
|
4477
4492
|
my ($file, $msg) = @_;
|
|
4478
4493
|
if (defined $progStr) {
|
|
4479
4494
|
print $file $msg, $progStr, "\n";
|
|
4480
|
-
undef $progressNext;
|
|
4495
|
+
undef $progressNext if defined $progressMax;
|
|
4481
4496
|
}
|
|
4482
4497
|
}
|
|
4483
4498
|
|
|
@@ -4599,48 +4614,49 @@ DESCRIPTION
|
|
|
4599
4614
|
|
|
4600
4615
|
File Types
|
|
4601
4616
|
------------+-------------+-------------+-------------+------------
|
|
4602
|
-
360 r/w |
|
|
4603
|
-
3FR r |
|
|
4604
|
-
3G2 r/w |
|
|
4605
|
-
3GP r/w |
|
|
4606
|
-
A r |
|
|
4607
|
-
AA r |
|
|
4608
|
-
AAE r |
|
|
4609
|
-
AAX r/w |
|
|
4610
|
-
ACR r |
|
|
4611
|
-
AFM r |
|
|
4612
|
-
AI r/w |
|
|
4613
|
-
AIFF r |
|
|
4614
|
-
APE r |
|
|
4615
|
-
ARQ r/w |
|
|
4616
|
-
ARW r/w |
|
|
4617
|
-
ASF r |
|
|
4618
|
-
AVI r |
|
|
4619
|
-
AVIF r/w |
|
|
4620
|
-
AZW r |
|
|
4621
|
-
BMP r |
|
|
4622
|
-
BPG r |
|
|
4623
|
-
BTF r |
|
|
4624
|
-
CHM r |
|
|
4625
|
-
COS r |
|
|
4626
|
-
CR2 r/w |
|
|
4627
|
-
CR3 r/w |
|
|
4628
|
-
CRM r/w |
|
|
4629
|
-
CRW r/w |
|
|
4630
|
-
CS1 r/w |
|
|
4631
|
-
CSV r |
|
|
4632
|
-
CUR r |
|
|
4633
|
-
CZI r |
|
|
4634
|
-
DCM r |
|
|
4635
|
-
DCP r/w |
|
|
4636
|
-
DCR r |
|
|
4637
|
-
DFONT r |
|
|
4638
|
-
DIVX r |
|
|
4639
|
-
DJVU r |
|
|
4640
|
-
DLL r |
|
|
4641
|
-
DNG r/w |
|
|
4642
|
-
DOC r |
|
|
4643
|
-
DOCX r |
|
|
4617
|
+
360 r/w | DR4 r/w/c | JNG r/w | ODP r | RSRC r
|
|
4618
|
+
3FR r | DSS r | JP2 r/w | ODS r | RTF r
|
|
4619
|
+
3G2 r/w | DV r | JPEG r/w | ODT r | RW2 r/w
|
|
4620
|
+
3GP r/w | DVB r/w | JSON r | OFR r | RWL r/w
|
|
4621
|
+
A r | DVR-MS r | JXL r | OGG r | RWZ r
|
|
4622
|
+
AA r | DYLIB r | K25 r | OGV r | RM r
|
|
4623
|
+
AAE r | EIP r | KDC r | ONP r | SEQ r
|
|
4624
|
+
AAX r/w | EPS r/w | KEY r | OPUS r | SKETCH r
|
|
4625
|
+
ACR r | EPUB r | LA r | ORF r/w | SO r
|
|
4626
|
+
AFM r | ERF r/w | LFP r | ORI r/w | SR2 r/w
|
|
4627
|
+
AI r/w | EXE r | LIF r | OTF r | SRF r
|
|
4628
|
+
AIFF r | EXIF r/w/c | LNK r | PAC r | SRW r/w
|
|
4629
|
+
APE r | EXR r | LRV r/w | PAGES r | SVG r
|
|
4630
|
+
ARQ r/w | EXV r/w/c | M2TS r | PBM r/w | SWF r
|
|
4631
|
+
ARW r/w | F4A/V r/w | M4A/V r/w | PCD r | THM r/w
|
|
4632
|
+
ASF r | FFF r/w | MACOS r | PCX r | TIFF r/w
|
|
4633
|
+
AVI r | FITS r | MAX r | PDB r | TORRENT r
|
|
4634
|
+
AVIF r/w | FLA r | MEF r/w | PDF r/w | TTC r
|
|
4635
|
+
AZW r | FLAC r | MIE r/w/c | PEF r/w | TTF r
|
|
4636
|
+
BMP r | FLIF r/w | MIFF r | PFA r | TXT r
|
|
4637
|
+
BPG r | FLV r | MKA r | PFB r | VCF r
|
|
4638
|
+
BTF r | FPF r | MKS r | PFM r | VNT r
|
|
4639
|
+
CHM r | FPX r | MKV r | PGF r | VRD r/w/c
|
|
4640
|
+
COS r | GIF r/w | MNG r/w | PGM r/w | VSD r
|
|
4641
|
+
CR2 r/w | GPR r/w | MOBI r | PLIST r | WAV r
|
|
4642
|
+
CR3 r/w | GZ r | MODD r | PICT r | WDP r/w
|
|
4643
|
+
CRM r/w | HDP r/w | MOI r | PMP r | WEBP r/w
|
|
4644
|
+
CRW r/w | HDR r | MOS r/w | PNG r/w | WEBM r
|
|
4645
|
+
CS1 r/w | HEIC r/w | MOV r/w | PPM r/w | WMA r
|
|
4646
|
+
CSV r | HEIF r/w | MP3 r | PPT r | WMV r
|
|
4647
|
+
CUR r | HTML r | MP4 r/w | PPTX r | WPG r
|
|
4648
|
+
CZI r | ICC r/w/c | MPC r | PS r/w | WTV r
|
|
4649
|
+
DCM r | ICO r | MPG r | PSB r/w | WV r
|
|
4650
|
+
DCP r/w | ICS r | MPO r/w | PSD r/w | X3F r/w
|
|
4651
|
+
DCR r | IDML r | MQV r/w | PSP r | XCF r
|
|
4652
|
+
DFONT r | IIQ r/w | MRC r | QTIF r/w | XLS r
|
|
4653
|
+
DIVX r | IND r/w | MRW r/w | R3D r | XLSX r
|
|
4654
|
+
DJVU r | INSP r/w | MXF r | RA r | XMP r/w/c
|
|
4655
|
+
DLL r | INSV r | NEF r/w | RAF r/w | ZIP r
|
|
4656
|
+
DNG r/w | INX r | NKSC r/w | RAM r |
|
|
4657
|
+
DOC r | ISO r | NRW r/w | RAR r |
|
|
4658
|
+
DOCX r | ITC r | NUMBERS r | RAW r/w |
|
|
4659
|
+
DPX r | J2C r | O r | RIFF r |
|
|
4644
4660
|
|
|
4645
4661
|
Meta Information
|
|
4646
4662
|
----------------------+----------------------+---------------------
|
|
@@ -4677,7 +4693,7 @@ OPTIONS
|
|
|
4677
4693
|
-TAG or --TAG Extract or exclude specified tag
|
|
4678
4694
|
-TAG[+-^]=[VALUE] Write new value for tag
|
|
4679
4695
|
-TAG[+-]<=DATFILE Write tag value from contents of file
|
|
4680
|
-
-TAG[+-]<SRCTAG
|
|
4696
|
+
-[+]TAG[+-]<SRCTAG Copy tag value (see -tagsFromFile)
|
|
4681
4697
|
|
|
4682
4698
|
-tagsFromFile SRCFILE Copy tag values from file
|
|
4683
4699
|
-x TAG (-exclude) Exclude specified tag
|
|
@@ -5565,7 +5581,7 @@ OPTIONS
|
|
|
5565
5581
|
|
|
5566
5582
|
produces output like this:
|
|
5567
5583
|
|
|
5568
|
-
-- Generated by ExifTool 12.
|
|
5584
|
+
-- Generated by ExifTool 12.62 --
|
|
5569
5585
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5570
5586
|
(f/5.6, 1/60s, ISO 100)
|
|
5571
5587
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -6548,12 +6564,23 @@ OPTIONS
|
|
|
6548
6564
|
suppresses the output "{readyNUM}" message.
|
|
6549
6565
|
|
|
6550
6566
|
-file*NUM* *ALTFILE*
|
|
6551
|
-
Read tags from an alternate source file.
|
|
6552
|
-
|
|
6553
|
-
|
|
6554
|
-
|
|
6555
|
-
|
|
6556
|
-
|
|
6567
|
+
Read tags from an alternate source file. Among other things, this
|
|
6568
|
+
allows tags from different files to be compared and combined using
|
|
6569
|
+
the -if and -p options. Tags from alternate files are accessed via
|
|
6570
|
+
the corresponding family 8 group name (eg. "File1:TAG" for the
|
|
6571
|
+
-file1 option, "File2:TAG" for -file2, etc). *ALTFILE* may contain
|
|
6572
|
+
filename formatting codes like the -w option (%d, %f, etc), and/or
|
|
6573
|
+
tag names with a leading "$" symbol to access tags from the source
|
|
6574
|
+
file in the same way as the -p option (so any other dollar symbol
|
|
6575
|
+
in the file name must be doubled, eg. "money$$.jpg"). For example,
|
|
6576
|
+
assuming that the OriginalFileName tag has been set in the edited
|
|
6577
|
+
file, a command to copy Rights from the original file could look
|
|
6578
|
+
like this:
|
|
6579
|
+
|
|
6580
|
+
exiftool -file1 "$originalfilename" "-rights<file1:rights" edited.jpg
|
|
6581
|
+
|
|
6582
|
+
Composite tags may access tags from alternate files using the
|
|
6583
|
+
appropriate (case-sensitive) family 8 group name.
|
|
6557
6584
|
|
|
6558
6585
|
-list_dir
|
|
6559
6586
|
List directories themselves instead of their contents. This option
|
|
@@ -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',
|