exiftool_vendored 12.58.0 → 12.60.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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +45 -3
  3. data/bin/MANIFEST +4 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +2 -2
  7. data/bin/config_files/example.config +1 -0
  8. data/bin/exiftool +81 -54
  9. data/bin/lib/Image/ExifTool/CanonRaw.pm +5 -1
  10. data/bin/lib/Image/ExifTool/DJI.pm +2 -2
  11. data/bin/lib/Image/ExifTool/Exif.pm +53 -14
  12. data/bin/lib/Image/ExifTool/FlashPix.pm +27 -9
  13. data/bin/lib/Image/ExifTool/FujiFilm.pm +6 -3
  14. data/bin/lib/Image/ExifTool/Geotag.pm +30 -7
  15. data/bin/lib/Image/ExifTool/LIF.pm +10 -2
  16. data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -1
  17. data/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -1
  18. data/bin/lib/Image/ExifTool/Nikon.pm +6 -5
  19. data/bin/lib/Image/ExifTool/Olympus.pm +87 -7
  20. data/bin/lib/Image/ExifTool/PNG.pm +10 -2
  21. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +27 -1
  22. data/bin/lib/Image/ExifTool/PhaseOne.pm +14 -1
  23. data/bin/lib/Image/ExifTool/QuickTime.pm +21 -6
  24. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +37 -5
  25. data/bin/lib/Image/ExifTool/RIFF.pm +32 -11
  26. data/bin/lib/Image/ExifTool/Ricoh.pm +2 -1
  27. data/bin/lib/Image/ExifTool/SigmaRaw.pm +9 -3
  28. data/bin/lib/Image/ExifTool/Sony.pm +2 -1
  29. data/bin/lib/Image/ExifTool/TagLookup.pm +2254 -2246
  30. data/bin/lib/Image/ExifTool/TagNames.pod +45 -25
  31. data/bin/lib/Image/ExifTool/WriteExif.pl +13 -13
  32. data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
  33. data/bin/lib/Image/ExifTool/Writer.pl +111 -19
  34. data/bin/lib/Image/ExifTool/XMP.pm +18 -3
  35. data/bin/lib/Image/ExifTool/XMP2.pl +2 -1
  36. data/bin/lib/Image/ExifTool.pm +109 -17
  37. data/bin/lib/Image/ExifTool.pod +40 -5
  38. data/bin/perl-Image-ExifTool.spec +1 -1
  39. data/lib/exiftool_vendored/version.rb +1 -1
  40. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: daebca4fbc1adcea00bcf7dc637e328f4534a115f69a17f10bca60f8a21dee01
4
- data.tar.gz: 512c1da726768d49d97b8262303f8c524b4ea23ccc8c25f1350f93a121813be4
3
+ metadata.gz: 348c2538720f815bacaf609de1dbb52e18f720663ea9e2194c92941b5f80d5ec
4
+ data.tar.gz: 124c2564aba8f2fa4af8b2bf16c654b46624031b38bb64e6ed4ed3d6cc2fb596
5
5
  SHA512:
6
- metadata.gz: 6d29ac70643b583a0d01c512e2054700e15cdf60091042ed4de7c3de85feca75fcd94b2201691a0360875c02b293cc00632c6dce29888e735a488dac50712c70
7
- data.tar.gz: cee8f9dcbe026dc2e5bb1de5db902904c460c6e71cf4ab9ac64b9f2a8357c3857be328912f1deedf3f51c00f99b50f07b463884e60f235f858ef33bf5cd417f7
6
+ metadata.gz: b32a41d3586f914940ddfc5f3f947c323006f627ce6c3a050f34111817776e26a4a5e535f56194998ec38aa5ea7f27e350388fbbd517dd366d826324c9dcd9e4
7
+ data.tar.gz: 9b3d5cb69b62ca6bc41293ec56110e0c28e7510561303bc8c3f3eb0ee01500f5c92dd8ff60ace8f53c54c64a28c92cfa84b0fbebe7238cb190872433c62f4103
data/bin/Changes CHANGED
@@ -4,9 +4,51 @@ ExifTool Version History
4
4
 
5
5
  RSS feed: https://exiftool.org/rss.xml
6
6
 
7
- Note: The most recent production release is Version 12.50. (Other versions are
7
+ Note: The most recent production release is Version 12.60. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Apr. 5, 2023 - Version 12.60 (production release)
11
+
12
+ - Added a new Sony FileFormat value
13
+ - Added Validate warning about duplicate EXIF
14
+ - Added ability to edit JPEG APP1 EXIF segment with incorrect header
15
+ - Decode a few new Sony ARW tags
16
+ - Improved -htmldump of non-EXIF-based maker notes
17
+ - Enhanced -geotag from CSV files support GPSSpeed (with variable units),
18
+ "bearing" for GPSTrack, and GPSDateTime in format "dd.mm.YYYY HH:MM:SS"
19
+ - Enhanced ImageDataMD5 to also support CRW, RAF, X3F and AVIF images
20
+ - Enhanced -efile option to also record updated and created file names
21
+ - Family 8 group names may now also be used in Composite Require/Desire tags
22
+ - Fixed handling of undefined tags in -if conditions to conform with
23
+ documentation and match -p and -tagsFromFile behaviour when -m or -f option
24
+ is used
25
+ - Fixed problem where setting the Geotime value didn't work when using an
26
+ advanced-formatting expression containing a greater-than symbol (>)
27
+
28
+ Mar. 28, 2023 - Version 12.59
29
+
30
+ - COMPATIBILITY WARNING: Changed the calculated ImageDataMD5 for JPEG images
31
+ to include all data from the SOS to the EOI (including the SOS marker but
32
+ not the EOI marker)
33
+ - Added new -fileNUM option to load tags from alternate files
34
+ - Added family 8 groups for accessing tags from alternate files
35
+ - Added new XMP-et:OriginalImageMD5 tag for storing ImageDataMD5 value
36
+ - Added verbose ImageDataMD5 message for JPEG files
37
+ - Added a new Nikon LensID (thanks Warren Hatch)
38
+ - Decode a new Olympus tag and improved decoding of another (thanks Herb)
39
+ - Decode a couple of new PanasonicRaw tags
40
+ - Decode image coordinates for a couple more VNT object types
41
+ - Enhanced ImageDataMD5 to also support MRW, CR3, IIQ, PNG, MOV/MP4 and some
42
+ RIFF-based files
43
+ - Improved verbose messages when deleting NikonApp trailer
44
+ - Patched to avoid structure warnings when copying tags from Nikon files
45
+ containing NKSC metadata
46
+ - Fixed %-C filename format code to work properly with the -fileOrder and
47
+ -progress options
48
+ - Fixed potential ValueConv warning when reading LIF files
49
+ - API Changes:
50
+ - Added SetAlternateFile method
51
+
10
52
  Mar. 15, 2023 - Version 12.58
11
53
 
12
54
  - Added Extra ImageDataMD5 tag to calculate MD5 of image data only
@@ -171,6 +213,8 @@ Nov. 8, 2022 - Version 12.50 (production release)
171
213
  - Fixed inconsistent year and time zone for Kenwood dashcam timed GPS in MP4
172
214
  videos
173
215
 
216
+ History of older versions (back to Nov. 19, 2003 - Version 1.00) -->
217
+
174
218
  Oct. 19, 2022 - Version 12.49
175
219
 
176
220
  - Added read support for Windows ICO and CUR files
@@ -338,8 +382,6 @@ June 1, 2022 - Version 12.42 (production release)
338
382
  - Patched to allow PDF Encrypt object to be "null"
339
383
  - Fixed bug reading ICC_Profile 'meta' tags
340
384
 
341
- History of older versions (back to Nov. 19, 2003 - Version 1.00) -->
342
-
343
385
  Apr. 7, 2022 - Version 12.41
344
386
 
345
387
  - Added support for "OM SYSTEM" maker notes
data/bin/MANIFEST CHANGED
@@ -530,6 +530,9 @@ t/ExifTool_3.out
530
530
  t/ExifTool_30.out
531
531
  t/ExifTool_31.out
532
532
  t/ExifTool_32.out
533
+ t/ExifTool_33.out
534
+ t/ExifTool_34.out
535
+ t/ExifTool_35.out
533
536
  t/ExifTool_4.out
534
537
  t/ExifTool_5.out
535
538
  t/ExifTool_6.out
@@ -903,6 +906,7 @@ t/Writer_56.out
903
906
  t/Writer_58.out
904
907
  t/Writer_59.out
905
908
  t/Writer_6.out
909
+ t/Writer_60.out
906
910
  t/Writer_7.out
907
911
  t/Writer_9.out
908
912
  t/XMP.t
data/bin/META.json CHANGED
@@ -47,5 +47,5 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "12.58"
50
+ "version" : "12.60"
51
51
  }
data/bin/META.yml CHANGED
@@ -28,4 +28,4 @@ recommends:
28
28
  Time::HiRes: 0
29
29
  requires:
30
30
  perl: 5.004
31
- version: 12.58
31
+ version: 12.60
data/bin/README CHANGED
@@ -107,8 +107,8 @@ your home directory, then you would type the following commands in a
107
107
  terminal window to extract and run ExifTool:
108
108
 
109
109
  cd ~/Desktop
110
- gzip -dc Image-ExifTool-12.58.tar.gz | tar -xf -
111
- cd Image-ExifTool-12.58
110
+ gzip -dc Image-ExifTool-12.60.tar.gz | tar -xf -
111
+ cd Image-ExifTool-12.60
112
112
  ./exiftool t/images/ExifTool.jpg
113
113
 
114
114
  Note: These commands extract meta information from one of the test images.
@@ -210,6 +210,7 @@
210
210
  3 => 'PreviewImage (1)',
211
211
  # (if the MPF has 2 previews, MPImage3 could be the larger one)
212
212
  4 => 'MPImage3',
213
+ 5 => 'JpgFromRaw2', # in RW2 from newer Panasonic models
213
214
  },
214
215
  # ValueConv may also be a code reference
215
216
  # Inputs: 0) reference to list of values, 1) ExifTool object
data/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '12.58';
14
+ my $version = '12.60';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  BEGIN {
@@ -103,6 +103,7 @@ my @newValues; # list of new tag values to set
103
103
  my @requestTags; # tags to request (for -p or -if option arguments)
104
104
  my @srcFmt; # source file name format strings
105
105
  my @tags; # list of tags to extract
106
+ my %altFile; # alternate files to extract information (keyed by lower-case family 8 group)
106
107
  my %appended; # list of files appended to
107
108
  my %countLink; # count hard and symbolic links made
108
109
  my %created; # list of files we created
@@ -115,6 +116,7 @@ my %outComma; # flag that output text file needs a comma
115
116
  my %outTrailer; # trailer for output text file
116
117
  my %preserveTime; # preserved timestamps for files
117
118
  my %printFmt; # the contents of the print format file
119
+ my %seqFileDir; # file sequence number in each directory
118
120
  my %setTags; # hash of list references for tags to set from files
119
121
  my %setTagsList; # list of other tag lists for multiple -tagsFromFile from the same file
120
122
  my %usedFileName; # lookup for file names we already used in TestName feature
@@ -196,7 +198,7 @@ my $saveCount; # count the number of times we will/did call SaveNewValues()
196
198
  my $scanWritable; # flag to process only writable file types
197
199
  my $sectHeader; # current section header for -p option
198
200
  my $sectTrailer; # section trailer for -p option
199
- my $seqFileBase; # sequential file number at start of directory
201
+ my $seqFileDir; # sequential file number used for %-C
200
202
  my $seqFileNum; # sequential file number used for %C
201
203
  my $setCharset; # character set setting ('default' if not set and -csv -b used)
202
204
  my $showGroup; # number of group to show (may be zero or '')
@@ -450,6 +452,7 @@ undef %outComma;
450
452
  undef %outTrailer;
451
453
  undef %printFmt;
452
454
  undef %preserveTime;
455
+ undef %seqFileDir;
453
456
  undef %setTags;
454
457
  undef %setTagsList;
455
458
  undef %usedFileName;
@@ -536,7 +539,7 @@ $quiet = 0;
536
539
  $rtnVal = 0;
537
540
  $saveCount = 0;
538
541
  $sectTrailer = '';
539
- $seqFileBase = 0;
542
+ $seqFileDir = 0;
540
543
  $seqFileNum = 0;
541
544
  $tabFormat = 0;
542
545
  $vout = \*STDOUT;
@@ -919,12 +922,14 @@ for (;;) {
919
922
  $mt->Options(Duplicates => 1);
920
923
  next;
921
924
  }
922
- if (/^efile(\d)?(!)?$/i) {
925
+ if (/^efile(\d+)?(!)?$/i) {
923
926
  my $arg = shift;
924
927
  defined $arg or Error("Expecting file name for -$_ option\n"), $badCmd=1, next;
925
- $efile[0] = $arg if not $1 or $1 & 0x01;
926
- $efile[1] = $arg if $1 and $1 & 0x02;
927
- $efile[2] = $arg if $1 and $1 & 0x04;
928
+ $efile[0] = $arg if not $1 or $1 & 0x01;# error
929
+ $efile[1] = $arg if $1 and $1 & 0x02; # unchanged
930
+ $efile[2] = $arg if $1 and $1 & 0x04; # failed -if condition
931
+ $efile[3] = $arg if $1 and $1 & 0x08; # updated
932
+ $efile[4] = $arg if $1 and $1 & 0x016; # created
928
933
  unlink $arg if $2;
929
934
  next;
930
935
  }
@@ -950,6 +955,10 @@ for (;;) {
950
955
  $mt->Options(FastScan => (length $1 ? $1 : 1));
951
956
  next;
952
957
  }
958
+ if (/^(file\d+)$/i) {
959
+ $altFile{lc $1} = shift or Error("Expecting file name for -file option\n"), $badCmd=1, next;
960
+ next;
961
+ }
953
962
  if (/^fileorder(\d*)$/i) {
954
963
  push @fileOrder, shift if @ARGV;
955
964
  my $num = $1 || 0;
@@ -1330,7 +1339,7 @@ for (;;) {
1330
1339
  AddSetTagsFile($setTagsFile = '@') if not $setTagsFile and /(<|>)/;
1331
1340
  if ($setTagsFile) {
1332
1341
  push @{$setTags{$setTagsFile}}, $_;
1333
- if (/>/) {
1342
+ if ($1 eq '>') {
1334
1343
  $useMWG = 1 if /^(.*>\s*)?mwg:/si;
1335
1344
  if (/\b(filename|directory|testname)#?$/i) {
1336
1345
  $doSetFileName = 1;
@@ -1939,7 +1948,7 @@ Exit $rtnValApp; # all done
1939
1948
  sub GetImageInfo($$)
1940
1949
  {
1941
1950
  my ($et, $orig) = @_;
1942
- my (@foundTags, $info, $file, $ind);
1951
+ my (@foundTags, $info, $file, $ind, $g8);
1943
1952
 
1944
1953
  # set window title for this file if necessary
1945
1954
  if (defined $windowTitle and $progressCount >= $progressNext) {
@@ -1982,6 +1991,11 @@ sub GetImageInfo($$)
1982
1991
  } else {
1983
1992
  $file = $orig;
1984
1993
  }
1994
+ # set alternate file names
1995
+ foreach $g8 (sort keys %altFile) {
1996
+ my $altName = FilenameSPrintf($altFile{$g8}, $orig);
1997
+ $et->SetAlternateFile($g8, $altName);
1998
+ }
1985
1999
 
1986
2000
  my $pipe = $file;
1987
2001
  if ($doUnzip) {
@@ -2071,6 +2085,7 @@ sub GetImageInfo($$)
2071
2085
  push @delFiles, $original;
2072
2086
  } elsif ($et->Rename($original, $file)) {
2073
2087
  $verbose and print $vout "Restored from $original\n";
2088
+ EFile($file, 3);
2074
2089
  ++$countGoodWr;
2075
2090
  } else {
2076
2091
  Warn "Error renaming $original\n";
@@ -2080,6 +2095,8 @@ sub GetImageInfo($$)
2080
2095
  return;
2081
2096
  }
2082
2097
  ++$seqFileNum; # increment our file counter
2098
+ my ($dir) = Image::ExifTool::SplitFileName($orig);
2099
+ $seqFileDir = $seqFileDir{$dir} = ($seqFileDir{$dir} || 0) + 1;
2083
2100
 
2084
2101
  my $lineCount = 0;
2085
2102
  my ($fp, $outfile, $append);
@@ -3028,6 +3045,7 @@ sub SetImageInfo($$$)
3028
3045
  $r3 = $et->SetSystemTags($file);
3029
3046
  }
3030
3047
  if ($r0 > 0 or $r1 > 0 or $r2 > 0 or $r3 > 0) {
3048
+ EFile($infile, 3);
3031
3049
  ++$countGoodWr;
3032
3050
  } elsif ($r0 < 0 or $r1 < 0 or $r2 < 0 or $r3 < 0) {
3033
3051
  EFile($infile);
@@ -3142,6 +3160,7 @@ sub SetImageInfo($$$)
3142
3160
  $preserveTime{$file} = [ $aTime, $mTime, $cTime ];
3143
3161
  }
3144
3162
  }
3163
+ EFile($infile, 3);
3145
3164
  ++$countGoodWr;
3146
3165
  } else {
3147
3166
  close(NEW_FILE);
@@ -3157,6 +3176,7 @@ sub SetImageInfo($$$)
3157
3176
  # simply rename temporary file to replace original
3158
3177
  # (if we didn't already rename it to add "_original")
3159
3178
  } elsif ($et->Rename($tmpFile, $dstFile)) {
3179
+ EFile($infile, 3);
3160
3180
  ++$countGoodWr;
3161
3181
  } else {
3162
3182
  my $newFile = $tmpFile;
@@ -3174,21 +3194,26 @@ sub SetImageInfo($$$)
3174
3194
  # (don't delete tmp file now because it is all we have left)
3175
3195
  ++$countBadWr;
3176
3196
  } else {
3197
+ EFile($infile, 3);
3177
3198
  ++$countGoodWr;
3178
3199
  }
3179
3200
  }
3180
3201
  } elsif ($overwriteOrig) {
3181
3202
  # erase original file
3203
+ EFile($infile, 3);
3182
3204
  $et->Unlink($file) or Warn "Error erasing original $file\n";
3183
3205
  ++$countGoodWr;
3184
3206
  } else {
3207
+ EFile($infile, 4);
3185
3208
  ++$countGoodCr;
3186
3209
  }
3187
3210
  } else {
3188
3211
  # this file was created from scratch, not edited
3212
+ EFile($infile, 4);
3189
3213
  ++$countGoodCr;
3190
3214
  }
3191
3215
  } else {
3216
+ EFile($infile, 3);
3192
3217
  ++$countGoodWr;
3193
3218
  }
3194
3219
  } elsif ($success) {
@@ -3741,8 +3766,6 @@ sub ScanDir($$;$)
3741
3766
  $utf8Name = 1;
3742
3767
  }
3743
3768
  return if $ignore{$dir};
3744
- my $oldBase = $seqFileBase;
3745
- $seqFileBase = $seqFileNum;
3746
3769
  # use Win32::FindFile on Windows if available
3747
3770
  # (ReadDir will croak if there is a wildcard, so check for this)
3748
3771
  if ($^O eq 'MSWin32' and $dir !~ /[*?]/) {
@@ -3774,7 +3797,6 @@ sub ScanDir($$;$)
3774
3797
  # use standard perl library routines to read directory
3775
3798
  unless (opendir(DIR_HANDLE, $dir)) {
3776
3799
  Warn("Error opening directory $dir\n");
3777
- $seqFileBase = $oldBase + ($seqFileNum - $seqFileBase);
3778
3800
  return;
3779
3801
  }
3780
3802
  @fileList = readdir(DIR_HANDLE);
@@ -3854,8 +3876,6 @@ sub ScanDir($$;$)
3854
3876
  }
3855
3877
  ++$countDir;
3856
3878
  $et->Options(CharsetFileName => $enc); # restore original setting
3857
- # update sequential file base for parent directory
3858
- $seqFileBase = $oldBase + ($seqFileNum - $seqFileBase);
3859
3879
  }
3860
3880
 
3861
3881
  #------------------------------------------------------------------------------
@@ -4151,16 +4171,15 @@ sub NextUnusedFilename($;$)
4151
4171
  return $fmt unless $fmt =~ /%[-+]?\d*\.?\d*[lun]?[cC]/;
4152
4172
  my %sep = ( '-' => '-', '+' => '_' );
4153
4173
  my ($copy, $alpha) = (0, 'a');
4154
- my $seq = $seqFileNum - 1;
4155
4174
  for (;;) {
4156
4175
  my ($filename, $pos) = ('', 0);
4157
4176
  while ($fmt =~ /(%([-+]?)(\d*)(\.?)(\d*)([lun]?)([cC]))/g) {
4158
4177
  $filename .= substr($fmt, $pos, pos($fmt) - $pos - length($1));
4159
4178
  $pos = pos($fmt);
4160
4179
  my ($sign, $wid, $dec, $wid2, $mod, $tok) = ($2, $3 || 0, $4, $5 || 0, $6, $7);
4161
- my $diff;
4180
+ my $seq;
4162
4181
  if ($tok eq 'C') {
4163
- $diff = $wid - ($sign eq '-' ? $seqFileBase : 0);
4182
+ $seq = $wid + ($sign eq '-' ? $seqFileDir : $seqFileNum) - 1;
4164
4183
  $wid = $wid2;
4165
4184
  } else {
4166
4185
  next unless $dec or $copy;
@@ -4169,13 +4188,13 @@ sub NextUnusedFilename($;$)
4169
4188
  $filename .= $sep{$sign} if $sign;
4170
4189
  }
4171
4190
  if ($mod and $mod ne 'n') {
4172
- my $a = $tok eq 'C' ? Num2Alpha($diff + $seq) : $alpha;
4191
+ my $a = $tok eq 'C' ? Num2Alpha($seq) : $alpha;
4173
4192
  my $str = ($wid and $wid > length $a) ? 'a' x ($wid - length($a)) : '';
4174
4193
  $str .= $a;
4175
4194
  $str = uc $str if $mod eq 'u';
4176
4195
  $filename .= $str;
4177
4196
  } else {
4178
- my $c = $tok eq 'C' ? ($diff + $seq) : $copy;
4197
+ my $c = $tok eq 'C' ? $seq : $copy;
4179
4198
  my $num = $c + ($mod ? 1 : 0);
4180
4199
  $filename .= $wid ? sprintf("%.${wid}d",$num) : $num;
4181
4200
  }
@@ -4431,7 +4450,7 @@ sub ReadStayOpen($)
4431
4450
 
4432
4451
  #------------------------------------------------------------------------------
4433
4452
  # Add new entry to -efile output file
4434
- # Inputs: 0) file name, 1) -efile option number (0=error, 1=same, 2=failed)
4453
+ # Inputs: 0) file name, 1) -efile option number (0=error, 1=same, 2=failed, 3=updated, 4=created)
4435
4454
  sub EFile($$)
4436
4455
  {
4437
4456
  my $entry = shift;
@@ -4746,6 +4765,7 @@ L<Advanced options|/Advanced options>
4746
4765
  -echo[NUM] TEXT Echo text to stdout or stderr
4747
4766
  -efile[NUM][!] ERRFILE Save names of files with errors
4748
4767
  -execute[NUM] Execute multiple commands on one line
4768
+ -fileNUM ALTFILE Load tags from alternate file
4749
4769
  -list_dir List directories, not their contents
4750
4770
  -srcfile FMT Process a different source file
4751
4771
  -stay_open FLAG Keep reading -@ argfile even after EOF
@@ -5018,16 +5038,14 @@ for list-type tags and conditional replacements because each copy operation
5018
5038
  on a tag overrides any previous operations. While this avoids duplicate
5019
5039
  list items when copying groups of tags from a file containing redundant
5020
5040
  information, it also prevents values of different tags from being copied
5021
- into the same list when this is the intent. So a B<-addTagsFromFile> option
5022
- is provided which allows copying of multiple tags into the same list. eg)
5041
+ into the same list when this is the intent. To accumulate values
5042
+ from different operations into the same list, add a C<+> after the initial
5043
+ C<-> of the argument. For example:
5023
5044
 
5024
- exiftool -addtagsfromfile @ '-subject<make' '-subject<model' ...
5045
+ exiftool -tagsfromfile @ '-subject<make' '-+subject<model' ...
5025
5046
 
5026
- Similarly, B<-addTagsFromFile> must be used when conditionally replacing a
5027
- tag to prevent overriding earlier conditions.
5028
-
5029
- Other than these differences, the B<-tagsFromFile> and B<-addTagsFromFile>
5030
- options are equivalent.
5047
+ Similarly, C<-+DSTTAG> must be used when conditionally replacing a tag to
5048
+ prevent overriding earlier conditions.
5031
5049
 
5032
5050
  6) The B<-a> option (allow duplicate tags) is always in effect when copying
5033
5051
  tags from I<SRCFILE>, but the highest priority tag is always copied last so
@@ -5294,12 +5312,12 @@ escaped. The inverse conversion is applied when writing tags.
5294
5312
 
5295
5313
  =item B<-f> (B<-forcePrint>)
5296
5314
 
5297
- Force printing of tags even if their values are not found. This option only
5298
- applies when specific tags are requested on the command line (ie. not with
5299
- wildcards or by C<-all>). With this option, a dash (C<->) is printed for
5300
- the value of any missing tag, but the dash may be changed via the API
5301
- MissingTagValue option. May also be used to add a 'flags' attribute to the
5302
- B<-listx> output, or to allow tags to be deleted when writing with the
5315
+ Force printing of tags even if they don't exist. This option applies to
5316
+ tags specified on the command line, or with the B<-p>, B<-if> or
5317
+ B<-tagsFromFile> options. When B<-f> is used, the value of any missing tag
5318
+ is set to a dash (C<->) by default, but this may be configured via the API
5319
+ MissingTagValue option. B<-f> is also used to add a 'flags' attribute to
5320
+ the B<-listx> output, or to allow tags to be deleted when writing with the
5303
5321
  B<-csv>=I<CSVFILE> feature.
5304
5322
 
5305
5323
  =item B<-g>[I<NUM>][:I<NUM>...] (B<-groupHeadings>)
@@ -5307,15 +5325,15 @@ B<-csv>=I<CSVFILE> feature.
5307
5325
  Organize output by tag group. I<NUM> specifies a group family number, and
5308
5326
  may be 0 (general location), 1 (specific location), 2 (category), 3
5309
5327
  (document number), 4 (instance number), 5 (metadata path), 6 (EXIF/TIFF
5310
- format) or 7 (tag ID). B<-g0> is assumed if a family number is not
5311
- specified. May be combined with other options to add group names to the
5312
- output. Multiple families may be specified by separating them with colons.
5313
- By default the resulting group name is simplified by removing any leading
5314
- C<Main:> and collapsing adjacent identical group names, but this can be
5315
- avoided by placing a colon before the first family number (eg. B<-g:3:1>).
5316
- Use the B<-listg> option to list group names for a specified family. The
5317
- API SavePath and SaveFormat options are automatically enabled if the
5318
- respective family 5 or 6 group names are requested. See the
5328
+ format), 7 (tag ID) or 8 (file number). B<-g0> is assumed if a family
5329
+ number is not specified. May be combined with other options to add group
5330
+ names to the output. Multiple families may be specified by separating them
5331
+ with colons. By default the resulting group name is simplified by removing
5332
+ any leading C<Main:> and collapsing adjacent identical group names, but this
5333
+ can be avoided by placing a colon before the first family number (eg.
5334
+ B<-g:3:1>). Use the B<-listg> option to list group names for a specified
5335
+ family. The API SavePath and SaveFormat options are automatically enabled
5336
+ if the respective family 5 or 6 group names are requested. See the
5319
5337
  L<API GetGroup documentation|Image::ExifTool/GetGroup> for more information.
5320
5338
 
5321
5339
  =item B<-G>[I<NUM>][:I<NUM>...] (B<-groupNames>)
@@ -5523,7 +5541,7 @@ with this command:
5523
5541
 
5524
5542
  produces output like this:
5525
5543
 
5526
- -- Generated by ExifTool 12.58 --
5544
+ -- Generated by ExifTool 12.60 --
5527
5545
  File: a.jpg - 2003:10:31 15:44:19
5528
5546
  (f/5.6, 1/60s, ISO 100)
5529
5547
  File: b.jpg - 2006:05:23 11:57:38
@@ -6414,12 +6432,12 @@ I<SHIFT> string. For example:
6414
6432
 
6415
6433
  Add features from specified plug-in I<MODULE>. Currently, the MWG module is
6416
6434
  the only plug-in module distributed with exiftool. This module adds
6417
- read/write support for tags as recommended by the Metadata Working Group.
6418
- As a convenience, C<-use MWG> is assumed if the C<MWG> group is specified
6419
- for any tag on the command line. See the L<MWG Tags
6420
- documentation|Image::ExifTool::TagNames/MWG Tags> for more details. Note
6421
- that this option is not reversible, and remains in effect until the
6422
- application terminates, even across the B<-execute> option.
6435
+ read/write support for tags as recommended by the Metadata Working Group. As
6436
+ a convenience, C<-use MWG> is assumed if the group name prefix starts with
6437
+ C<MWG:> exactly for any requested tag. See the
6438
+ L<MWG Tags documentation|Image::ExifTool::TagNames/MWG Tags> for more
6439
+ details. Note that this option is not reversible, and remains in effect
6440
+ until the application terminates, even across the B<-execute> option.
6423
6441
 
6424
6442
  =back
6425
6443
 
@@ -6505,10 +6523,11 @@ exit status of the command (see L</EXIT STATUS>).
6505
6523
 
6506
6524
  Save the names of files giving errors (I<NUM> missing or 1), files that were
6507
6525
  unchanged (I<NUM> is 2), files that fail the B<-if> condition (I<NUM> is 4),
6508
- or any combination thereof by summing I<NUM> (eg. B<-efile3> is the same
6509
- has having both B<-efile> and B<-efile2> options with the same I<ERRFILE>).
6510
- By default, file names are appended to any existing I<ERRFILE>, but
6511
- I<ERRFILE> is overwritten if an exclamation point is added to the option
6526
+ files that were updated (I<NUM> is 8), files that were created (I<NUM> is
6527
+ 16), or any combination thereof by summing I<NUM> (eg. B<-efile3> is the
6528
+ same has having both B<-efile> and B<-efile2> options with the same
6529
+ I<ERRFILE>). By default, file names are appended to any existing I<ERRFILE>,
6530
+ but I<ERRFILE> is overwritten if an exclamation point is added to the option
6512
6531
  (eg. B<-efile!>). Saves the name of the file specified by the B<-srcfile>
6513
6532
  option if applicable.
6514
6533
 
@@ -6523,6 +6542,14 @@ line. I<NUM> is an optional number that is echoed in the "{ready}" message
6523
6542
  when using the B<-stay_open> feature. If a I<NUM> is specified, the B<-q>
6524
6543
  option no longer suppresses the output "{readyNUM}" message.
6525
6544
 
6545
+ =item B<-file>I<NUM> I<ALTFILE>
6546
+
6547
+ Read tags from an alternate source file. These tags are accessed via the
6548
+ 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.
6552
+
6526
6553
  =item B<-list_dir>
6527
6554
 
6528
6555
  List directories themselves instead of their contents. This option
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
21
21
  use Image::ExifTool::Exif;
22
22
  use Image::ExifTool::Canon;
23
23
 
24
- $VERSION = '1.59';
24
+ $VERSION = '1.60';
25
25
 
26
26
  sub WriteCRW($$);
27
27
  sub ProcessCanonRaw($$$);
@@ -698,6 +698,10 @@ sub ProcessCanonRaw($$$)
698
698
  $format ne 'string' and not $subdir;
699
699
  } else {
700
700
  $valueDataPos = $ptr;
701
+ # do MD5 of image data if requested
702
+ if ($$et{ImageDataMD5} and $tagID == 0x2005) {
703
+ $raf->Seek($ptr, 0) and $et->ImageDataMD5($raf, $size, 'raw');
704
+ }
701
705
  if ($size <= 512 or ($verbose > 2 and $size <= 65536)
702
706
  or ($tagInfo and ($$tagInfo{SubDirectory}
703
707
  or grep(/^$$tagInfo{Name}$/i, $et->GetRequestedTags()) )))
@@ -16,7 +16,7 @@ use Image::ExifTool::Exif;
16
16
  use Image::ExifTool::XMP;
17
17
  use Image::ExifTool::GPS;
18
18
 
19
- $VERSION = '1.07';
19
+ $VERSION = '1.08';
20
20
 
21
21
  sub ProcessDJIInfo($$$);
22
22
 
@@ -104,7 +104,7 @@ my %convFloat2 = (
104
104
  0x00 => { Name => 'AmbientTemperature', Format => 'float', PrintConv => 'sprintf("%.1f C",$val)' }, # (NC)
105
105
  0x04 => { Name => 'ObjectDistance', Format => 'float', PrintConv => 'sprintf("%.1f m",$val)' },
106
106
  0x08 => { Name => 'Emissivity', Format => 'float', PrintConv => 'sprintf("%.2f",$val)' },
107
- 0x0c => { Name => 'RelativeHumidity', Format => 'float', PrintConv => 'sprintf("%g %",$val*100)' },
107
+ 0x0c => { Name => 'RelativeHumidity', Format => 'float', PrintConv => 'sprintf("%g %%",$val*100)' },
108
108
  0x10 => { Name => 'ReflectedTemperature',Format => 'float', PrintConv => 'sprintf("%.1f C",$val)' },
109
109
  0x65 => { Name => 'IDString', Format => 'string[16]' }, # (NC)
110
110
  );