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/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
@@ -47,6 +47,6 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "12.60",
50
+ "version" : "12.62",
51
51
  "x_serialization_backend" : "JSON::PP version 4.02"
52
52
  }
package/bin/META.yml CHANGED
@@ -28,5 +28,5 @@ recommends:
28
28
  Time::HiRes: 0
29
29
  requires:
30
30
  perl: 5.004
31
- version: 12.60
31
+ version: 12.62
32
32
  x_serialization_backend: 'JSON::PP version 4.02'
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 | DPX r | ITC r | NRW r/w | RAM r
18
- 3FR r | DR4 r/w/c | J2C r | NUMBERS r | RAR r
19
- 3G2 r/w | DSS r | JNG r/w | O r | RAW r/w
20
- 3GP r/w | DV r | JP2 r/w | ODP r | RIFF r
21
- A r | DVB r/w | JPEG r/w | ODS r | RSRC r
22
- AA r | DVR-MS r | JSON r | ODT r | RTF r
23
- AAE r | DYLIB r | JXL r | OFR r | RW2 r/w
24
- AAX r/w | EIP r | K25 r | OGG r | RWL r/w
25
- ACR r | EPS r/w | KDC r | OGV r | RWZ r
26
- AFM r | EPUB r | KEY r | ONP r | RM r
27
- AI r/w | ERF r/w | LA r | OPUS r | SEQ r
28
- AIFF r | EXE r | LFP r | ORF r/w | SKETCH r
29
- APE r | EXIF r/w/c | LIF r | ORI r/w | SO r
30
- ARQ r/w | EXR r | LNK r | OTF r | SR2 r/w
31
- ARW r/w | EXV r/w/c | LRV r/w | PAC r | SRF r
32
- ASF r | F4A/V r/w | M2TS r | PAGES r | SRW r/w
33
- AVI r | FFF r/w | M4A/V r/w | PBM r/w | SVG r
34
- AVIF r/w | FITS r | MACOS r | PCD r | SWF r
35
- AZW r | FLA r | MAX r | PCX r | THM r/w
36
- BMP r | FLAC r | MEF r/w | PDB r | TIFF r/w
37
- BPG r | FLIF r/w | MIE r/w/c | PDF r/w | TORRENT r
38
- BTF r | FLV r | MIFF r | PEF r/w | TTC r
39
- CHM r | FPF r | MKA r | PFA r | TTF r
40
- COS r | FPX r | MKS r | PFB r | TXT r
41
- CR2 r/w | GIF r/w | MKV r | PFM r | VCF r
42
- CR3 r/w | GPR r/w | MNG r/w | PGF r | VNT r
43
- CRM r/w | GZ r | MOBI r | PGM r/w | VRD r/w/c
44
- CRW r/w | HDP r/w | MODD r | PLIST r | VSD r
45
- CS1 r/w | HDR r | MOI r | PICT r | WAV r
46
- CSV r | HEIC r/w | MOS r/w | PMP r | WDP r/w
47
- CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBP r/w
48
- CZI r | HTML r | MP3 r | PPM r/w | WEBM r
49
- DCM r | ICC r/w/c | MP4 r/w | PPT r | WMA r
50
- DCP r/w | ICO r | MPC r | PPTX r | WMV r
51
- DCR r | ICS r | MPG r | PS r/w | WTV r
52
- DFONT r | IDML r | MPO r/w | PSB r/w | WV r
53
- DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
54
- DJVU r | IND r/w | MRC r | PSP r | XCF r
55
- DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
56
- DNG r/w | INSV r | MXF r | R3D r | XLSX r
57
- DOC r | INX r | NEF r/w | RA r | XMP r/w/c
58
- DOCX r | ISO r | NKSC r/w | RAF r/w | ZIP 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.60.tar.gz | tar -xf -
111
- cd Image-ExifTool-12.60
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.60';
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
- warn $evalWarning;
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
- unless (CanWrite($type)) {
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 and $progressCount >= $progressNext) {
1955
- my $prog = $progressMax ? "$progressCount/$progressMax" : '0/0';
1956
- my $title = $windowTitle;
1957
- my ($num, $denom) = split '/', $prog;
1958
- my $frac = $num / ($denom || 1);
1959
- my $n = $title =~ s/%(\d+)b/%b/ ? $1 : 20; # length of bar
1960
- my $bar = int($frac * $n + 0.5);
1961
- my %lkup = (
1962
- b => ('I' x $bar) . ('.' x ($n - $bar)), # (undocumented)
1963
- f => $orig,
1964
- p => int(100 * $frac + 0.5),
1965
- r => $prog,
1966
- '%'=> '%',
1967
- );
1968
- $title =~ s/%([%bfpr])/$lkup{$1}/eg;
1969
- SetWindowTitle($title);
1970
- undef $progressNext;
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 = FilenameSPrintf($altFile{$g8}, $orig);
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 | DPX r | ITC r | NRW r/w | RAM r
4594
- 3FR r | DR4 r/w/c | J2C r | NUMBERS r | RAR r
4595
- 3G2 r/w | DSS r | JNG r/w | O r | RAW r/w
4596
- 3GP r/w | DV r | JP2 r/w | ODP r | RIFF r
4597
- A r | DVB r/w | JPEG r/w | ODS r | RSRC r
4598
- AA r | DVR-MS r | JSON r | ODT r | RTF r
4599
- AAE r | DYLIB r | JXL r | OFR r | RW2 r/w
4600
- AAX r/w | EIP r | K25 r | OGG r | RWL r/w
4601
- ACR r | EPS r/w | KDC r | OGV r | RWZ r
4602
- AFM r | EPUB r | KEY r | ONP r | RM r
4603
- AI r/w | ERF r/w | LA r | OPUS r | SEQ r
4604
- AIFF r | EXE r | LFP r | ORF r/w | SKETCH r
4605
- APE r | EXIF r/w/c | LIF r | ORI r/w | SO r
4606
- ARQ r/w | EXR r | LNK r | OTF r | SR2 r/w
4607
- ARW r/w | EXV r/w/c | LRV r/w | PAC r | SRF r
4608
- ASF r | F4A/V r/w | M2TS r | PAGES r | SRW r/w
4609
- AVI r | FFF r/w | M4A/V r/w | PBM r/w | SVG r
4610
- AVIF r/w | FITS r | MACOS r | PCD r | SWF r
4611
- AZW r | FLA r | MAX r | PCX r | THM r/w
4612
- BMP r | FLAC r | MEF r/w | PDB r | TIFF r/w
4613
- BPG r | FLIF r/w | MIE r/w/c | PDF r/w | TORRENT r
4614
- BTF r | FLV r | MIFF r | PEF r/w | TTC r
4615
- CHM r | FPF r | MKA r | PFA r | TTF r
4616
- COS r | FPX r | MKS r | PFB r | TXT r
4617
- CR2 r/w | GIF r/w | MKV r | PFM r | VCF r
4618
- CR3 r/w | GPR r/w | MNG r/w | PGF r | VNT r
4619
- CRM r/w | GZ r | MOBI r | PGM r/w | VRD r/w/c
4620
- CRW r/w | HDP r/w | MODD r | PLIST r | VSD r
4621
- CS1 r/w | HDR r | MOI r | PICT r | WAV r
4622
- CSV r | HEIC r/w | MOS r/w | PMP r | WDP r/w
4623
- CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBP r/w
4624
- CZI r | HTML r | MP3 r | PPM r/w | WEBM r
4625
- DCM r | ICC r/w/c | MP4 r/w | PPT r | WMA r
4626
- DCP r/w | ICO r | MPC r | PPTX r | WMV r
4627
- DCR r | ICS r | MPG r | PS r/w | WTV r
4628
- DFONT r | IDML r | MPO r/w | PSB r/w | WV r
4629
- DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
4630
- DJVU r | IND r/w | MRC r | PSP r | XCF r
4631
- DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
4632
- DNG r/w | INSV r | MXF r | R3D r | XLSX r
4633
- DOC r | INX r | NEF r/w | RA r | XMP r/w/c
4634
- DOCX r | ISO r | NKSC r/w | RAF r/w | ZIP 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 Copy tag value (see -tagsFromFile)
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.60 --
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. These tags are accessed via the
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 %d,
6550
- %f and %e. Among other things, this allows tags from different files to be
6551
- compared and combined using the B<-if> and B<-p> options.
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
 
@@ -358,4 +358,3 @@ L<Image::ExifTool::TagNames/BMP Tags>,
358
358
  L<Image::ExifTool(3pm)|Image::ExifTool>
359
359
 
360
360
  =cut
361
-
@@ -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 1.7
586
- extension level 3, including support for RC4, AES-128 and AES-256
587
- encryption. A L<Password|../ExifTool.html#Password> option is provided to allow processing of
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.44';
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.33';
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
- } elsif ($verbose) {
1011
- my $msg = sprintf("offset 0x%.4x to end of file", $dataPos + $base + $pos);
1012
- $et->VPrint(0, "$$et{INDENT}- Tag '${boxID}' ($msg)\n");
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 from a JPEG XL image
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.17';
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.21';
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[01234]/',
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',