Browse Source

Update to 10.41

pull/17/head 10.41
exiftool 6 years ago
parent
commit
30dd181c8d
  1. 17
      Changes
  2. 3
      MANIFEST
  3. 5
      README
  4. 84
      config_files/age.config
  5. 4
      config_files/convert_regions.config
  6. 53
      config_files/photoshop_paths.config
  7. 96
      exiftool
  8. 11
      html/ExifTool.html
  9. 4
      html/TagNames/EXIF.html
  10. 17
      html/TagNames/Extra.html
  11. 4
      html/TagNames/Pentax.html
  12. 3
      html/TagNames/Sony.html
  13. 2
      html/data_members.html
  14. 16
      html/exiftool_pod.html
  15. 20
      html/history.html
  16. 20
      html/index.html
  17. 22
      html/install.html
  18. 28
      lib/Image/ExifTool.pm
  19. 16
      lib/Image/ExifTool.pod
  20. 40
      lib/Image/ExifTool/BuildTagLookup.pm
  21. 34
      lib/Image/ExifTool/Exif.pm
  22. 4
      lib/Image/ExifTool/Geotag.pm
  23. 17
      lib/Image/ExifTool/IPTC.pm
  24. 28
      lib/Image/ExifTool/PDF.pm
  25. 3
      lib/Image/ExifTool/Pentax.pm
  26. 2
      lib/Image/ExifTool/README
  27. 8
      lib/Image/ExifTool/Sony.pm
  28. 1
      lib/Image/ExifTool/TagLookup.pm
  29. 3
      lib/Image/ExifTool/TagNames.pod
  30. 306
      lib/Image/ExifTool/Validate.pm
  31. 3
      lib/Image/ExifTool/Writer.pl
  32. 12
      lib/Image/ExifTool/XMP.pm
  33. 2
      perl-Image-ExifTool.spec
  34. 1
      pp_build_exe.args
  35. 2
      t/AFCP.t
  36. 2
      t/AIFF.t
  37. 2
      t/APE.t
  38. 2
      t/ASF.t
  39. 2
      t/Apple.t
  40. 2
      t/Audible.t
  41. 2
      t/BMP.t
  42. 2
      t/BPG.t
  43. 2
      t/BigTIFF.t
  44. 2
      t/Canon.t
  45. 132
      t/CanonRaw.t
  46. 2
      t/CanonVRD.t
  47. 2
      t/Casio.t
  48. 2
      t/DICOM.t
  49. 2
      t/DNG.t
  50. 2
      t/DPX.t
  51. 2
      t/DV.t
  52. 2
      t/DjVu.t
  53. 2
      t/EXE.t
  54. 29
      t/ExifTool.t
  55. 5
      t/ExifTool_31.out
  56. 2
      t/FLAC.t
  57. 2
      t/FLIF.t
  58. 2
      t/FLIR.t
  59. 2
      t/Flash.t
  60. 2
      t/FlashPix.t
  61. 2
      t/Font.t
  62. 2
      t/FotoStation.t
  63. 2
      t/FujiFilm.t
  64. 2
      t/GE.t
  65. 2
      t/GIF.t
  66. 2
      t/GIMP.t
  67. 22
      t/GPS.t
  68. 2
      t/GeoTiff.t
  69. 2
      t/Geotag.t
  70. 2
      t/HTML.t
  71. 2
      t/IPTC.t
  72. 2
      t/ISO.t
  73. 2
      t/ITC.t
  74. 2
      t/InDesign.t
  75. 2
      t/JVC.t
  76. 2
      t/Jpeg2000.t
  77. 2
      t/Kodak.t
  78. 2
      t/KyoceraRaw.t
  79. 2
      t/LNK.t
  80. 2
      t/Lang.t
  81. 2
      t/Lytro.t
  82. 2
      t/M2TS.t
  83. 2
      t/MIE.t
  84. 2
      t/MIFF.t
  85. 2
      t/MOI.t
  86. 2
      t/MP3.t
  87. 2
      t/MWG.t
  88. 2
      t/MXF.t
  89. 2
      t/Matroska.t
  90. 2
      t/Minolta.t
  91. 2
      t/Motorola.t
  92. 2
      t/Nikon.t
  93. 2
      t/Olympus.t
  94. 2
      t/OpenEXR.t
  95. 2
      t/Opus.t
  96. 2
      t/PDF.t
  97. 2
      t/PGF.t
  98. 2
      t/PICT.t
  99. 2
      t/PLIST.t
  100. 2
      t/PLUS.t
  101. 2
      t/PNG.t
  102. 2
      t/PPM.t
  103. 2
      t/PSP.t
  104. 2
      t/Palm.t
  105. 2
      t/Panasonic.t
  106. 2
      t/Pentax.t
  107. 2
      t/PhaseOne.t
  108. 2
      t/PhotoCD.t
  109. 2
      t/PhotoMechanic.t
  110. 2
      t/Photoshop.t
  111. 2
      t/PostScript.t
  112. 6
      t/QuickTime.t
  113. 2
      t/RIFF.t
  114. 2
      t/RTF.t
  115. 2
      t/Radiance.t
  116. 2
      t/Real.t
  117. 2
      t/Ricoh.t
  118. 2
      t/Sanyo.t
  119. 2
      t/Sigma.t
  120. 2
      t/Sony.t
  121. 2
      t/Torrent.t
  122. 2
      t/Unknown.t
  123. 2
      t/VCard.t
  124. 2
      t/Vorbis.t
  125. 2
      t/Writer.t
  126. 2
      t/XMP.t
  127. 2
      t/ZIP.t
  128. 101
      windows_exiftool

17
Changes

@ -7,6 +7,23 @@ RSS feed: http://owl.phy.queensu.ca/~phil/exiftool/rss.xml
Note: The most recent production release is Version 10.40. (Other versions are
considered development releases, and are not uploaded to CPAN.)
Feb. 1, 2017 - Version 10.41
- Added an experimental metadata validation feature (invoked either by
requesting the new Extra Validate tag or by setting the API Validate option)
- Added support for PSDT file extension
- Added age.config to the distribution
- Added a new Sony lens (thanks Jos Roost)
- Added a new PentaxModelID (thanks Louis Granboulan)
- Enhanced -p option to allow files to be grouped in sections
- Made makernote offset warning minor
- Relaxed parsing of NMEA GGA sentence so comma after the geoid units is now
optional
- Patched problem extracting value of an unsafe binary tag with the -b option
when specified using -TAG# instead of -TAG with -n
- API Changes:
- Added experimental Validate option
Jan. 14, 2017 - Version 10.40 (production release)
- Fixed tests that were failing on some platforms

3
MANIFEST

@ -15,6 +15,7 @@ arg_files/xmp2exif.args
arg_files/xmp2gps.args
arg_files/xmp2iptc.args
arg_files/xmp2pdf.args
config_files/age.config
config_files/bibble.config
config_files/convert_regions.config
config_files/example.config
@ -364,6 +365,7 @@ lib/Image/ExifTool/Theora.pm
lib/Image/ExifTool/Torrent.pm
lib/Image/ExifTool/Unknown.pm
lib/Image/ExifTool/VCard.pm
lib/Image/ExifTool/Validate.pm
lib/Image/ExifTool/Vorbis.pm
lib/Image/ExifTool/WriteCanonRaw.pl
lib/Image/ExifTool/WriteExif.pl
@ -470,6 +472,7 @@ t/ExifTool_28.out
t/ExifTool_29.out
t/ExifTool_3.out
t/ExifTool_30.out
t/ExifTool_31.out
t/ExifTool_4.out
t/ExifTool_5.out
t/ExifTool_6.out

5
README

@ -101,8 +101,8 @@ your home directory, then you would type the following commands in a
terminal window to extract and run ExifTool:
cd ~/Desktop
gzip -dc Image-ExifTool-10.40.tar.gz | tar -xf -
cd Image-ExifTool-10.40
gzip -dc Image-ExifTool-10.41.tar.gz | tar -xf -
cd Image-ExifTool-10.41
./exiftool t/images/ExifTool.jpg
Note: These commands extract meta information from one of the test images.
@ -185,6 +185,7 @@ distribution package:
xmp2iptc.args - Arguments for converting XMP to IPTC
xmp2pdf.args - Arguments for converting XMP to PDF
config_files/ - Sample ExifTool configuration files:
age.config - Calculate Age of person in photo
bibble.config - Definitions for writing Bibble XMP tags
convert_regions.config - Convert between MWG and MP face regions
example.config - General example showing config features

84
config_files/age.config

@ -0,0 +1,84 @@
#------------------------------------------------------------------------------
# File: age.config
#
# Description: Definition for a Composite "Age" tag to calculate age of person
# in image based on their birthday and the DateTimeOriginal or
# CreateDate of the image.
#
# Notes: The birthday date is set via the -userParam option, and is a
# string containing year, month, day, hour, minute and second.
# Only the year is required. By default the format of the
# returned Age value is exactly the same as the input birthday,
# with 2 digits for each parameter, however an AgeFormat user
# parameter may be used to define a printf-style format string
# for any desired output format (see fourth example below).
#
# If the specified birthday comes after the image date/time
# then the returned result is enclosed in brackets to indicate
# a negative time difference (see last example below).
#
# If birthday is not given, then the current date/time is assumed
# (in which case Age returns the age of the photo).
#
# Examples: (based on a DateTimeOriginal of "2005:08:27 18:21:00")
#
# > exiftool -config age.config -userparam birthday=1990:09:31 -age a.jpg
# Age : 14:10:26
#
# > exiftool -config age.config -userparam birthday=1990Y09M31D -age a.jpg
# Age : 14Y10M26D
#
# > exiftool -config age.config -userparam birthday="2000:01:02 03:45" -age a.jpg
# Age : 05:07:25 14:36
#
# > exiftool -config age.config -userparam birthday=2000:01:02 \
# -userparam ageformat="%d years" -age a.jpg
# Age : 5 years
#
# > exiftool -config age.config -userparam birthday=2005:09:26 -age a.jpg
# Age : (00:00:30)
#
# Requires: ExifTool version 9.90 or later
#
# Revisions: 2017/01/24 - P. Harvey Created
#------------------------------------------------------------------------------
%Image::ExifTool::UserDefined = (
'Image::ExifTool::Composite' => {
Age => {
Desire => {
0 => 'DateTimeOriginal',
1 => 'CreateDate',
},
ValueConv => q{
my $bday = $self->Options(UserParam => 'Birthday');
$bday or ($bday = TimeNow()) =~ s/[-+].*//;
my $date = $val[0] || $val[1] or return undef;
my @t0 = ($bday =~ /\d+/g);
my @t1 = ($date =~ /\d+/g);
return '<invalid birthday date>' unless $t0[0];
my ($i, @diff, $sign);
for ($i=0; $i<6; ++$i) {
last unless defined $t0[$i];
my $dt = $t1[$i] - $t0[$i];
$sign or $sign = ($dt <=> 0);
push @diff, $dt * $sign;
}
require 'Image/ExifTool/Shift.pl';
my $base = $sign < 0 ? \@t1 : \@t0;
my @wrap = (0, 12, DaysInMonth($$base[1]||1,$$base[0]), 24, 60, 60);
for ($i=$#diff; $i>0; --$i) {
$diff[$i] < 0 and $diff[$i] += $wrap[$i], --$diff[$i-1];
}
$bday =~ s/\d+/sprintf '%.2d', shift @diff/ge;
return $sign < 0 ? "($bday)" : $bday;
},
PrintConv => q{
my $fmt = $self->Options(UserParam => 'AgeFormat') or return $val;
sprintf($fmt, $val =~ /\d+/g);
},
},
},
);
1; #end

4
config_files/convert_regions.config

@ -5,11 +5,11 @@
# face regions between Microsoft Windows Live Photo Gallery (WLPG)
# and Metadata Working Group (MWG) formats
#
# Usage: 1) Convert from MP WLPG regions to MWG regions:
# Usage: 1) Convert from MP WLPG regions to MWG regions:
#
# exiftool -config convert_regions.config "-regioninfo<myregion" FILE
#
# 2) Convert from MWG to WLPG regions:
# 2) Convert from MWG to WLPG regions:
#
# exiftool -config convert_regions.config "-regioninfomp<myregionmp" FILE
#

53
config_files/photoshop_paths.config

@ -15,6 +15,13 @@
# because these tags are marked as "Protected" so they won't be
# copied by default.
#
# Path anchor points are converted to pixel coordinates by the
# Composite PathPixXXX tags, and an "AllPathPix" shortcut is
# provided to represent these tags.
#
# Finally, a Composite PathCount tag is provided to return the
# number of paths in an image.
#
# Note: Print conversion must be disabled to be able to copy these tags
# (via either the -n option, or by adding a "#" to the tag name,
# eg. "-tagsfromfile SRC -allpaths#").
@ -37,10 +44,15 @@
#
# exiftool -config photoshop_paths.config -tagsfromfile SRC -allpaths# DST
#
# 5) Extract path names and anchor points in pixel coordinates:
#
# exiftool -config photoshop_paths.config -allpathpix FILE
#
# Requires: ExifTool version 9.95 or later
#
# Revisions: 2015/05/07 - P. Harvey Created
# 2016/09/14 - PH Added feature to allow extracting anchor points
# 2017/01/24 - PH Added PathCount and PathPix Composite tags
#
# References: http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,1621.0.html
# http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,3910.0.html
@ -49,10 +61,11 @@
# Print Photoshop path name and/or anchor points
# Inputs: 0) reference to Photoshop path data, 1) ExifTool object reference
# 2-3) optional image width/height to convert anchor points to pixels
# Returns: String with name and/or Bezier knot anchor points
sub PrintPath($)
sub PrintPath($$;$$)
{
my ($val, $et) = @_;
my ($val, $et, $w, $h) = @_;
my ($pos, $name, @rtn);
my $len = length($$val) - 26;
@ -67,7 +80,7 @@ sub PrintPath($)
push @rtn, $name unless $anchorOnly;
# loop through path points and extract anchor points if specified
if ($anchorOnly or $et->Options(UserParam => 'Anchor')) {
if ($anchorOnly or $et->Options(UserParam => 'Anchor') or defined $w) {
SetByteOrder('MM');
for ($pos=0; $pos<=$len; $pos+=26) {
my $type = Get16u($val, $pos);
@ -77,7 +90,11 @@ sub PrintPath($)
# (fixed-point values with 24-bits after the decimal point)
my $y = Get32s($val, $pos+10) / 0x1000000; # (vertical component first)
my $x = Get32s($val, $pos+14) / 0x1000000;
push @rtn, sprintf('(%g,%g)', $x, $y);
if (defined $w and defined $h) {
push @rtn, sprintf('(%g,%g)', $x * $w, $y * $h);
} else {
push @rtn, sprintf('(%g,%g)', $x, $y);
}
}
}
return join ' ', @rtn;
@ -88,6 +105,9 @@ sub PrintPath($)
AllPaths => [
map { sprintf "Path%x", $_ } (0x7d0 .. 0xbb5),
],
AllPathPix => [
map { sprintf "PathPix%x", $_ } (0x7d0 .. 0xbb5),
],
);
%Image::ExifTool::UserDefined = (
@ -100,6 +120,31 @@ sub PrintPath($)
PrintConv => \&PrintPath,
} } (0x7d0 .. 0xbb5),
},
'Image::ExifTool::Composite' => {
PathCount => {
Desire => {
map { $_-0x7d0 => sprintf('Path%x', $_) } (0x7d0 .. 0xbb5),
},
ValueConv => sub {
my $val = shift;
my $count = 0;
defined $_ and ++$count foreach @$val;
return $count;
},
},
map { sprintf('PathPix%x', $_) => {
Require => {
0 => 'ImageWidth',
1 => 'ImageHeight',
2 => sprintf('Path%x', $_),
},
Description => sprintf('Path Pix %x', $_),
ValueConv => sub {
my ($val, $et) = @_;
PrintPath($$val[2], $et, $$val[0], $$val[1]);
},
} } (0x7d0 .. 0xbb5),
},
);
1; #end

96
exiftool

@ -12,7 +12,7 @@
use strict;
require 5.004;
my $version = '10.40';
my $version = '10.41';
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
my $exeDir;
@ -146,6 +146,7 @@ my $isWriting; # flag set if we are writing tags
my $joinLists; # flag set to join list values into a single string
my $json; # flag for JSON/PHP output format (1=JSON, 2=PHP)
my $langOpt; # language option
my $lastSection; # last section header for -p option
my $listItem; # item number for extracting single item from a list
my $listSep; # list item separator (', ' by default)
my $mt; # main ExifTool object
@ -165,6 +166,7 @@ my $recurse; # recurse into subdirectories (2=also hidden directories)
my $rtnVal; # command return value (0=success)
my $saveCount; # count the number of times we will/did call SaveNewValues()
my $scanWritable; # flag to process only writable file types
my $sectionTrailer; # trailer to print at end of section with -p option
my $seqFileNum; # sequential file number used for %C
my $showGroup; # number of group to show (may be zero or '')
my $showTagID; # non-zero to show tag ID's
@ -411,6 +413,7 @@ undef $fixLen;
undef $forcePrint;
undef $joinLists;
undef $langOpt;
undef $lastSection;
undef $listItem;
undef $multiFile;
undef $outOpt;
@ -420,6 +423,7 @@ undef $progressCount;
undef $progressMax;
undef $recurse;
undef $scanWritable;
undef $sectionTrailer;
undef $showGroup;
undef $showTagID;
undef $structOpt;
@ -1380,6 +1384,7 @@ if ($xml) {
}
$mt->Options(List => 1) unless $joinLists;
$mt->Options(Duplicates => 0) unless defined $showGroup;
$showTagID = 'D' if $tabFormat and not $showTagID;
} elsif ($structOpt) {
$mt->Options(List => 1);
} else {
@ -1671,7 +1676,8 @@ if ($filtered and not $validFile) {
# print CSV information if necessary
PrintCSV() if $csv and not $isWriting;
# print file trailer if necessary
# print folder/file trailer if necessary
print $sectionTrailer if $sectionTrailer;
print $fileTrailer if $fileTrailer and not $textOut and not $fileHeader;
if (defined $deleteOrig) {
@ -1955,7 +1961,7 @@ sub GetImageInfo($$)
if ($binaryOutput or not %$info) {
my $errs = $et->GetInfo('Warning', 'Error');
PrintErrors($et, $errs, $file) and $rtnVal = 1;
} elsif ($et->GetValue('Error')) {
} elsif ($et->GetValue('Error') or ($$et{Validate} and $et->GetValue('Warning'))) {
$rtnVal = 1;
}
@ -1973,7 +1979,7 @@ sub GetImageInfo($$)
undef $fileTrailer;
# repeat for each embedded document if necessary
my $lastDoc = $et->Options('ExtractEmbedded') ? $$et{DOC_COUNT} : 0;
foreach $type ('HEAD', 'BODY', 'TAIL') {
foreach $type (qw(HEAD SECT BODY ENDS TAIL)) {
my $prf = $printFmt{$type} or next;
for ($doc=0; $doc<=$lastDoc; ++$doc) {
if ($lastDoc) {
@ -1994,9 +2000,23 @@ sub GetImageInfo($$)
push @lines, $line if defined $line;
}
$lineCount += scalar @lines;
if ($type eq 'TAIL') {
if ($type eq 'SECT') {
my $sectionHeader = join '', @lines;
if ($lastSection and $lastSection ne $sectionHeader) {
print $sectionTrailer if $sectionTrailer;
undef $lastSection;
}
undef $sectionTrailer;
unless ($lastSection) {
print $fp $sectionHeader;
$lastSection = $sectionHeader;
}
} elsif ($type eq 'TAIL') {
$fileTrailer = '' unless defined $fileTrailer;
$fileTrailer .= join '', @lines;
} elsif ($type eq 'ENDS') {
$sectionTrailer = '' unless defined $sectionTrailer;
$sectionTrailer .= join '', @lines if defined $lastSection;
} elsif (@lines) {
print $fp @lines;
}
@ -2068,9 +2088,12 @@ TAG: foreach $tag (@foundTags) {
# make sure this tag has a value
my $val = $$info{$tag};
if (ref $val) {
if (defined $binaryOutput and not $binaryOutput) { # happens with -X -b or -php -b
# happens with -X, -j or -php when combined with -b:
if (defined $binaryOutput and not $binaryOutput and $$et{TAG_INFO}{$tag}{Protected}) {
# avoid extracting Protected binary tags (eg. data blocks) [insider information]
next if $$et{TAG_INFO}{$tag}{Protected} and not $$et{REQ_TAG_LOOKUP}{lc $tag};
my $lcTag = lc $tag;
$lcTag =~ s/ .*//;
next unless $$et{REQ_TAG_LOOKUP}{$lcTag};
}
$val = ConvertBinary($val); # convert SCALAR references
if ($structOpt) {
@ -2297,6 +2320,11 @@ TAG: foreach $tag (@foundTags) {
$id = sprintf('0x%.4x', $id) if $showTagID eq 'H' and $id =~ /^\d+$/;
$$val{id} = $id;
}
if ($tabFormat) {
$$val{table} = $et->GetTableName($tag);
my $index = $et->GetTagIndex($tag);
$$val{index} = $index if defined $index;
}
if ($outFormat < 0) {
$$val{desc} = $desc;
if ($printConv) {
@ -3522,7 +3550,7 @@ sub AddPrintFormat($)
my $expr = shift;
my $type;
if ($expr =~ /^#/) {
$expr =~ s/^#\[(HEAD|BODY|TAIL)\]// or return; # ignore comments
$expr =~ s/^#\[(HEAD|SECT|BODY|ENDS|TAIL)\]// or return; # ignore comments
$type = $1;
} else {
$type = 'BODY';
@ -4747,8 +4775,9 @@ the B<-D> or B<-H> option changes tag values to JSON objects with "val" and
"id" fields, and adding B<-l> adds a "desc" field, and a "num" field if the
numerical value is different from the converted "val". The B<-b> option may
be added to output binary data, encoded in base64 if necessary (indicated by
"base64:" as the first 7 bytes of the value). The JSON output is UTF-8
regardless of any B<-L> or B<-charset> option setting, but the UTF-8
"base64:" as the first 7 bytes of the value), and B<-t> may be added to
include tag table information (see B<-t> for details). The JSON output is
UTF-8 regardless of any B<-L> or B<-charset> option setting, but the UTF-8
validation is disabled if a character set other than UTF-8 is specified.
If I<JSONFILE> is specified, the file is imported and the tag definitions
@ -4847,10 +4876,13 @@ Case is not significant. Braces C<{}> may be used around the tag name to
separate it from subsequent text. Use C<$$> to represent a C<$> symbol, and
C<$/> for a newline. Multiple B<-p> options may be used, each contributing
a line of text to the output. Lines beginning with C<#[HEAD]> and
C<#[TAIL]> are output only for the first and last processed files
respectively. Lines beginning with C<#[BODY]> and lines not beginning with
C<#> are output for each processed file. Other lines beginning with C<#>
are ignored. For example, this format file:
C<#[TAIL]> are output before the first processed file and after the last
processed file respectively. Lines beginning with C<#[BODY]> and lines not
beginning with C<#> are output for each processed file. Lines beginning
with C<#[SECT]> and C<#[ENDS]> are output around each section of files. A
section is defined as a group of files with the same section header (eg.
files are grouped by directory if C<#[SECT]> contains C<$directory>). Other
lines beginning with C<#> are ignored. For example, this format file:
# this is a comment line
#[HEAD]-- Generated by ExifTool $exifToolVersion --
@ -4864,7 +4896,7 @@ with this command:
produces output like this:
-- Generated by ExifTool 10.40 --
-- Generated by ExifTool 10.41 --
File: a.jpg - 2003:10:31 15:44:19
(f/5.6, 1/60s, ISO 100)
File: b.jpg - 2006:05:23 11:57:38
@ -4903,8 +4935,9 @@ file names, so this feature is useful if tag values are used in file names.)
Format output as a PHP Array. The B<-g>, B<-G>, B<-D>, B<-H>, B<-l>,
B<-sep> and B<-struct> options combine with B<-php>, and duplicate tags are
handled in the same way as with the B<-json> option. As well, the B<-b>
option may be added to output binary data. Here is a simple example showing
how this could be used in a PHP script:
option may be added to output binary data, and B<-t> may be added to include
tag table information (see B<-t> for details). Here is a simple example
showing how this could be used in a PHP script:
<?php
eval('$array=' . `exiftool -php -q image.jpg`);
@ -4968,8 +5001,9 @@ may always be used when writing.
Output a tab-delimited list of description/values (useful for database
import). May be combined with B<-s> to print tag names instead of
descriptions, or B<-S> to print tag values only, tab-delimited on a single
line. The B<-t> option may also be used to add tag table information to the
B<-X> option output.
line. The B<-t> option may be combined with B<-j>, B<-php> or B<-X> to add
tag table information (table C<name>, decimal tag C<id>, and C<index> for
cases where multiple conditional tags exist with the same ID).
=item B<-T> (B<-table>)
@ -5163,9 +5197,8 @@ B<-s> or B<-sep> is used. Using B<-L> changes the XML encoding from "UTF-8"
to "windows-1252". Other B<-charset> settings change the encoding only if
there is a corresponding standard XML character set. The B<-b> option
causes binary data values to be written, encoded in base64 if necessary.
The B<-t> option adds tag table information to the output (table C<name>,
decimal tag C<id>, and C<index> for cases where multiple conditional tags
exist with the same ID).
The B<-t> option adds tag table information to the output (see B<-t> for
details).
Note: This output is NOT the same as XMP because it uses
dynamically-generated property names corresponding to the ExifTool tag
@ -5721,11 +5754,12 @@ options on the command line.
Load specified configuration file instead of the default ".ExifTool_config".
If used, this option must come before all other arguments on the command
line. The I<CFGFILE> name may contain a directory specification (otherwise
the file must exist in the current directory), or may be set to an empty
string ("") to disable loading of the config file. See the sample
configuration file and "config.html" in the full ExifTool distribution for
more information about the ExifTool configuration file.
line and applies to all B<-execute>'d commands. The I<CFGFILE> name may
contain a directory specification (otherwise the file must exist in the
current directory), or may be set to an empty string ("") to disable loading
of the config file. See the sample configuration file and "config.html" in
the full ExifTool distribution for more information about the ExifTool
configuration file.
=item B<-echo>[I<NUM>] I<TEXT>
@ -5739,10 +5773,10 @@ respectively) after processing is complete.
Execute command for all arguments up to this point on the command line (plus
any arguments specified by B<-common_args>). The result is as if the
commands were executed as separate command lines (with the exception of the
B<-use> option which remains in effect for subsequent commands). Allows
multiple commands to be executed from a single command line. I<NUM> is an
optional number that is echoed in the "{ready}" message when using the
B<-stay_open> feature.
B<-config> and B<-use> options which remain in effect for subsequent
commands). Allows multiple commands to be executed from a single command
line. I<NUM> is an optional number that is echoed in the "{ready}" message
when using the B<-stay_open> feature.
=item B<-srcfile> I<FMT>

11
html/ExifTool.html

@ -797,6 +797,10 @@ distribution for examples.</p>
<tr><td valign=top><b>undef</b></td><td valign=top>-</td><td>Clear UserParam hash</td></tr>
</table>
</td><td align=center>{ }</td></tr>
<tr><td>Validate</td><td><a name="Validate"></a>[Experimental] Flag to perform extra validation
when reading. Causes a minor warning to be issued for tags not defined in the EXIF, TIFF,
DNG or DCF specification.</td>
<td align=center>0 or 1</td><td align=center>undef</td></tr>
<tr><td>Verbose</td><td>Print verbose messages to file specified by TextOut option.
<a href="verbose.html">Click here</a> for example outputs.</td>
<td><a name="Verbose"></a><table class=clear>
@ -1219,9 +1223,10 @@ errors are printed to STDERR.
<tr><td>EditOnly</td><td>Edit tag only if it already exists. Don't create new tag.
Effectively removes the 'c' from the ExifTool WriteMode option for this tag only.</td>
<td align=center>0 or 1</td><td align=center>0</td></tr>
<tr><td>Group</td><td>Specifies group name where tag should be written.
If not specified, tag is written to highest priority group as specified
by <a href="#SetNewGroups">SetNewGroups</a>. Case is not significant</td>
<tr><td>Group</td><td>Specifies group name where tag should be written. This
option is superseded by any group specified in the tag name. If not
specified, tag is written to highest priority group as specified by
<a href="#SetNewGroups">SetNewGroups</a>. Case is not significant</td>
<td align=center>One or more family 0, 1 or 2 groups with optional leading
family number, separated by colons</td><td align=center>undef</td></tr>
<tr><td>NoFlat</td><td>Treat flattened tags as 'unsafe'</td><td align=center>0 or 1</td><td align=center>0</td></tr>

4
html/TagNames/EXIF.html

@ -2925,7 +2925,7 @@ one; 2. Pixel width of segments except last; 3. Pixel width of last segment)</sp
<tr>
<td title='0xc68e = 50830'>0xc68e</td>
<td>MaskedAreas</td>
<td class=c title=' ! = Unsafe'>int32u[4]!</td>
<td class=c title=' ! = Unsafe'>int32u[n]!</td>
<td class=c>SubIFD</td>
<td>&nbsp;</td></tr>
<tr class=b>
@ -3478,7 +3478,7 @@ these unless they already exist in the file)</span></span></td></tr>
<hr>
(This document generated automatically by Image::ExifTool::BuildTagLookup)
<br><i>Last revised Jan 5, 2017</i>
<br><i>Last revised Jan 20, 2017</i>
<p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p>
</body>
</html>

17
html/TagNames/Extra.html

@ -437,6 +437,15 @@ the command line)</span></span></td></tr>
file renaming feature. Writing this tag prints the old and new file names
to the console, but does not affect the file itself)</span></span></td></tr>
<tr class=b>
<td>Validate</td>
<td class=c>N</td>
<td class=c>ExifTool</td>
<td><span class=s><span class=n>([experimental] generated only if specifically requested. Requesting this
tag automatically enables the API Validate option, imposing additional
validation checks when extracting metadata. Returns the number of errors,
warnings and minor warnings encountered)</span>
<br>&#39;0 0 0&#39; = OK</span></td></tr>
<tr>
<td>Warning</td>
<td class=c>N</td>
<td class=c>ExifTool</td>
@ -445,18 +454,18 @@ Use the -a or Duplicates option to see all warnings if more than one
occurred. Minor warnings may be ignored with the -m or IgnoreMinorErrors
option. Minor warnings with a capital &quot;M&quot; in the &quot;[Minor]&quot; designation
indicate that the processing is affected by ignoring the warning)</span></span></td></tr>
<tr>
<tr class=b>
<td>XMP</td>
<td class=c title=' ! = Unsafe'>Y!</td>
<td class=c>XMP</td>
<td><span class=s><span class=n>(the XMP data block, but note that extended XMP in JPEG images may be split
into multiple blocks)</span></span></td></tr>
<tr class=b>
<tr>
<td>XResolution</td>
<td class=c>N</td>
<td class=c>File</td>
<td><span class=s><span class=n>(the horizontal pixel resolution)</span></span></td></tr>
<tr>
<tr class=b>
<td>YResolution</td>
<td class=c>N</td>
<td class=c>File</td>
@ -465,7 +474,7 @@ into multiple blocks)</span></span></td></tr>
<hr>
(This document generated automatically by Image::ExifTool::BuildTagLookup)
<br><i>Last revised Jan 5, 2017</i>
<br><i>Last revised Jan 30, 2017</i>
<p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p>
</body>
</html>

4
html/TagNames/Pentax.html

@ -1684,7 +1684,7 @@ are left, top, width and height in a 720x480 frame, with Y downwards)</span></sp
<td class=r>0x13222</td><td>= K-70</td>
</tr><tr><td class=r>0x12bf6</td><td>= Optio M10</td>
<td class='r b'>0x12e12</td><td class=b>= Optio E80</td>
<td class=r>&nbsp;</td><td>&nbsp;</td>
<td class=r>0x1322c</td><td>= KP</td>
</tr><tr><td class=r>0x12c1e</td><td>= K10D</td>
<td class='r b'>0x12e30</td><td class=b>= Optio W90</td>
<td class=r>&nbsp;</td><td>&nbsp;</td>
@ -4803,7 +4803,7 @@ stored as ASCII text in a format very similar to some HP models.</p>
<hr>
(This document generated automatically by Image::ExifTool::BuildTagLookup)
<br><i>Last revised Sep 26, 2016</i>
<br><i>Last revised Jan 30, 2017</i>
<p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p>
</body>
</html>

3
html/TagNames/Sony.html

@ -4693,6 +4693,7 @@ multi-frame noise reduction)</span></span></td></tr>
</tr><tr><td>50492</td><td>= Sigma 24-105mm F4 DG OS HSM | A 013 + MC-11</td>
</tr><tr><td>50493</td><td>= Sigma 17-70mm F2.8-4 DC MACRO OS HSM | C 013 + MC-11</td>
</tr><tr><td>50495</td><td>= Sigma 50-100mm F1.8 DC HSM | A 016 + MC-11</td>
</tr><tr><td>50992</td><td>= Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III</td>
</tr><tr><td>50993</td><td>= Voigtlander HELIAR-HYPER WIDE 10mm F5.6</td>
</tr><tr><td>50994</td><td>= Voigtlander ULTRA WIDE-HELIAR 12mm F5.6 III</td>
</tr><tr><td>51505</td><td>= Samyang AF 14mm F2.8 FE</td>
@ -10299,7 +10300,7 @@ the JPEG image from a PMP file)</span></span></td></tr>
<hr>
(This document generated automatically by Image::ExifTool::BuildTagLookup)
<br><i>Last revised Jan 13, 2017</i>
<br><i>Last revised Jan 30, 2017</i>
<p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p>
</body>
</html>

2
html/data_members.html

@ -261,6 +261,8 @@ information may include:
<tr><td>TIFF_TYPE</td><td>Type of TIFF data, only set if FILE_TYPE is TIFF. Valid values
are APP1, APP3, TIFF, CR2, MRW, JP2, JPX, NEF, PEF, ORF, DNG, etc.</td></tr>
<tr><td>Validate</td><td>Flag to do extra validation checks</td></tr>
<tr><td>VALUE</td><td>Hash of raw tag values keyed by tag key</td></tr>
<tr><td>WARNED_ONCE</td><td>Hash of warning messages that have been issued once already</td></tr>

16
html/exiftool_pod.html

@ -549,7 +549,7 @@
<dt id="j-JSONFILE--json"><b>-j</b>[=<i>JSONFILE</i>] (<b>-json</b>)</dt>
<dd>
<p>Use JSON (JavaScript Object Notation) formatting for console output, or import JSON file if <i>JSONFILE</i> is specified. This option may be combined with <b>-g</b> to organize the output into objects by group, or <b>-G</b> to add group names to each tag. List-type tags with multiple items are output as JSON arrays unless <b>-sep</b> is used. By default XMP structures are flattened into individual tags in the JSON output, but the original structure may be preserved with the <b>-struct</b> option (this also causes all list-type XMP tags to be output as JSON arrays, otherwise single-item lists are output as simple strings). The <b>-a</b> option is implied if the <b>-g</b> or <b>-G</b> options are used, otherwise it is ignored and duplicate tags are suppressed. Adding the <b>-D</b> or <b>-H</b> option changes tag values to JSON objects with &quot;val&quot; and &quot;id&quot; fields, and adding <b>-l</b> adds a &quot;desc&quot; field, and a &quot;num&quot; field if the numerical value is different from the converted &quot;val&quot;. The <b>-b</b> option may be added to output binary data, encoded in base64 if necessary (indicated by &quot;base64:&quot; as the first 7 bytes of the value). The JSON output is UTF-8 regardless of any <b>-L</b> or <b>-charset</b> option setting, but the UTF-8 validation is disabled if a character set other than UTF-8 is specified.</p>
<p>Use JSON (JavaScript Object Notation) formatting for console output, or import JSON file if <i>JSONFILE</i> is specified. This option may be combined with <b>-g</b> to organize the output into objects by group, or <b>-G</b> to add group names to each tag. List-type tags with multiple items are output as JSON arrays unless <b>-sep</b> is used. By default XMP structures are flattened into individual tags in the JSON output, but the original structure may be preserved with the <b>-struct</b> option (this also causes all list-type XMP tags to be output as JSON arrays, otherwise single-item lists are output as simple strings). The <b>-a</b> option is implied if the <b>-g</b> or <b>-G</b> options are used, otherwise it is ignored and duplicate tags are suppressed. Adding the <b>-D</b> or <b>-H</b> option changes tag values to JSON objects with &quot;val&quot; and &quot;id&quot; fields, and adding <b>-l</b> adds a &quot;desc&quot; field, and a &quot;num&quot; field if the numerical value is different from the converted &quot;val&quot;. The <b>-b</b> option may be added to output binary data, encoded in base64 if necessary (indicated by &quot;base64:&quot; as the first 7 bytes of the value), and <b>-t</b> may be added to include tag table information (see <b>-t</b> for details). The JSON output is UTF-8 regardless of any <b>-L</b> or <b>-charset</b> option setting, but the UTF-8 validation is disabled if a character set other than UTF-8 is specified.</p>
<p>If <i>JSONFILE</i> is specified, the file is imported and the tag definitions from the file are used to set tag values on a per-file basis. The special &quot;SourceFile&quot; entry in each JSON object associates the information with a specific target file. An object with a missing SourceFile or a SourceFile of &quot;*&quot; defines default tags for all target files. The imported JSON file must have the same format as the exported JSON files with the exception that the <b>-g</b> option is not compatible with the import file format (use <b>-G</b> instead). Additionally, tag names in the input JSON file may be suffixed with a <code>#</code> to disable print conversion.</p>
@ -612,7 +612,7 @@
<dt id="p-FMTFILE-or-STR--printFormat"><b>-p</b> <i>FMTFILE</i> or <i>STR</i> (<b>-printFormat</b>)</dt>
<dd>
<p>Print output in the format specified by the given file or string (and ignore other format options). Tag names in the format file or string begin with a <code>$</code> symbol and may contain a leading group names and/or a trailing <code>#</code>. Case is not significant. Braces <code>{}</code> may be used around the tag name to separate it from subsequent text. Use <code>$$</code> to represent a <code>$</code> symbol, and <code>$/</code> for a newline. Multiple <b>-p</b> options may be used, each contributing a line of text to the output. Lines beginning with <code>#[HEAD]</code> and <code>#[TAIL]</code> are output only for the first and last processed files respectively. Lines beginning with <code>#[BODY]</code> and lines not beginning with <code>#</code> are output for each processed file. Other lines beginning with <code>#</code> are ignored. For example, this format file:</p>
<p>Print output in the format specified by the given file or string (and ignore other format options). Tag names in the format file or string begin with a <code>$</code> symbol and may contain a leading group names and/or a trailing <code>#</code>. Case is not significant. Braces <code>{}</code> may be used around the tag name to separate it from subsequent text. Use <code>$$</code> to represent a <code>$</code> symbol, and <code>$/</code> for a newline. Multiple <b>-p</b> options may be used, each contributing a line of text to the output. Lines beginning with <code>#[HEAD]</code> and <code>#[TAIL]</code> are output before the first processed file and after the last processed file respectively. Lines beginning with <code>#[BODY]</code> and lines not beginning with <code>#</code> are output for each processed file. Lines beginning with <code>#[SECT]</code> and <code>#[ENDS]</code> are output around each section of files. A section is defined as a group of files with the same section header (eg. files are grouped by directory if <code>#[SECT]</code> contains <code>$directory</code>). Other lines beginning with <code>#</code> are ignored. For example, this format file:</p>
<pre><code> # this is a comment line
#[HEAD]-- Generated by ExifTool $exifToolVersion --
@ -626,7 +626,7 @@
<p>produces output like this:</p>
<pre><code> -- Generated by ExifTool 10.40 --
<pre><code> -- Generated by ExifTool 10.41 --
File: a.jpg - 2003:10:31 15:44:19
(f/5.6, 1/60s, ISO 100)
File: b.jpg - 2006:05:23 11:57:38
@ -647,7 +647,7 @@
<dt id="php"><b>-php</b></dt>
<dd>
<p>Format output as a PHP Array. The <b>-g</b>, <b>-G</b>, <b>-D</b>, <b>-H</b>, <b>-l</b>, <b>-sep</b> and <b>-struct</b> options combine with <b>-php</b>, and duplicate tags are handled in the same way as with the <b>-json</b> option. As well, the <b>-b</b> option may be added to output binary data. Here is a simple example showing how this could be used in a PHP script:</p>
<p>Format output as a PHP Array. The <b>-g</b>, <b>-G</b>, <b>-D</b>, <b>-H</b>, <b>-l</b>, <b>-sep</b> and <b>-struct</b> options combine with <b>-php</b>, and duplicate tags are handled in the same way as with the <b>-json</b> option. As well, the <b>-b</b> option may be added to output binary data, and <b>-t</b> may be added to include tag table information (see <b>-t</b> for details). Here is a simple example showing how this could be used in a PHP script:</p>
<pre><code> &lt;?php
eval(&#39;$array=&#39; . `exiftool -php -q image.jpg`);
@ -696,7 +696,7 @@
<dt id="t--tab"><b>-t</b> (<b>-tab</b>)</dt>
<dd>
<p>Output a tab-delimited list of description/values (useful for database import). May be combined with <b>-s</b> to print tag names instead of descriptions, or <b>-S</b> to print tag values only, tab-delimited on a single line. The <b>-t</b> option may also be used to add tag table information to the <b>-X</b> option output.</p>
<p>Output a tab-delimited list of description/values (useful for database import). May be combined with <b>-s</b> to print tag names instead of descriptions, or <b>-S</b> to print tag values only, tab-delimited on a single line. The <b>-t</b> option may be combined with <b>-j</b>, <b>-php</b> or <b>-X</b> to add tag table information (table <code>name</code>, decimal tag <code>id</code>, and <code>index</code> for cases where multiple conditional tags exist with the same ID).</p>
</dd>
<dt id="T--table"><b>-T</b> (<b>-table</b>)</dt>
@ -814,7 +814,7 @@
<p>Use ExifTool-specific RDF/XML formatting for console output. Implies the <b>-a</b> option, so duplicate tags are extracted. The formatting options <b>-b</b>, <b>-D</b>, <b>-H</b>, <b>-l</b>, <b>-s</b>, <b>-sep</b>, <b>-struct</b> and <b>-t</b> may be used in combination with <b>-X</b> to affect the output, but note that the tag ID (<b>-D</b>, <b>-H</b> and <b>-t</b>), binary data (<b>-b</b>) and structured output (<b>-struct</b>) options are not effective for the short output (<b>-s</b>). Another restriction of <b>-s</b> is that only one tag with a given group and name may appear in the output. Note that the tag ID options (<b>-D</b>, <b>-H</b> and <b>-t</b>) will produce non-standard RDF/XML unless the <b>-l</b> option is also used.</p>
<p>By default, <b>-X</b> outputs flattened tags, so <b>-struct</b> should be added if required to preserve XMP structures. List-type tags with multiple values are formatted as an RDF Bag, but they are combined into a single string when <b>-s</b> or <b>-sep</b> is used. Using <b>-L</b> changes the XML encoding from &quot;UTF-8&quot; to &quot;windows-1252&quot;. Other <b>-charset</b> settings change the encoding only if there is a corresponding standard XML character set. The <b>-b</b> option causes binary data values to be written, encoded in base64 if necessary. The <b>-t</b> option adds tag table information to the output (table <code>name</code>, decimal tag <code>id</code>, and <code>index</code> for cases where multiple conditional tags exist with the same ID).</p>
<p>By default, <b>-X</b> outputs flattened tags, so <b>-struct</b> should be added if required to preserve XMP structures. List-type tags with multiple values are formatted as an RDF Bag, but they are combined into a single string when <b>-s</b> or <b>-sep</b> is used. Using <b>-L</b> changes the XML encoding from &quot;UTF-8&quot; to &quot;windows-1252&quot;. Other <b>-charset</b> settings change the encoding only if there is a corresponding standard XML character set. The <b>-b</b> option causes binary data values to be written, encoded in base64 if necessary. The <b>-t</b> option adds tag table information to the output (see <b>-t</b> for details).</p>
<p>Note: This output is NOT the same as XMP because it uses dynamically-generated property names corresponding to the ExifTool tag names, and not the standard XMP properties. To write XMP instead, use the <b>-o</b> option with an XMP extension for the output file.</p>
@ -1172,7 +1172,7 @@
<dt id="config-CFGFILE"><b>-config</b> <i>CFGFILE</i></dt>
<dd>
<p>Load specified configuration file instead of the default &quot;.ExifTool_config&quot;. If used, this option must come before all other arguments on the command line. The <i>CFGFILE</i> name may contain a directory specification (otherwise the file must exist in the current directory), or may be set to an empty string (&quot;&quot;) to disable loading of the config file. See the sample configuration file and &quot;config.html&quot; in the full ExifTool distribution for more information about the ExifTool configuration file.</p>
<p>Load specified configuration file instead of the default &quot;.ExifTool_config&quot;. If used, this option must come before all other arguments on the command line and applies to all <b>-execute</b>&#39;d commands. The <i>CFGFILE</i> name may contain a directory specification (otherwise the file must exist in the current directory), or may be set to an empty string (&quot;&quot;) to disable loading of the config file. See the sample configuration file and &quot;config.html&quot; in the full ExifTool distribution for more information about the ExifTool configuration file.</p>
</dd>
<dt id="echo-NUM-TEXT"><b>-echo</b>[<i>NUM</i>] <i>TEXT</i></dt>
@ -1184,7 +1184,7 @@
<dt id="execute-NUM"><b>-execute</b>[<i>NUM</i>]</dt>
<dd>
<p>Execute command for all arguments up to this point on the command line (plus any arguments specified by <b>-common_args</b>). The result is as if the commands were executed as separate command lines (with the exception of the <b>-use</b> option which remains in effect for subsequent commands). Allows multiple commands to be executed from a single command line. <i>NUM</i> is an optional number that is echoed in the &quot;{ready}&quot; message when using the <b>-stay_open</b> feature.</p>
<p>Execute command for all arguments up to this point on the command line (plus any arguments specified by <b>-common_args</b>). The result is as if the commands were executed as separate command lines (with the exception of the <b>-config</b> and <b>-use</b> options which remain in effect for subsequent commands). Allows multiple commands to be executed from a single command line. <i>NUM</i> is an optional number that is echoed in the &quot;{ready}&quot; message when using the <b>-stay_open</b> feature.</p>
</dd>
<dt id="srcfile-FMT"><b>-srcfile</b> <i>FMT</i></dt>

20
html/history.html

@ -17,6 +17,26 @@ considered development releases, and are not uploaded to <a href="http://search.
<!-- Use line width of 80 -->
<!-- *********************************************************************** -->
<a name='v10.41'><b>Feb. 1, 2017 - Version 10.41</b></a>
<ul>
<li>Added an experimental metadata validation feature (invoked either by
requesting the new <a href="TagNames/Extra.html">Extra</a> Validate tag or by setting the API Validate option)
<li>Added support for PSDT file extension
<li>Added age.config to the distribution
<li>Added a new Sony lens (thanks Jos Roost)
<li>Added a new PentaxModelID (thanks Louis Granboulan)
<li>Enhanced -p option to allow files to be grouped in sections
<li>Made makernote offset warning minor
<li>Relaxed parsing of NMEA GGA sentence so comma after the geoid units is now
optional
<li>Patched problem extracting value of an unsafe binary tag with the -b option
when specified using -TAG# instead of -TAG with -n
<li>API Changes:
<ul>
<li>Added experimental Validate option
</ul>
</ul>
<a name='v10.40'><b>Jan. 14, 2017 - Version 10.40</b></a> <span class=grn>(production release)</span>
<ul>
<li>Fixed tests that were failing on some platforms

20
html/index.html

@ -74,9 +74,9 @@ span.sup { font-size: 0.8em; font-weight: normal; position: relative; top
</div>
<blockquote><table class='dl lg'><tr><td><b>
<a href="http://sourceforge.net/projects/exiftool/files/Image-ExifTool-10.40.tar.gz/download">
Download Version 10.40</a> (4.0 MB) -
<a href="history.html">Jan. 14, 2017</a></b></td></tr></table></blockquote>
<a href="http://sourceforge.net/projects/exiftool/files/Image-ExifTool-10.41.tar.gz/download">
Download Version 10.41</a> (4.0 MB) -
<a href="history.html">Feb. 1, 2017</a></b></td></tr></table></blockquote>
<p><b>ExifTool is a platform-independent <a href="ExifTool.html">Perl
library</a> plus a <a href="exiftool_pod.html">command-line application</a> for
@ -127,8 +127,8 @@ distribution above.)</i></p>
<blockquote><table class='dl lg'><tr><td><b>
<a name="alone">Windows Executable:</a>
<a href="http://sourceforge.net/projects/exiftool/files/exiftool-10.40.zip/download">
exiftool-10.40.zip</a> (5.8 MB)</b></td></tr></table></blockquote>
<a href="http://sourceforge.net/projects/exiftool/files/exiftool-10.41.zip/download">
exiftool-10.41.zip</a> (5.8 MB)</b></td></tr></table></blockquote>
<p><b>The stand-alone Windows executable</b> does not require Perl. Just
download and un-zip the archive then double-click on
@ -140,7 +140,7 @@ of Windows.</p>
<blockquote><table class='dl lg'><tr><td><b>
Mac OS X Package:
<a href="http://sourceforge.net/projects/exiftool/files/ExifTool-9.70.dmg/download">
ExifTool-10.40.dmg</a> (2.6 MB)</b></td></tr></table></blockquote>
ExifTool-10.41.dmg</a> (2.6 MB)</b></td></tr></table></blockquote>
<p><b>The OS X package</b> installs the ExifTool command-line application and
libraries in /usr/local/bin. After installing, type "<code>exiftool</code>" in
@ -384,7 +384,7 @@ for each file format.</p>
<tr><td><a href="TagNames/OOXML.html">POTX, POTM</a></td><td>R</td><td>Office Open XML Presentation Template [Macro-enabled]</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/OOXML.html">XML</a> <a href="TagNames/ZIP.html">ZIP</a></td></tr>
<tr><td><a href="TagNames/OOXML.html">PPSX, PPSM</a></td><td>R</td><td>Office Open XML Presentation Slideshow [Macro-enabled]</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/OOXML.html">XML</a> <a href="TagNames/ZIP.html">ZIP</a></td></tr>
<tr><td><a href="TagNames/OOXML.html">PPTX, PPTM</a></td><td>R</td><td>Office Open XML Presentation [Macro-enabled]</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/OOXML.html">XML</a> <a href="TagNames/ZIP.html">ZIP</a></td></tr>
<tr><td><a href="TagNames/Photoshop.html">PSD, PSB</a></td><td>R/W</td><td>PhotoShop Document / Large Document</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R <a href="TagNames/Photoshop.html">Photoshop</a></td></tr>
<tr><td><a href="TagNames/Photoshop.html">PSD, PSB, PSDT</a></td><td>R/W</td><td>PhotoShop Document / Large Document / Template</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R/W/C</td><td>R <a href="TagNames/Photoshop.html">Photoshop</a></td></tr>
<tr><td><a href="TagNames/PSP.html">PSP, PSPIMAGE</a></td><td>R</td><td>Paint Shop Pro</td><td>R</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/PSP.html">PSP</a></td></tr>
<tr><td><a href="TagNames/QuickTime.html">QTIF, QTI, QIF</a></td><td>R/W</td><td>QuickTime Image File</td><td>R/W<span class=sup>3</span></td><td>R/W<span class=sup>3</span></td><td>R/W/C</td><td>-</td><td>R/W <a href="TagNames/QuickTime.html">QuickTime</a><span class=sup>4</span></td></tr>
<tr><td><a href="TagNames/Real.html#Audio">RA</a></td><td>R</td><td>Real Audio</td><td>-</td><td>-</td><td>-</td><td>-</td><td>R <a href="TagNames/Real.html#Audio">Real</a> <a href="TagNames/ID3.html">ID3</a></td></tr>
@ -1106,7 +1106,7 @@ binary data. The simple script above does not handle this case.</p>
<li><a href="faq.html">ExifTool FAQ</a></li>
<li><a href="https://sourceforge.net/p/exiftool/discussion/">ExifTool Forum</a></li>
<li><a href="TagNames/index.html">ExifTool Tag Names</a></li>
<li><a href="history.html">Jan. 14, 2017</a> (<a href="http://owl.phy.queensu.ca/~phil/exiftool/rss.xml">RSS feed</a>)</li>
<li><a href="history.html">Feb. 1, 2017</a> (<a href="http://owl.phy.queensu.ca/~phil/exiftool/rss.xml">RSS feed</a>)</li>
<li><a href="exiftool_pod.html">exiftool Application Documentation</a> (<a href="http://owl.phy.queensu.ca/~phil/exiftool/exiftool_pod.pdf">download in PDF format</a>)</li>
<li><a href="ExifTool.html">Image::ExifTool API Documentation</a> (<a href="http://owl.phy.queensu.ca/~phil/exiftool/ExifTool.pdf">download in PDF format</a>)</li>
<li><a href="Shift.html">Date/Time Shift Module</a> (<a href="http://owl.phy.queensu.ca/~phil/exiftool/Shift.pdf">download in PDF format</a>)</li>
@ -1197,6 +1197,7 @@ three droplets to extract information [exiftool must be installed] (thanks to Ro
<li><a href="https://savannah.nongnu.org/projects/fotopreprocessor/">FotoPreProcessor</a>: PyQt4-based frontend for exiftool to graphically edit metadata</li>
<li><a href="http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4715.0.html">ExZenToo</a>: Script for basic ExifTool GUI using Zenity</li>
<li><a href="https://github.com/Glutanimate/PDFMtEd">PDFMted</a>: A set of bash scripts for easy viewing and editing of PDF metadata</li>
<li><a href="https://github.com/HeLiBloks/exiftool-zsh-completion">exiftool-zsh-completion</a>: zsh completion for exiftool</li>
</ul>
<p><b><a name="related_multi">Multi-Platform</a></b></p>
@ -1256,8 +1257,9 @@ three droplets to extract information [exiftool must be installed] (thanks to Ro
<li><a href="http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,5381.0.html">ExifTool_PHP_StayOpen</a>: ExifTool PHP fast processing script using -stayOpen and Gearman</li>
<li><a href="http://sourceforge.net/projects/moss/">Moss</a>: Collection of Java utilities which includes an exiftool interface</li>
<li><a href="http://im4java.sourceforge.net">im4java</a>: Java interface to ImageMagick, ExifTool, and other image utilities</li>
<li><a href="http://www.thebuzzmedia.com/software/exiftool-enhanced-java-integration-for-exiftool/">Java ExifTool</a>: Enhanced Java Integration for ExifTool</li>
<li><a href="https://github.com/mjeanroy/exiftool">Java ExifTool</a>: Enhanced Java Integration for ExifTool</li>
<li><a href="https://bitbucket.org/P_W999/j-exiftool/wiki/Home">J-ExifTool</a>: Open-source, cross platform Java7 library to read/write Exif tags in images</li>
<li><a href="https://github.com/mceachen/exiftool-vendored">exiftool-vendored</a>: Blazing-fast, cross-platform Node.js access to ExifTool</li>
<li><a href="http://u88.n24.queensu.ca/~bogdan/articles/delphi01.html">How to call ExifTool from Delphi</a>, by Bogdan Hrastnik</li>
</ul>

22
html/install.html

@ -55,10 +55,10 @@ documentation or some other files of the full distribution.</p>
<h3>Stand-Alone Executable</h3>
<ol>
<li><b>Download</b> the <b>Windows Executable</b> from the <a href="index.html">ExifTool home page</a>.
<br><span class=lt>(The file you download will have a name like "<code>exiftool-10.40.zip</code>".)</span></li>
<br><span class=lt>(The file you download will have a name like "<code>exiftool-10.41.zip</code>".)</span></li>
<li><b>Extract "<code>exiftool(-k).exe</code>"</b> from the
"<code>.zip</code>" file, and place it <b>on your Desktop</b>.
<br><span class=lt>(Double-click on "<code>exiftool-10.40.zip</code>" to open
<br><span class=lt>(Double-click on "<code>exiftool-10.41.zip</code>" to open
the archive, then drag "<code>exiftool(-k).exe</code>" to your Desktop.)</span></li>
</ol>
<p>You can now double-click on "<code>exiftool(-k).exe</code>" to read the
@ -106,7 +106,7 @@ can be downloaded from
<a href="http://www.activestate.com/activeperl/">activeperl.com</a>.)</p>
<ol>
<li><b>Download</b> the <b>Image-ExifTool distribution</b> from the <a href="index.html">ExifTool home page</a>
<br><span class=lt>(The file you download will have a name like "<code>Image-ExifTool-10.40.tar.gz</code>".)</span></li>
<br><span class=lt>(The file you download will have a name like "<code>Image-ExifTool-10.41.tar.gz</code>".)</span></li>
<li><b>Extract the ExifTool files</b> from the archive.
<br><span class=lt>(The archive is a gzipped tar file, and can be opened with
various Windows utilities, including WinZip.)</span></li>
@ -148,7 +148,7 @@ in the OS X package. Both versions run natively on PPC and Intel Macs.</p>
<h3>OS X Package</h3>
<ol>
<li><b>Download</b> the <b>ExifTool OS X Package</b> from the <a href="index.html">ExifTool home page</a>.
<br><span class=lt>(The file you download will have a name like "<code>ExifTool-10.40.dmg</code>".)</span></li>
<br><span class=lt>(The file you download will have a name like "<code>ExifTool-10.41.dmg</code>".)</span></li>
<li><b>Install</b> as a normal <b>OS X package</b>.
<br><span class=lt>(Open the disk image, double-click on the install package, and follow the instructions.)
</span></li>
@ -163,12 +163,12 @@ in the OS X package. Both versions run natively on PPC and Intel Macs.</p>
<ol>
<li><b>Download</b> the <b>Image-ExifTool distribution</b> from the <a href="index.html">ExifTool home page</a>
to your Desktop.
<br><span class=lt>(The file you download will have a name like "<code>Image-ExifTool-10.40.tar.gz</code>".)</span></li>
<br><span class=lt>(The file you download will have a name like "<code>Image-ExifTool-10.41.tar.gz</code>".)</span></li>
<li><b>Launch</b> the <b>Terminal</b> application from the Utilities folder in your Applications folder.</li>
<li>In the Terminal window, <b>type the following</b>:
<pre class='code'> cd ~/Desktop
tar -xzf Image-ExifTool-10.40.tar.gz
cd Image-ExifTool-10.40
tar -xzf Image-ExifTool-10.41.tar.gz
cd Image-ExifTool-10.41
sudo cp -r exiftool lib /usr/local/bin
</pre>
<span class=lt>(Note: The last step above will require you to enter your
@ -184,7 +184,7 @@ your Perl version. If both sets of libraries exist, /usr/local/bin/lib takes
precedence for exiftool, but /Library/Perl/#.#.# is the default for any other
Perl scripts.</li>
<li>In OS X 10.8 or later, you may see this message when you try to open the install package:
<blockquote class=red>"ExifTool-10.40.pkg" can't be opened because it is from an
<blockquote class=red>"ExifTool-10.41.pkg" can't be opened because it is from an
unidentified developer.</blockquote> The solution is to control-click on the pkg
then select "Open" from the pop-up menu instead of just double-clicking. An alternative
is to lower the security settings by changing "Allow applications downloaded from" to
@ -210,11 +210,11 @@ have the wrong "<code>lib</code>" folder.</li>
<ol>
<li><b>Download</b> the <b>Image-ExifTool distribution</b> from the <a href="index.html">ExifTool home page</a>
<br><span class=lt>(The file you download will have a name like "<code>Image-ExifTool-10.40.tar.gz</code>".)</span></li>
<br><span class=lt>(The file you download will have a name like "<code>Image-ExifTool-10.41.tar.gz</code>".)</span></li>
<li><b>Unpack the distribution</b> and <b>make it your current directory</b> by typing:
<pre class='code'> cd <i>&lt;your download directory&gt;</i>
gzip -dc Image-ExifTool-10.40.tar.gz | tar -xf -
cd Image-ExifTool-10.40
gzip -dc Image-ExifTool-10.41.tar.gz | tar -xf -
cd Image-ExifTool-10.41
</pre>
<span class=lt>(At this point you may run exiftool by typing
"<code>exiftool <i>&lt;image file name&gt;</i></code>".)</span></li>

28
lib/Image/ExifTool.pm

@ -27,7 +27,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
%mimeType $swapBytes $swapWords $currentByteOrder %unpackStd
%jpegMarker %specialTags);
$VERSION = '10.40';
$VERSION = '10.41';
$RELEASE = '';
@ISA = qw(Exporter);
%EXPORT_TAGS = (
@ -418,6 +418,7 @@ my %fileTypeLookup = (
PS3 => 'PS',
PSB => ['PSD', 'Photoshop Large Document'],
PSD => ['PSD', 'Photoshop Document'],
PSDT => ['PSD', 'Photoshop Document Template'],
PSP => ['PSP', 'Paint Shop Pro'],
PSPFRAME => 'PSP',
PSPIMAGE => 'PSP',
@ -1911,6 +1912,7 @@ sub ClearOptions($)
TextOut => \*STDOUT,# file for Verbose/HtmlDump output
Unknown => 0, # flag to get values of unknown tags (0-2)
UserParam => { }, # user parameters for InsertTagValues()
Validate => undef, # perform additional validation
Verbose => 0, # print verbose messages (0-5, higher # = more verbose)
WriteMode => 'wcg', # enable all write modes by default
XMPAutoConv => 1, # automatic conversion of unknown XMP tag values
@ -1961,11 +1963,13 @@ sub ExtractInfo($;@)
delete $$self{EXIF_DATA};
delete $$self{EXIF_POS};
} else {
if (defined $_[0] or $$options{HtmlDump}) {
if (defined $_[0] or $$options{HtmlDump} or $$req{validate}) {
%saveOptions = %$options; # save original options
# require duplicates for html dump
$self->Options(Duplicates => 1) if $$options{HtmlDump};
# enable Validate option if Validate tag is requested
$self->Options(Validate => 1) if $$req{validate};
if (defined $_[0]) {
# only initialize filename if called with arguments
@ -1994,8 +1998,10 @@ sub ExtractInfo($;@)
$self->WarnOnce('Install Time::HiRes to generate ProcessingTime');
}
}
++$$self{FILE_SEQUENCE}; # count files read
}
my $filename = $$self{FILENAME}; # image file name ('' if already open)
my $raf = $$self{RAF}; # RandomAccess object
@ -2319,6 +2325,13 @@ sub ExtractInfo($;@)
}
}
}
# generate Validate tag if requested
if ($$options{Validate} and not $reEntry) {
require Image::ExifTool::Validate;
Image::ExifTool::Validate::FinishValidate($self, $$req{validate});
}
@startTime and $self->FoundTag('ProcessingTime', Time::HiRes::tv_interval(\@startTime));
# restore original options
@ -2328,7 +2341,7 @@ sub ExtractInfo($;@)
# restore necessary members when exiting re-entrant code
$$self{$_} = $$reEntry{$_} foreach keys %$reEntry;
}
# ($type may be undef without an Error when processing sub-documents)
return 0 if not defined $type or exists $$self{VALUE}{Error};
return 1;
@ -5617,6 +5630,7 @@ sub ProcessJPEG($$)
}
next if $trailInfo or $wantTrailer or $verbose > 2 or $htmlDump;
}
next if $$self{Validate}; # (validate to EOI)
# nothing interesting to parse after start of scan (SOS)
$success = 1;
last; # all done parsing file
@ -5632,10 +5646,10 @@ sub ProcessJPEG($$)
next;
} elsif ($marker == 0xdb and length($$segDataPt) and # DQT
# save the DQT data only if JPEGDigest has been requested
# (Note: this will not work with the application -p option
# because we aren't checking the RequestAll API option here.
# The reason is that there is too much overhead involved in
# the calculation of this tag to make this worth the CPU time.)
# (Note: since we aren't checking the RequestAll API option here, the application
# must use the RequestTags option to generate these tags if they have not been
# specifically requested. The reason is that there is too much overhead involved
# in the calculation of this tag to make this worth the CPU time.)
($$self{REQ_TAG_LOOKUP}{jpegdigest} or $$self{REQ_TAG_LOOKUP}{jpegqualityestimate}))
{
my $num = unpack('C',$$segDataPt) & 0x0f; # get table index

16
lib/Image/ExifTool.pod

@ -904,6 +904,13 @@ the parameter name with a dollar sign, just like normal tags. If called
without no additional arguments, C<Options('UserParam')> returns a reference
to the hash of all user parameters (with lower-case names).
=item Validate
[Experimental] Flag to perform extra validation when reading. Causes a
minor warning to be issued for tags not defined in the EXIF, TIFF, DNG or
DCF specification. The numerical value of this tag gives the number of
errors, warnings and minor warnings encountered.
=item Verbose
Print verbose messages to file specified by TextOut option. Value may be