summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorexiftool <phil@work3.phy.queensu.ca>2016-12-19 14:04:05 -0500
committerexiftool <phil@work3.phy.queensu.ca>2016-12-19 14:04:05 -0500
commit0a8bd6c38914d5d39ee96f29241e32c20707d51c (patch)
tree25532a6a5bce5edc1227006689caaf97e17a925a
parent6f0b01aacf9969355dec3b24f15a1bab142db97a (diff)
Update to 10.37
-rw-r--r--Changes12
-rw-r--r--README4
-rw-r--r--config_files/time_zone.config20
-rwxr-xr-xexiftool25
-rw-r--r--html/ExifTool.html5
-rw-r--r--html/TagNames/BMP.html149
-rw-r--r--html/TagNames/FujiFilm.html17
-rw-r--r--html/TagNames/Sony.html5
-rw-r--r--html/exiftool_pod.html9
-rw-r--r--html/geotag.html13
-rw-r--r--html/history.html13
-rw-r--r--html/index.html14
-rw-r--r--html/install.html22
-rw-r--r--html/under.html25
-rw-r--r--lib/Image/ExifTool.pm18
-rw-r--r--lib/Image/ExifTool.pod5
-rw-r--r--lib/Image/ExifTool/BMP.pm204
-rw-r--r--lib/Image/ExifTool/FujiFilm.pm7
-rw-r--r--lib/Image/ExifTool/Photoshop.pm15
-rw-r--r--lib/Image/ExifTool/QuickTime.pm12
-rw-r--r--lib/Image/ExifTool/Sony.pm9
-rw-r--r--lib/Image/ExifTool/TagInfoXML.pm2
-rw-r--r--lib/Image/ExifTool/TagLookup.pm16
-rw-r--r--lib/Image/ExifTool/TagNames.pod27
-rw-r--r--perl-Image-ExifTool.spec2
-rw-r--r--t/BMP_2.out7
-rw-r--r--t/Pentax_4.out7
-rw-r--r--t/RIFF_3.out7
-rwxr-xr-xwindows_exiftool27
29 files changed, 572 insertions, 126 deletions
diff --git a/Changes b/Changes
index 6a32e24f..34f8d72b 100644
--- a/Changes
+++ b/Changes
@@ -7,6 +7,18 @@ RSS feed: http://owl.phy.queensu.ca/~phil/exiftool/rss.xml
Note: The most recent production release is Version 10.36. (Other versions are
considered development releases, and are not uploaded to CPAN.)
+Dec. 19, 2016 - Version 10.37
+
+ - Decode more information from BMP V4 and V5 images
+ - Added a few new FujiFlashMode values (thanks Albert Shan)
+ - Changed -geotime default to use unconverted value of DateTimeOriginal
+ - Changed a couple of Sony Voigtlander LensType strings (thanks Jos Roost)
+ - Warn about invalid TAG name
+ - Generate default-language version of QuickTime tags even if the same-named
+ tag already exists in another group
+ - Fixed bug reading some Photoshop layer information
+ - Fixed problems in sample config file time_zone.config (thanks Hayo Baan)
+
Nov. 24, 2016 - Version 10.36 (production release)
- Added 3D Studio MAX files to the list of supported file types
diff --git a/README b/README
index 71fe172b..5fe459b0 100644
--- a/README
+++ b/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.36.tar.gz | tar -xf -
- cd Image-ExifTool-10.36
+ gzip -dc Image-ExifTool-10.37.tar.gz | tar -xf -
+ cd Image-ExifTool-10.37
./exiftool t/images/ExifTool.jpg
Note: These commands extract meta information from one of the test images.
diff --git a/config_files/time_zone.config b/config_files/time_zone.config
index e29aae9b..a497aa6e 100644
--- a/config_files/time_zone.config
+++ b/config_files/time_zone.config
@@ -4,20 +4,26 @@
# Description: ExifTool config file to return time zone from an image
#
# Notes: The Composite:TimeZone tag defined here attempts to determine
-# the time zone for an image. If possible, the time zone for
+# the time zone for an image. If possible, the camera time zone
+# is used, if that does not exist, the time zone for
# DateTimeOriginal is returned, but if this can't be determined
# then the time zone for CreateDate and then ModifyDate are used.
+# If this all does not result in a time zone, the timezone of the
+# TimeCreated tag is used
#
# Usage: exiftool -config time_zone.config -timezone FILE
#
-# Requires: Any version of ExifTool
+# Requires: ExifTool version 7.74 or later
#
# Revisions: 2016/10/03 - P. Harvey Created
+# 2016/12/12 - H. Baan Corrected tag name, added support for
+# camera time zone/daylight savings info in
+# MakerNotes
#------------------------------------------------------------------------------
%Image::ExifTool::UserDefined = (
'Image::ExifTool::Composite' => {
- FileName => {
+ TimeZone => {
Desire => {
0 => 'DateTimeOriginal',
1 => 'CreateDate',
@@ -28,8 +34,12 @@
6 => 'OffsetTimeDigitized', # (CreateDate)
7 => 'OffsetTime', # (ModifyDate)
8 => 'TimeZoneOffset', # (ModifyDate)
+ 9 => 'MakerNotes:TimeZone',
+ 10 => 'MakerNotes:DaylightSavings',
+ 11 => 'TimeCreated',
},
RawConv => q{
+ return TimeZoneString($val[9] + ($val[10] ? 60 : 0)) if defined $val[9];
return $val[5] if $val[5];
return $val[6] if $val[6];
return $val[7] if $val[7];
@@ -40,13 +50,15 @@
}
if (defined $val[3] and defined $val[4]) {
my $loc = $val[0] || $val[1] || $val[2];
- print "$loc\n";#TEST
if ($loc) {
my @loc = split /[: ]/, $loc;
my @gmt = split /[: ]/, "$val[3] $val[4]";
return TimeZoneString(GetTimeZone([@loc[5,4,3,2]], [@gmt[5,4,3,2]]));
}
}
+ if ($val[11] && $val[11] =~ /[0-9]{2}[0-9]{2}[0-9]{2}([+-][0-9]{2})([0-9]{2})/) {
+ return TimeZoneString($1 * 60 + $2);
+ }
return undef;
},
},
diff --git a/exiftool b/exiftool
index 33ca011d..32083af8 100755
--- a/exiftool
+++ b/exiftool
@@ -12,7 +12,7 @@
use strict;
require 5.004;
-my $version = '10.36';
+my $version = '10.37';
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
my $exeDir;
@@ -1180,7 +1180,7 @@ for (;;) {
} elsif (/^([-\w]+:)*(geotag|geotime)\b/i) {
if (lc $2 eq 'geotag') {
if ((not defined $addGeotime or $addGeotime) and length $val) {
- $addGeotime = ($1 || '') . 'Geotime<DateTimeOriginal';
+ $addGeotime = ($1 || '') . 'Geotime<DateTimeOriginal#';
}
} else {
$addGeotime = '';
@@ -1207,10 +1207,12 @@ for (;;) {
$addGeotime = '';
}
}
- } elsif (/^-(.*)/) {
- push @exclude, $1;
} else {
- push @tags, $_;
+ my $lst = s/^-// ? \@exclude : \@tags;
+ unless (/^([-\w*]+:)*([-\w*?]+)#?$/) {
+ Warn(qq(Invalid TAG name: $_\n));
+ }
+ push @$lst, $_; # (push everything for backward compatibility)
}
}
} else {
@@ -3532,7 +3534,7 @@ sub AddPrintFormat($)
#------------------------------------------------------------------------------
# Get suggested file extension based on tag value for binary output
-# Inputs: 0) data ref
+# Inputs: 0) ExifTool ref, 1) data ref, 2) tag name
# Returns: file extension (lower case), or 'dat' if unknown
sub SuggestedExtension($$$)
{
@@ -3561,6 +3563,8 @@ sub SuggestedExtension($$$)
$ext = $ext ? lc($ext) : 'raw';
} elsif ($tag eq 'EXIF') {
$ext = 'exif';
+ } elsif ($tag eq 'ICC_Profile') {
+ $ext = 'icc';
} elsif ($$valPt =~ /^(MM\0\x2a|II\x2a\0)/) {
$ext = 'tiff';
} elsif ($$valPt !~ /^.{0,4096}\0/s) {
@@ -4856,7 +4860,7 @@ with this command:
produces output like this:
- -- Generated by ExifTool 10.36 --
+ -- Generated by ExifTool 10.37 --
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
@@ -5574,11 +5578,12 @@ Geotag images from the specified GPS track log file. Using the B<-geotag>
option is equivalent to writing a value to the C<Geotag> tag. After the
B<-geotag> option has been specified, the value of the C<Geotime> tag is
written to define a date/time for the position interpolation. If C<Geotime>
-is not specified, the value is copied from C<DateTimeOriginal>. For
-example, the following two commands are equivalent:
+is not specified, the value is copied from C<DateTimeOriginal#> (the C<#> is
+added to copy the unformatted value, avoiding potential conflicts with the
+B<-d> option). For example, the following two commands are equivalent:
exiftool -geotag track.log image.jpg
- exiftool -geotag "-Geotime<DateTimeOriginal" image.jpg
+ exiftool -geotag track.log "-Geotime<DateTimeOriginal#" image.jpg
When the C<Geotime> value is converted to UTC, the local system timezone is
assumed unless the date/time value contains a timezone. Writing C<Geotime>
diff --git a/html/ExifTool.html b/html/ExifTool.html
index 9be3b8b4..6c43978b 100644
--- a/html/ExifTool.html
+++ b/html/ExifTool.html
@@ -949,6 +949,11 @@ specified information. May be called repeatedly to write the same information
to additional files without the need to call <a href="#SetNewValue">SetNewValue</a>
again.</p>
+<p>Note that it is <b>NOT</b> necessary to call <a href="#ExtractInfo">ExtractInfo</a>
+or <a href="#ImageInfo">ImageInfo</a> before <a href="#WriteInfo">WriteInfo</a>.
+<a href="#WriteInfo">WriteInfo</a> changes only metadata specified by previous
+calls to <a href="#SetNewValue">SetNewValue</a>.</p>
+
<blockquote><table class='norm'>
<tr><td><b>Prototype</b></td><td>WriteInfo($$;$$)</td></tr>
<tr><td valign=top><b>Inputs</b></td><td><b>0)</b> ExifTool object reference
diff --git a/html/TagNames/BMP.html b/html/TagNames/BMP.html
index f89aa25c..36d98953 100644
--- a/html/TagNames/BMP.html
+++ b/html/TagNames/BMP.html
@@ -15,26 +15,36 @@ of image related information.</p>
<tr class=h><th>Index1</th><th>Tag Name</th>
<th>Writable</th><th>Values / <span class=n>Notes</span></th></tr>
<tr>
+<td class=r title='0 = 0x0'>0</td>
+<td>BMPVersion</td>
+<td class=c>N</td>
+<td><span class=s><span class=n>(this is actually the size of the BMP header, but used to determine the BMP
+version)</span>
+ <br>40 = Windows V3
+ <br>68 = AVI BMP structure?
+ <br>108 = Windows V4
+ <br>124 = Windows V5</span></td></tr>
+<tr class=b>
<td class=r title='4 = 0x4'>4</td>
<td>ImageWidth</td>
<td class=c>N</td>
<td>&nbsp;</td></tr>
-<tr class=b>
+<tr>
<td class=r title='8 = 0x8'>8</td>
<td>ImageHeight</td>
<td class=c>N</td>
<td>&nbsp;</td></tr>
-<tr>
+<tr class=b>
<td class=r title='12 = 0xc'>12</td>
<td>Planes</td>
<td class=c>N</td>
<td>&nbsp;</td></tr>
-<tr class=b>
+<tr>
<td class=r title='14 = 0xe'>14</td>
<td>BitDepth</td>
<td class=c>N</td>
<td>&nbsp;</td></tr>
-<tr>
+<tr class=b>
<td class=r title='16 = 0x10'>16</td>
<td>Compression</td>
<td class=c>N</td>
@@ -46,31 +56,112 @@ of image related information.</p>
<br>4 = JPEG
<br>5 = PNG</td></tr></table>
</td></tr>
-<tr class=b>
+<tr>
<td class=r title='20 = 0x14'>20</td>
<td>ImageLength</td>
<td class=c>N</td>
<td>&nbsp;</td></tr>
-<tr>
+<tr class=b>
<td class=r title='24 = 0x18'>24</td>
<td>PixelsPerMeterX</td>
<td class=c>N</td>
<td>&nbsp;</td></tr>
-<tr class=b>
+<tr>
<td class=r title='28 = 0x1c'>28</td>
<td>PixelsPerMeterY</td>
<td class=c>N</td>
<td>&nbsp;</td></tr>
-<tr>
+<tr class=b>
<td class=r title='32 = 0x20'>32</td>
<td>NumColors</td>
<td class=c>N</td>
<td>&nbsp;</td></tr>
-<tr class=b>
+<tr>
<td class=r title='36 = 0x24'>36</td>
<td>NumImportantColors</td>
<td class=c>N</td>
<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='40 = 0x28'>40</td>
+<td>RedMask</td>
+<td class=c>N</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='44 = 0x2c'>44</td>
+<td>GreenMask</td>
+<td class=c>N</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='48 = 0x30'>48</td>
+<td>BlueMask</td>
+<td class=c>N</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='52 = 0x34'>52</td>
+<td>AlphaMask</td>
+<td class=c>N</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='56 = 0x38'>56</td>
+<td>ColorSpace</td>
+<td class=c>N</td>
+<td><table class=cols><tr>
+ <td>0 = Calibrated RGB
+ <br>1 = Device RGB
+ <br>2 = Device CMYK
+ <br>&#39;LINK&#39; = Linked Color Profile
+ <br>&#39;MBED&#39; = Embedded Color Profile
+ <br>&#39;Win &#39; = Windows Color Space
+ <br>&#39;sRGB&#39; = sRGB</td></tr></table>
+</td></tr>
+<tr>
+<td class=r title='60 = 0x3c'>60</td>
+<td>RedEndpoint</td>
+<td class=c>N</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='72 = 0x48'>72</td>
+<td>GreenEndpoint</td>
+<td class=c>N</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='84 = 0x54'>84</td>
+<td>BlueEndpoint</td>
+<td class=c>N</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='96 = 0x60'>96</td>
+<td>GammaRed</td>
+<td class=c>N</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='100 = 0x64'>100</td>
+<td>GammaGreen</td>
+<td class=c>N</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td class=r title='104 = 0x68'>104</td>
+<td>GammaBlue</td>
+<td class=c>N</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='108 = 0x6c'>108</td>
+<td>RenderingIntent</td>
+<td class=c>N</td>
+<td><span class=s>1 = Graphic (LCS_GM_BUSINESS)
+ <br>2 = Proof (LCS_GM_GRAPHICS)
+ <br>4 = Picture (LCS_GM_IMAGES)
+ <br>8 = Absolute Colorimetric (LCS_GM_ABS_COLORIMETRIC)</span></td></tr>
+<tr class=b>
+<td class=r title='112 = 0x70'>112</td>
+<td>ProfileDataOffset</td>
+<td class=c>N</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td class=r title='116 = 0x74'>116</td>
+<td>ProfileSize</td>
+<td class=c>N</td>
+<td>&nbsp;</td></tr>
</table></td></tr></table></blockquote>
<h2><a name='OS2'>BMP OS2 Tags</a></h2>
@@ -81,30 +172,62 @@ of image related information.</p>
<tr class=h><th>Index1</th><th>Tag Name</th>
<th>Writable</th><th>Values / <span class=n>Notes</span></th></tr>
<tr>
+<td class=r title='0 = 0x0'>0</td>
+<td>BMPVersion</td>
+<td class=c>N</td>
+<td><span class=s><span class=n>(again, the header size is used to determine the BMP version)</span>
+ <br>12 = OS/2 V1
+ <br>64 = OS/2 V2</span></td></tr>
+<tr class=b>
<td class=r title='4 = 0x4'>4</td>
<td>ImageWidth</td>
<td class=c>N</td>
<td>&nbsp;</td></tr>
-<tr class=b>
+<tr>
<td class=r title='6 = 0x6'>6</td>
<td>ImageHeight</td>
<td class=c>N</td>
<td>&nbsp;</td></tr>
-<tr>
+<tr class=b>
<td class=r title='8 = 0x8'>8</td>
<td>Planes</td>
<td class=c>N</td>
<td>&nbsp;</td></tr>
-<tr class=b>
+<tr>
<td class=r title='10 = 0xa'>10</td>
<td>BitDepth</td>
<td class=c>N</td>
<td>&nbsp;</td></tr>
</table></td></tr></table></blockquote>
+<h2><a name='Extra'>BMP Extra Tags</a></h2>
+<p>Extra information extracted from some BMP images.</p>
+<blockquote>
+<table class=frame><tr><td>
+<table class=inner cellspacing=1>
+<tr class=h><th>Tag Name</th>
+<th>Writable</th><th>Values / <span class=n>Notes</span></th></tr>
+<tr>
+<td>EmbeddedJPG</td>
+<td class=c>N</td>
+<td>&nbsp;</td></tr>
+<tr class=b>
+<td>EmbeddedPNG</td>
+<td class=c>N</td>
+<td>&nbsp;</td></tr>
+<tr>
+<td>ICC_Profile</td>
+<td class=c>-</td>
+<td>--&gt; <a href='ICC_Profile.html'>ICC_Profile Tags</a></td></tr>
+<tr class=b>
+<td>LinkedProfileName</td>
+<td class=c>N</td>
+<td>&nbsp;</td></tr>
+</table></td></tr></table></blockquote>
+
<hr>
(This document generated automatically by Image::ExifTool::BuildTagLookup)
-<br><i>Last revised Jan 21, 2010</i>
+<br><i>Last revised Dec 7, 2016</i>
<p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p>
</body>
</html>
diff --git a/html/TagNames/FujiFilm.html b/html/TagNames/FujiFilm.html
index 40061816..8802d671 100644
--- a/html/TagNames/FujiFilm.html
+++ b/html/TagNames/FujiFilm.html
@@ -138,12 +138,15 @@ necessarily correspond to the camera body number -- this needs to be checked)</s
<td>FujiFlashMode</td>
<td class=c>int16u</td>
<td><table class=cols><tr>
- <td>0 = Auto
- <br>1 = On
- <br>2 = Off</td><td>&nbsp;&nbsp;</td>
- <td>3 = Red-eye reduction
- <br>4 = External
- <br>16 = Commander</td></tr></table>
+ <td>0x0 = Auto
+ <br>0x1 = On
+ <br>0x2 = Off
+ <br>0x3 = Red-eye reduction
+ <br>0x4 = External
+ <br>0x10 = Commander
+ <br>0xa920 = 1st Curtain (front)
+ <br>0xc920 = 2nd Curtain (rear)
+ <br>0xe920 = High Speed Sync (HSS)</td></tr></table>
</td></tr>
<tr class=b>
<td title='0x1011 = 4113'>0x1011</td>
@@ -858,7 +861,7 @@ RAF-format information.</p>
<hr>
(This document generated automatically by Image::ExifTool::BuildTagLookup)
-<br><i>Last revised Nov 21, 2016</i>
+<br><i>Last revised Dec 6, 2016</i>
<p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p>
</body>
</html>
diff --git a/html/TagNames/Sony.html b/html/TagNames/Sony.html
index d4db66ee..6c9dfc95 100644
--- a/html/TagNames/Sony.html
+++ b/html/TagNames/Sony.html
@@ -4693,8 +4693,9 @@ 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 HELIAR-HYPER WIDE 12mm F5.6 III Aspherical</td>
+</tr><tr><td>50994</td><td>= Voigtlander ULTRA WIDE-HELIAR 12mm F5.6 III</td>
</tr></table></td></tr></table></blockquote>
<h2><a name='CameraSettingsUnknown'>Sony CameraSettingsUnknown Tags</a></h2>
@@ -10298,7 +10299,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 Nov 23, 2016</i>
+<br><i>Last revised Dec 19, 2016</i>
<p class=lf><a href='index.html'>&lt;-- ExifTool Tag Names</a></p>
</body>
</html>
diff --git a/html/exiftool_pod.html b/html/exiftool_pod.html
index 6a40cddb..0983c2f8 100644
--- a/html/exiftool_pod.html
+++ b/html/exiftool_pod.html
@@ -914,7 +914,7 @@ are ignored. For example, this format file:</p>
exiftool -p test.fmt a.jpg b.jpg</pre>
<p>produces output like this:</p>
<pre>
- -- Generated by ExifTool 10.36 --
+ -- Generated by ExifTool 10.37 --
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
@@ -1624,11 +1624,12 @@ for more details about optional libraries).</p>
option is equivalent to writing a value to the <code>Geotag</code> tag. After the
<strong>-geotag</strong> option has been specified, the value of the <code>Geotime</code> tag is
written to define a date/time for the position interpolation. If <code>Geotime</code>
-is not specified, the value is copied from <code>DateTimeOriginal</code>. For
-example, the following two commands are equivalent:</p>
+is not specified, the value is copied from <code>DateTimeOriginal#</code> (the <code>#</code> is
+added to copy the unformatted value, avoiding potential conflicts with the
+<strong>-d</strong> option). For example, the following two commands are equivalent:</p>
<pre>
exiftool -geotag track.log image.jpg
- exiftool -geotag &quot;-Geotime&lt;DateTimeOriginal&quot; image.jpg</pre>
+ exiftool -geotag track.log &quot;-Geotime&lt;DateTimeOriginal#&quot; image.jpg</pre>
<p>When the <code>Geotime</code> value is converted to UTC, the local system timezone is
assumed unless the date/time value contains a timezone. Writing <code>Geotime</code>
causes the following tags to be written (provided they can be calculated
diff --git a/html/geotag.html b/html/geotag.html
index 62450088..b082491d 100644
--- a/html/geotag.html
+++ b/html/geotag.html
@@ -192,8 +192,8 @@ DateTimeOriginal, CreateDate, ModifyDate, FileModifyDate</li>
position is calculated (by interpolating between fixes in the GPS track log).
Unless a group is specified, exiftool writes the generated tags to the default
groups. If a value for <code>Geotime</code> is not given, it is taken from
-<code>DateTimeOriginal</code> for each image (as if
-<code>"-Geotime&lt;DateTimeOriginal"</code> had been specified), but the value
+unformatted value of <code>DateTimeOriginal</code> for each image (as if
+<code>"-Geotime&lt;DateTimeOriginal#"</code> had been specified), but the value
may be copied from any other date/time tag or set directly from a date/time
string.</p>
@@ -216,7 +216,7 @@ lines illustrating various aspects of the geotagging feature.</p>
<blockquote class=lt><i>Programmers: Note that <code>Geotime</code> must always
be specified when geotagging via the API -- the default value of
-<code>DateTimeOriginal</code> is implemented by the application.</i>
+<code>DateTimeOriginal#</code> is implemented by the application.</i>
</blockquote>
<a name="Examples"></a>
@@ -224,8 +224,9 @@ be specified when geotagging via the API -- the default value of
<p>Geotag all images in the "c:\images" directory from position information in a
GPS track log ("c:\gps logs\track.log"). Since the <code>Geotime</code> time is
-not specified, the value of <code>DateTimeOriginal</code> is used. Local system
-time is assumed unless <code>DateTimeOriginal</code> contains a timezone:</p>
+not specified, the value of <code>DateTimeOriginal#</code> is used. Local
+system time is assumed unless <code>DateTimeOriginal#</code> contains a
+timezone:</p>
<pre>exiftool -geotag "c:\gps logs\track.log" c:\images</pre>
@@ -654,7 +655,7 @@ forum post</a> for more useful tips about creating KML files.</p>
<hr>
<i>Created Apr. 2, 2009</i><br>
-<i>Last revised Nov. 23, 2016</i>
+<i>Last revised Dec. 6, 2016</i>
<p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p>
</body>
</html>
diff --git a/html/history.html b/html/history.html
index 726832a6..9ad53f19 100644
--- a/html/history.html
+++ b/html/history.html
@@ -17,6 +17,19 @@ considered development releases, and are not uploaded to <a href="http://search.
<!-- Use line width of 80 -->
<!-- *********************************************************************** -->
+<a name='v10.37'><b>Dec. 19, 2016 - Version 10.37</b></a>
+<ul>
+<li>Decode more information from BMP V4 and V5 images
+<li>Added a few new FujiFlashMode values (thanks Albert Shan)
+<li>Changed -geotime default to use unconverted value of DateTimeOriginal
+<li>Changed a couple of Sony Voigtlander LensType strings (thanks Jos Roost)
+<li>Warn about invalid TAG name
+<li>Generate default-language version of QuickTime tags even if the same-named
+ tag already exists in another group
+<li>Fixed bug reading some Photoshop layer information
+<li>Fixed problems in sample config file time_zone.config (thanks Hayo Baan)
+</ul>
+
<a name='v10.36'><b>Nov. 24, 2016 - Version 10.36</b></a> <span class=grn>(production release)</span>
<ul>
<li>Added 3D Studio MAX files to the list of supported file types
diff --git a/html/index.html b/html/index.html
index 5b9d6eac..ffbd9593 100644
--- a/html/index.html
+++ b/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.36.tar.gz/download">
-Download Version 10.36</a> (4.0 MB) -
-<a href="history.html">Nov. 24, 2016</a></b></td></tr></table></blockquote>
+<a href="http://sourceforge.net/projects/exiftool/files/Image-ExifTool-10.37.tar.gz/download">
+Download Version 10.37</a> (4.0 MB) -
+<a href="history.html">Dec. 19, 2016</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.36.zip/download">
- exiftool-10.36.zip</a> (5.8 MB)</b></td></tr></table></blockquote>
+<a href="http://sourceforge.net/projects/exiftool/files/exiftool-10.37.zip/download">
+ exiftool-10.37.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.36.dmg</a> (2.6 MB)</b></td></tr></table></blockquote>
+ ExifTool-10.37.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
@@ -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">Nov. 24, 2016</a> (<a href="http://owl.phy.queensu.ca/~phil/exiftool/rss.xml">RSS feed</a>)</li>
+<li><a href="history.html">Dec. 19, 2016</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>
diff --git a/html/install.html b/html/install.html
index 8a790f7d..7c098416 100644
--- a/html/install.html
+++ b/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.36.zip</code>".)</span></li>
+<br><span class=lt>(The file you download will have a name like "<code>exiftool-10.37.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.36.zip</code>" to open
+<br><span class=lt>(Double-click on "<code>exiftool-10.37.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.36.tar.gz</code>".)</span></li>
+<br><span class=lt>(The file you download will have a name like "<code>Image-ExifTool-10.37.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.36.dmg</code>".)</span></li>
+<br><span class=lt>(The file you download will have a name like "<code>ExifTool-10.37.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.36.tar.gz</code>".)</span></li>
+<br><span class=lt>(The file you download will have a name like "<code>Image-ExifTool-10.37.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.36.tar.gz
- cd Image-ExifTool-10.36
+ tar -xzf Image-ExifTool-10.37.tar.gz
+ cd Image-ExifTool-10.37
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.36.pkg" can't be opened because it is from an
+<blockquote class=red>"ExifTool-10.37.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.36.tar.gz</code>".)</span></li>
+<br><span class=lt>(The file you download will have a name like "<code>Image-ExifTool-10.37.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.36.tar.gz | tar -xf -
- cd Image-ExifTool-10.36
+ gzip -dc Image-ExifTool-10.37.tar.gz | tar -xf -
+ cd Image-ExifTool-10.37
</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>
diff --git a/html/under.html b/html/under.html
index c36d30a3..b6a4539f 100644
--- a/html/under.html
+++ b/html/under.html
@@ -58,9 +58,12 @@ translate numbers into words for better readability. The <code>-lang</code>
<code>-c</code> and <code>-d</code> (CoordFormat and DateFormat) options specify
this formatting for GPS coordinates and date/time values.</li></ol>
-<ol start=2><li>The "<b>ValueConv</b>" value is a numerical value, suitable for
-use in calculations. Typically, this value is converted to standard units (eg.
-degrees, meters, or seconds) to make calculations simpler. This value is
+<ol start=2><li>For numerical values, the "<b>ValueConv</b>" value is a
+machine-readable value suitable for use in calculations, typically converted to
+standard units (eg. degrees, meters, or seconds). For date/time values the
+standard EXIF date/time format is used ("YYYY:mm:dd HH:MM:SS" plus decimal
+seconds and time zone of they exist). For tags which are a closed choice of
+string, this is the stored value of the string. The ValueConv value is
returned for all tags when the <code>-n</code> option is used, or for individual
tags by suffixing the tag name with a <code>#</code> character.</li></ol>
@@ -82,13 +85,19 @@ gives the format of this binary data for writable tags.</li></ol>
<blockquote><table class=norm>
<tr><th>Tag</th><th>3.&nbsp;PrintConv</th><th>2.&nbsp;ValueConv</th><th>1.&nbsp;Raw</th><th>0.&nbsp;Binary</th></tr>
-<tr align='center'><td>Orientation</td><td>Horizontal (normal)</td><td>1</td><td>1</td><td><pre>00 01</pre></td></tr>
-<tr align='center'><td>GPSLatitude</td><td>45 deg 20' 11.00"</td><td>45.3363888888889</td><td>45 20 11<br>(45/1 20/1 11/1)</td>
+<tr align='center'><td>EXIF:Orientation</td><td>Horizontal (normal)</td><td>1</td><td>1</td><td><pre>00 01</pre></td></tr>
+<tr align='center'><td>EXIF:GPSLatitude</td><td>45 deg 20' 11.00"</td><td>45.3363888888889</td><td>45 20 11<br>(45/1 20/1 11/1)</td>
<td><pre>00 00 00 2d 00 00 00 01<br>00 00 00 14 00 00 00 01<br>00 00 00 0b 00 00 00 01</pre></td></tr>
-<tr align='center'><td>ExposureTime</td><td>1/30</td><td>0.03333333333</td><td>0.03333333333<br>(1/30)</td>
+<tr align='center'><td>XMP:GPSLatitude</td><td>45 deg 20' 11.00"</td><td>45.3363888888889</td><td>45,20.183333N</td>
+ <td>"45,20.183333N"</td></tr>
+<tr align='center'><td>EXIF:ExposureTime</td><td>1/30</td><td>0.03333333333</td><td>0.03333333333<br>(1/30)</td>
<td><pre>00 00 00 01 00 00 00 1e</pre></td></tr>
-<tr align='center'><td>ShutterSpeedValue</td><td>1/30</td><td>0.0333333334629176</td><td>4.90689059<br>(19868/4049)</td>
+<tr align='center'><td>EXIF:ShutterSpeedValue</td><td>1/30</td><td>0.0333333334629176</td><td>4.90689059<br>(19868/4049)</td>
<td><pre>00 00 4d 9c 00 00 0f d1</pre></td></tr>
+<tr align='center'><td>EXIF:ModifyDate</td><td>(set by <code>-d</code> option)</td><td>2016:11:25 11:56:39</td><td>2016:11:25 11:56:39</td>
+ <td>"2016:11:25 11:56:39\0"</td></tr>
+<tr align='center'><td>XMP:ModifyDate</td><td>(set by <code>-d</code> option)</td><td>2016:11:25 11:56:39.00-05:00</td><td>2016-11-25T11:56:39.00-05:00</td>
+ <td>"2016-11-25T11:56:39.00-05:00"</td></tr>
</table></blockquote>
<a name="philophies"></a>
@@ -122,7 +131,7 @@ which have helped to influence the overall development:</p>
<hr>
<i>Created Jun. 24, 2009</i><br>
-<i>Last revised Dec. 24, 2013</i>
+<i>Last revised Nov. 25, 2016</i>
<p class='lf'><a href="index.html">&lt;-- Back to ExifTool home page</a></p>
</body>
</html>
diff --git a/lib/Image/ExifTool.pm b/lib/Image/ExifTool.pm
index 5aa20003..0b3ccf85 100644
--- a/lib/Image/ExifTool.pm
+++ b/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.36';
+$VERSION = '10.37';
$RELEASE = '';
@ISA = qw(Exporter);
%EXPORT_TAGS = (
@@ -129,14 +129,14 @@ sub ReadValue($$$$$;$);
# unless tweaked in BuildTagLookup::GetTableOrder().
@loadAllTables = qw(
PhotoMechanic Exif GeoTiff CanonRaw KyoceraRaw Lytro MinoltaRaw PanasonicRaw
- SigmaRaw JPEG GIMP Jpeg2000 GIF BMP BMP::OS2 BPG BPG::Extensions PICT PNG
- MNG FLIF DjVu DPX OpenEXR MIFF PGF PSP PhotoCD Radiance PDF PostScript
- Photoshop::Header Photoshop::Layers Photoshop::ImageData FujiFilm::RAF
- FujiFilm::IFD Samsung::Trailer Sony::SRF2 Sony::SR2SubIFD Sony::PMP ITC ID3
- FLAC Ogg Vorbis APE APE::NewHeader APE::OldHeader Audible MPC MPEG::Audio
- MPEG::Video MPEG::Xing M2TS QuickTime QuickTime::ImageFile Matroska MOI MXF
- DV Flash Flash::FLV Real::Media Real::Audio Real::Metafile RIFF AIFF ASF
- DICOM MIE HTML XMP::SVG Palm Palm::MOBI Palm::EXTH Torrent EXE
+ SigmaRaw JPEG GIMP Jpeg2000 GIF BMP BMP::OS2 BMP::Extra BPG BPG::Extensions
+ PICT PNG MNG FLIF DjVu DPX OpenEXR MIFF PGF PSP PhotoCD Radiance PDF
+ PostScript Photoshop::Header Photoshop::Layers Photoshop::ImageData
+ FujiFilm::RAF FujiFilm::IFD Samsung::Trailer Sony::SRF2 Sony::SR2SubIFD
+ Sony::PMP ITC ID3 FLAC Ogg Vorbis APE APE::NewHeader APE::OldHeader Audible
+ MPC MPEG::Audio MPEG::Video MPEG::Xing M2TS QuickTime QuickTime::ImageFile
+ Matroska MOI MXF DV Flash Flash::FLV Real::Media Real::Audio Real::Metafile
+ RIFF AIFF ASF DICOM MIE HTML XMP::SVG Palm Palm::MOBI Palm::EXTH Torrent EXE
EXE::PEVersion EXE::PEString EXE::MachO EXE::PEF EXE::ELF EXE::AR EXE::CHM
LNK Font VCard VCard::VCalendar RSRC Rawzor ZIP ZIP::GZIP ZIP::RAR RTF OOXML
iWork ISO FLIR::AFF FLIR::FPF
diff --git a/lib/Image/ExifTool.pod b/lib/Image/ExifTool.pod
index cfc3d847..d077d667 100644
--- a/lib/Image/ExifTool.pod
+++ b/lib/Image/ExifTool.pod
@@ -1032,6 +1032,11 @@ created in the destination file as required to store the specified
information. May be called repeatedly to write the same information to
additional files without the need to call L</SetNewValue> again.
+Note that it is NOT necessary to call L</ExtractInfo> or L</ImageInfo>
+before L</WriteInfo>. L</WriteInfo> changes only metadata specified by
+previous calls to L</SetNewValue>.
+
+
# add information to a source file, writing output to new file
$exifTool->WriteInfo($srcfile, $dstfile);
diff --git a/lib/Image/ExifTool/BMP.pm b/lib/Image/ExifTool/BMP.pm
index cfe46401..39488b96 100644
--- a/lib/Image/ExifTool/BMP.pm
+++ b/lib/Image/ExifTool/BMP.pm
@@ -7,6 +7,7 @@
#
# References: 1) http://www.fortunecity.com/skyscraper/windows/364/bmpffrmt.html
# 2) http://www.fourcc.org/rgb.php
+# 3) https://msdn.microsoft.com/en-us/library/dd183381(v=vs.85).aspx
#------------------------------------------------------------------------------
package Image::ExifTool::BMP;
@@ -15,7 +16,21 @@ use strict;
use vars qw($VERSION);
use Image::ExifTool qw(:DataAccess :Utils);
-$VERSION = '1.08';
+$VERSION = '1.09';
+
+# conversions for fixed-point 2.30 format values
+my %fixed2_30 = (
+ ValueConv => q{
+ my @a = split ' ', $val;
+ $_ /= 0x40000000 foreach @a;
+ "@a";
+ },
+ PrintConv => q{
+ my @a = split ' ', $val;
+ $_ = sprintf('%.6f', $_) foreach @a;
+ "@a";
+ },
+);
# BMP chunks
%Image::ExifTool::BMP::Main = (
@@ -25,13 +40,21 @@ $VERSION = '1.08';
There really isn't much meta information in a BMP file as such, just a bit
of image related information.
},
- # 0 => size of bitmap structure:
- # 12 bytes => 'OS/2 V1',
- # 40 bytes => 'Windows V3',
- # 64 bytes => 'OS/2 V2',
- # 68 bytes => some bitmap structure in AVI videos
- # 108 bytes => 'Windows V4',
- # 124 bytes => 'Windows V5',
+ 0 => {
+ Name => 'BMPVersion',
+ Format => 'int32u',
+ Notes => q{
+ this is actually the size of the BMP header, but used to determine the BMP
+ version
+ },
+ RawConv => '$$self{BMPVersion} = $val',
+ PrintConv => {
+ 40 => 'Windows V3',
+ 68 => 'AVI BMP structure?', #PH (seen in AVI movies from some Casio and Nikon cameras)
+ 108 => 'Windows V4',
+ 124 => 'Windows V5',
+ },
+ },
4 => {
Name => 'ImageWidth',
Format => 'int32u',
@@ -44,6 +67,7 @@ $VERSION = '1.08';
12 => {
Name => 'Planes',
Format => 'int16u',
+ # values: 0,1,4,8,16,24,32
},
14 => {
Name => 'BitDepth',
@@ -52,6 +76,7 @@ $VERSION = '1.08';
16 => {
Name => 'Compression',
Format => 'int32u',
+ RawConv => '$$self{BMPCompression} = $val',
# (formatted as string[4] for some values in AVI images)
ValueConv => '$val > 256 ? unpack("A4",pack("V",$val)) : $val',
PrintConv => {
@@ -73,6 +98,7 @@ $VERSION = '1.08';
20 => {
Name => 'ImageLength',
Format => 'int32u',
+ RawConv => '$$self{BMPImageLength} = $val',
},
24 => {
Name => 'PixelsPerMeterX',
@@ -90,8 +116,99 @@ $VERSION = '1.08';
36 => {
Name => 'NumImportantColors',
Format => 'int32u',
+ Hook => '$varSize += $size if $$self{BMPVersion} == 68', # (the rest is invalid for AVI BMP's)
PrintConv => '$val ? $val : "All"',
},
+ 40 => {
+ Name => 'RedMask',
+ Format => 'int32u',
+ PrintConv => 'sprintf("0x%.8x",$val)',
+ },
+ 44 => {
+ Name => 'GreenMask',
+ Format => 'int32u',
+ PrintConv => 'sprintf("0x%.8x",$val)',
+ },
+ 48 => {
+ Name => 'BlueMask',
+ Format => 'int32u',
+ PrintConv => 'sprintf("0x%.8x",$val)',
+ },
+ 52 => {
+ Name => 'AlphaMask',
+ Format => 'int32u',
+ PrintConv => 'sprintf("0x%.8x",$val)',
+ },
+ 56 => {
+ Name => 'ColorSpace',
+ Format => 'undef[4]',
+ RawConv => '$$self{BMPColorSpace} = $val =~ /\0/ ? Get32u(\$val, 0) : pack("N",unpack("V",$val))',
+ PrintConv => {
+ 0 => 'Calibrated RGB',
+ 1 => 'Device RGB',
+ 2 => 'Device CMYK',
+ LINK => 'Linked Color Profile',
+ MBED => 'Embedded Color Profile',
+ sRGB => 'sRGB',
+ 'Win ' => 'Windows Color Space',
+ },
+ },
+ 60 => {
+ Name => 'RedEndpoint',
+ Condition => '$$self{BMPColorSpace} eq "0"',
+ Format => 'int32u[3]',
+ %fixed2_30,
+ },
+ 72 => {
+ Name => 'GreenEndpoint',
+ Condition => '$$self{BMPColorSpace} eq "0"',
+ Format => 'int32u[3]',
+ %fixed2_30,
+ },
+ 84 => {
+ Name => 'BlueEndpoint',
+ Condition => '$$self{BMPColorSpace} eq "0"',
+ Format => 'int32u[3]',
+ %fixed2_30,
+ },
+ 96 => {
+ Name => 'GammaRed',
+ Condition => '$$self{BMPColorSpace} eq "0"',
+ Format => 'fixed32u',
+ },
+ 100 => {
+ Name => 'GammaGreen',
+ Condition => '$$self{BMPColorSpace} eq "0"',
+ Format => 'fixed32u',
+ },
+ 104 => {
+ Name => 'GammaBlue',
+ Condition => '$$self{BMPColorSpace} eq "0"',
+ Format => 'fixed32u',
+ },
+ 108 => {
+ Name => 'RenderingIntent',
+ Format => 'int32u',
+ PrintConv => {
+ 1 => 'Graphic (LCS_GM_BUSINESS)',
+ 2 => 'Proof (LCS_GM_GRAPHICS)',
+ 4 => 'Picture (LCS_GM_IMAGES)',
+ 8 => 'Absolute Colorimetric (LCS_GM_ABS_COLORIMETRIC)',
+ },
+ },
+ 112 => {
+ Name => 'ProfileDataOffset',
+ Condition => '$$self{BMPColorSpace} eq "LINK" or $$self{BMPColorSpace} eq "MBED"',
+ Format => 'int32u',
+ RawConv => '$$self{BMPProfileOffset} = $val',
+ },
+ 116 => {
+ Name => 'ProfileSize',
+ Condition => '$$self{BMPColorSpace} eq "LINK" or $$self{BMPColorSpace} eq "MBED"',
+ Format => 'int32u',
+ RawConv => '$$self{BMPProfileSize} = $val',
+ },
+ # 120 - reserved
);
# OS/2 12-byte bitmap header (ref http://www.fileformat.info/format/bmp/egff.htm)
@@ -99,13 +216,37 @@ $VERSION = '1.08';
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Image' },
NOTES => 'Information extracted from OS/2-format BMP images.',
- # 0 => size of bitmap structure (12)
+ 0 => {
+ Name => 'BMPVersion',
+ Format => 'int32u',
+ Notes => 'again, the header size is used to determine the BMP version',
+ PrintConv => {
+ 12 => 'OS/2 V1',
+ 64 => 'OS/2 V2',
+ },
+ },
4 => { Name => 'ImageWidth', Format => 'int16u' },
6 => { Name => 'ImageHeight', Format => 'int16u' },
8 => { Name => 'Planes', Format => 'int16u' },
10 => { Name => 'BitDepth', Format => 'int16u' },
);
+%Image::ExifTool::BMP::Extra = (
+ GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Image' },
+ NOTES => 'Extra information extracted from some BMP images.',
+ VARS => { NO_ID => 1 },
+ LinkedProfileName => { },
+ ICC_Profile => { SubDirectory => { TagTable => 'Image::ExifTool::ICC_Profile::Main' } },
+ EmbeddedJPG => {
+ Groups => { 2 => 'Preview' },
+ Binary => 1,
+ },
+ EmbeddedPNG => {
+ Groups => { 2 => 'Preview' },
+ Binary => 1,
+ },
+);
+
#------------------------------------------------------------------------------
# Extract EXIF information from a BMP image
# Inputs: 0) ExifTool object reference, 1) dirInfo reference
@@ -121,20 +262,57 @@ sub ProcessBMP($$)
return 0 unless $buff =~ /^BM/;
SetByteOrder('II');
my $len = Get32u(\$buff, 14);
- return 0 unless $len == 12 or $len >= 40;
+ # len = v1:12, v4:108, v5:124
+ return 0 unless $len == 12 or $len == 16 or ($len >= 40 and $len < 1000000);
return 0 unless $raf->Seek(-4, 1) and $raf->Read($buff, $len) == $len;
$et->SetFileType(); # set the FileType tag
+#
+# process the BMP header
+#
my %dirInfo = (
DataPt => \$buff,
DirStart => 0,
DirLen => length($buff),
);
- if ($len == 12) { # old OS/2 format BMP
+ if ($len == 12 or $len == 16 or $len == 64) { # old OS/2 format BMP
$tagTablePtr = GetTagTable('Image::ExifTool::BMP::OS2');
} else {
$tagTablePtr = GetTagTable('Image::ExifTool::BMP::Main');
}
$et->ProcessDirectory(\%dirInfo, $tagTablePtr);
+#
+# extract any embedded images
+#
+ my $extraTable = GetTagTable('Image::ExifTool::BMP::Extra');
+ if ($$et{BMPCompression} and $$et{BMPImageLength} and
+ ($$et{BMPCompression} == 4 or $$et{BMPCompression} == 5))
+ {
+ my $tag = $$et{BMPCompression} == 4 ? 'EmbeddedJPG' : 'EmbeddedPNG';
+ my $val = $et->ExtractBinary($raf->Tell(), $$et{BMPImageLength}, $tag);
+ if ($val) {
+ $et->HandleTag($extraTable, $tag, $val);
+ }
+ }
+#
+# process profile data if it exists (v5 header only)
+#
+ if ($len == 124 and $$et{BMPProfileOffset}) {
+ my $pos = $$et{BMPProfileOffset} + 14; # (note the 14-byte shift!)
+ my $size = $$et{BMPProfileSize};
+ if ($raf->Seek($pos, 0) and $raf->Read($buff, $size) == $size) {
+ my $tag;
+ if ($$et{BMPColorSpace} eq 'LINK') {
+ $buff =~ s/\0+$//; # remove null terminator(s)
+ $buff = $et->Decode($buff, 'Latin'); # convert from Latin
+ $tag = 'LinkedProfileName';
+ } else {
+ $tag = 'ICC_Profile';
+ }
+ $et->HandleTag($extraTable, $tag => $buff, Size => $size, DataPos => $pos);
+ } else {
+ $et->Warn('Error loading profile data', 1);
+ }
+ }
return 1;
}
@@ -168,6 +346,10 @@ under the same terms as Perl itself.
=item L<http://www.fortunecity.com/skyscraper/windows/364/bmpffrmt.html>
+=item L<http://www.fourcc.org/rgb.php>
+
+=item L<https://msdn.microsoft.com/en-us/library/dd183381(v=vs.85).aspx>
+
=back
=head1 SEE ALSO
diff --git a/lib/Image/ExifTool/FujiFilm.pm b/lib/Image/ExifTool/FujiFilm.pm
index ca9579e1..669a9d5b 100644
--- a/lib/Image/ExifTool/FujiFilm.pm
+++ b/lib/Image/ExifTool/FujiFilm.pm
@@ -16,6 +16,7 @@
# 7) Kai Lappalainen private communication
# 8) http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,5223.0.html
# 9) Zilvinas Brobliauskas private communication
+# 10) Albert Shan private communication
# IB) Iliah Borg private communication (LibRaw)
# JD) Jens Duttke private communication
#------------------------------------------------------------------------------
@@ -27,7 +28,7 @@ use vars qw($VERSION);
use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::Exif;
-$VERSION = '1.54';
+$VERSION = '1.55';
sub ProcessFujiDir($$$);
sub ProcessFaceRec($$$);
@@ -219,6 +220,7 @@ my %faceCategories = (
0x1010 => {
Name => 'FujiFlashMode',
Writable => 'int16u',
+ PrintHex => 1,
PrintConv => {
0 => 'Auto',
1 => 'On',
@@ -226,6 +228,9 @@ my %faceCategories = (
3 => 'Red-eye reduction',
4 => 'External', #JD
16 => 'Commander',
+ 0xa920 => '1st Curtain (front)', #10 (EF-X500 flash)
+ 0xc920 => '2nd Curtain (rear)', #10
+ 0xe920 => 'High Speed Sync (HSS)', #10
},
},
0x1011 => {
diff --git a/lib/Image/ExifTool/Photoshop.pm b/lib/Image/ExifTool/Photoshop.pm
index 1cbf3f13..0d39d734 100644
--- a/lib/Image/ExifTool/Photoshop.pm
+++ b/lib/Image/ExifTool/Photoshop.pm
@@ -28,7 +28,7 @@ use strict;
use vars qw($VERSION $AUTOLOAD $iptcDigestInfo);
use Image::ExifTool qw(:DataAccess :Utils);
-$VERSION = '1.50';
+$VERSION = '1.51';
sub ProcessPhotoshop($$$);
sub WritePhotoshop($$$);
@@ -617,17 +617,20 @@ sub ProcessLayers($$$)
$raf->Read($data, $n) == $n or return 0;
my $tot = $psb ? Get64u(\$data, 0) : Get32u(\$data, 0); # length of layer and mask info
my $len = $psb ? Get64u(\$data, $psiz) : Get32u(\$data, $psiz); # length of layer info section
- $et->VerboseDir('Layers', 0, $len);
- my $num = Get16u(\$data, $psiz * 2);
+ my $num = Get16s(\$data, $psiz * 2);
$num = -$num if $num < 0; # (first channel is transparency data if negative)
$et->HandleTag($tagTablePtr, _xcnt => $num); # LayerCount
return 0 if $len > 100000000; # set a reasonable limit on maximum size
+ $et->VerboseDir('Layers', $num, $len);
my $dataPos = $raf->Tell();
# read the layer information data
$raf->Read($data, $len) == $len or return 0;
+ my $oldIndent = $$et{INDENT};
+ $$et{INDENT} .= '| ';
my $pos = 0;
for ($i=0; $i<$num; ++$i) {
+ $et->VPrint(0, $oldIndent.'+ [Layer '.($i+1)." of $num]\n");
last if $pos + 18 > $len;
# save the layer rectangle
$et->HandleTag($tagTablePtr, _xrct => join(' ',ReadValue(\$data, $pos, 'int32u', 4, 16)));
@@ -646,7 +649,7 @@ sub ProcessLayers($$$)
$n = Get8u(\$data, $pos); # get length of layer name
last if $pos + 1 + $n > $len;
$et->HandleTag($tagTablePtr, _xnam => substr($data, $pos+1, $n)); # layer name
- $n = ($n + 3) & 0xfffffffc;
+ $n = ($n + 4) & 0xfffffffc; # +1 for length byte then pad to multiple of 4 bytes
$pos += $n;
# process additional layer info
while ($pos + 12 <= $nxt) {
@@ -681,6 +684,7 @@ sub ProcessLayers($$$)
}
$pos = $nxt;
}
+ $$et{INDENT} = $oldIndent;
# seek to the end of this section
return 0 unless $raf->Seek($dataPos - 2 - $psiz + $tot, 0);
return 1; # success!
@@ -858,6 +862,8 @@ sub ProcessPSD($$)
# read layer and mask information section
$dirInfo{RAF} = $raf;
$tagTablePtr = GetTagTable('Image::ExifTool::Photoshop::Layers');
+ my $oldIndent = $$et{INDENT};
+ $$et{INDENT} .= '| ';
if (ProcessLayers($et, \%dirInfo, $tagTablePtr) and
# read compression mode from image data section
$raf->Read($data,2) == 2)
@@ -869,6 +875,7 @@ sub ProcessPSD($$)
$tagTablePtr = GetTagTable('Image::ExifTool::Photoshop::ImageData');
$et->ProcessDirectory(\%dirInfo, $tagTablePtr);
}
+ $$et{INDENT} = $oldIndent;
# process trailers if they exist
my $trailInfo = Image::ExifTool::IdentifyTrailer($raf);
$et->ProcessTrailers($trailInfo) if $trailInfo;
diff --git a/lib/Image/ExifTool/QuickTime.pm b/lib/Image/ExifTool/QuickTime.pm
index 6fddef19..bc1197d3 100644
--- a/lib/Image/ExifTool/QuickTime.pm
+++ b/lib/Image/ExifTool/QuickTime.pm
@@ -42,7 +42,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::Exif;
use Image::ExifTool::GPS;
-$VERSION = '1.98';
+$VERSION = '1.99';
sub FixWrongFormat($);
sub ProcessMOV($$;$);
@@ -6617,11 +6617,19 @@ sub ProcessMOV($$;$)
# fill in missing defaults for alternate language tags
# (the first language is taken as the default)
if ($doDefaultLang and $$et{QTLang}) {
+QTLang:
foreach $tag (@{$$et{QTLang}}) {
next unless defined $$et{VALUE}{$tag};
my $langInfo = $$et{TAG_INFO}{$tag} or next;
my $tagInfo = $$langInfo{SrcTagInfo} or next;
- next if defined $$et{VALUE}{$$tagInfo{Name}};
+ my $infoHash = $$et{TAG_INFO};
+ my $name = $$tagInfo{Name};
+ # loop through all instances of this tag name and generate the default-language
+ # version only if we don't already have a QuickTime tag with this name
+ my ($i, $key, $found);
+ for ($i=0, $key=$name; $$infoHash{$key}; ++$i, $key="$name ($i)") {
+ next QTLang if $et->GetGroup($key, 0) eq 'QuickTime';
+ }
$et->FoundTag($tagInfo, $$et{VALUE}{$tag});
}
delete $$et{QTLang};
diff --git a/lib/Image/ExifTool/Sony.pm b/lib/Image/ExifTool/Sony.pm
index 407d05dc..0ca0ae29 100644
--- a/lib/Image/ExifTool/Sony.pm
+++ b/lib/Image/ExifTool/Sony.pm
@@ -31,7 +31,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
use Image::ExifTool::Exif;
use Image::ExifTool::Minolta;
-$VERSION = '2.48';
+$VERSION = '2.49';
sub ProcessSRF($$$);
sub ProcessSR2($$$);
@@ -136,8 +136,9 @@ my %sonyLensTypes2 = (
50493 => 'Sigma 17-70mm F2.8-4 DC MACRO OS HSM | C 013 + MC-11', #JR
50495 => 'Sigma 50-100mm F1.8 DC HSM | A 016 + MC-11', #JR
+ 50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
50993 => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB
- 50994 => 'Voigtlander HELIAR-HYPER WIDE 12mm F5.6 III Aspherical', #IB (LensType2 has this value, but unfortunately LensType3 is 50993 for this lens!)
+ 50994 => 'Voigtlander ULTRA WIDE-HELIAR 12mm F5.6 III', #IB
# lenses listed in the Sigma MC-11 list, but not yet seen:
# 504xx => 'Sigma 18-200mm F3.5-6.3 DC MACRO OS HSM | C 014 + MC-11',
@@ -7812,7 +7813,9 @@ my %pictureProfile2010 = (
# 1.40: SEL1635Z, SEL24240, SEL35F14Z, SELP28135G, Zeiss Loxia 35mm/50mm Ver.01, Zeiss Touit Ver.02
# 1.41: SELP18105G Ver.02
# 1.50: SEL28F20, SEL90M28G, Zeiss Batis 18mm/25mm/85mm, Zeiss Loxia 21mm, Zeiss Loxia 35mm/50mm Ver.02
- # 1.60: SEL85F14GM, SEL2470GM, SEL70200GM, SEL50F18F, SEL50F14Z, SEL50M28, SEL70300G, Sigma 30mm F1.4 DC DN, Sigma MC-11
+ # 1.60: SEL85F14GM, SEL2470GM, SEL70200GM, SEL50F18F, SEL50F14Z, SEL50M28, SEL70300G, Sigma 30mm F1.4 DC DN,
+ # Sigma MC-11, Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III
+ # 1.70: Voigtlander HELIAR-HYPER WIDE 10mm F5.6, ULTRA WIDE-HELIAR 12mm F5.6 III, Zeiss Loxia 85mm
},
0x0015 => {
Name => 'LensFirmwareVersion',
diff --git a/lib/Image/ExifTool/TagInfoXML.pm b/lib/Image/ExifTool/TagInfoXML.pm
index 13a6d207..6a42be1d 100644
--- a/lib/Image/ExifTool/TagInfoXML.pm
+++ b/lib/Image/ExifTool/TagInfoXML.pm
@@ -109,7 +109,7 @@ sub Write(;$$%)
$numbersFirst = -1 if $$table{VARS} and $$table{VARS}{ALPHA_FIRST};
my @keys = sort NumbersFirst TagTableKeys($table);
$numbersFirst = 1;
- # loop throug all tag ID's in this table
+ # loop through all tag ID's in this table
foreach $tagID (@keys) {
my @infoArray = GetTagInfoList($table, $tagID);
my $xmlID = Image::ExifTool::XMP::FullEscapeXML($tagID);
diff --git a/lib/Image/ExifTool/TagLookup.pm b/lib/Image/ExifTool/TagLookup.pm
index 85a15dfc..ce1bdf46 100644
--- a/lib/Image/ExifTool/TagLookup.pm
+++ b/lib/Image/ExifTool/TagLookup.pm
@@ -5460,6 +5460,7 @@ my %tagExists = (
'alphafiltering' => 1,
'alphaidentifiers' => 1,
'alphainterlace' => 1,
+ 'alphamask' => 1,
'alphaoffset' => 1,
'alphapreprocessing' => 1,
'alphasample' => 1,
@@ -5679,13 +5680,16 @@ my %tagExists = (
'blocksperframe' => 1,
'blocksperrow' => 1,
'blueadjust' => 1,
+ 'blueendpoint' => 1,
'bluegain' => 1,
+ 'bluemask' => 1,
'bluematrixcolumn' => 1,
'blueprimary' => 1,
'bluesample' => 1,
'bluetrc' => 1,
'bluex' => 1,
'bluey' => 1,
+ 'bmpversion' => 1,
'boardtemperature' => 1,
'bookname' => 1,
'booktitle' => 1,
@@ -6459,6 +6463,8 @@ my %tagExists = (
'embeddedimagename' => 1,
'embeddedimagetype' => 1,
'embeddedimagewidth' => 1,
+ 'embeddedjpg' => 1,
+ 'embeddedpng' => 1,
'embeddedvideofile' => 1,
'embeddedvideotype' => 1,
'emphasis' => 1,
@@ -6768,7 +6774,10 @@ my %tagExists = (
'gaindeadmapimageheight' => 1,
'gaindeadmapimagetype' => 1,
'gaindeadmapimagewidth' => 1,
+ 'gammablue' => 1,
+ 'gammagreen' => 1,
'gammainfo' => 1,
+ 'gammared' => 1,
'gamut' => 1,
'gapless' => 1,
'gdalmetadata' => 1,
@@ -6838,7 +6847,9 @@ my %tagExists = (
'grayresponsecurve' => 1,
'graytrc' => 1,
'greenadjust' => 1,
+ 'greenendpoint' => 1,
'greengain' => 1,
+ 'greenmask' => 1,
'greenmatrixcolumn' => 1,
'greenprimary' => 1,
'greensample' => 1,
@@ -7271,6 +7282,7 @@ my %tagExists = (
'linearized' => 1,
'lineorder' => 1,
'lines' => 1,
+ 'linkedprofilename' => 1,
'linkerversion' => 1,
'linkinfo' => 1,
'linkstatus' => 1,
@@ -7998,6 +8010,7 @@ my %tagExists = (
'profilecmmtype' => 1,
'profileconnectionspace' => 1,
'profilecreator' => 1,
+ 'profiledataoffset' => 1,
'profiledatetime' => 1,
'profiledescription' => 1,
'profiledescriptionml' => 1,
@@ -8008,6 +8021,7 @@ my %tagExists = (
'profiles' => 1,
'profilesequencedesc' => 1,
'profilesequenceidentifier' => 1,
+ 'profilesize' => 1,
'profiletype' => 1,
'profileversion' => 1,
'progid' => 1,
@@ -8166,8 +8180,10 @@ my %tagExists = (
'rectangleofinterest' => 1,
'redadjust' => 1,
'redblueflatfield' => 1,
+ 'redendpoint' => 1,
'redeyedata' => 1,
'redgain' => 1,
+ 'redmask' => 1,
'redmatrixcolumn' => 1,
'redprimary' => 1,
'redsample' => 1,
diff --git a/lib/Image/ExifTool/TagNames.pod b/lib/Image/ExifTool/TagNames.pod
index a7ff25b7..da003dfe 100644
--- a/lib/Image/ExifTool/TagNames.pod
+++ b/lib/Image/ExifTool/TagNames.pod
@@ -19636,6 +19636,7 @@ of image related information.
Index1 Tag Name Writable
------ -------- --------
+ 0 BMPVersion N
4 ImageWidth N
8 ImageHeight N
12 Planes N
@@ -19646,6 +19647,20 @@ of image related information.
28 PixelsPerMeterY N
32 NumColors N
36 NumImportantColors N
+ 40 RedMask N
+ 44 GreenMask N
+ 48 BlueMask N
+ 52 AlphaMask N
+ 56 ColorSpace N
+ 60 RedEndpoint N
+ 72 GreenEndpoint N
+ 84 BlueEndpoint N
+ 96 GammaRed N
+ 100 GammaGreen N
+ 104 GammaBlue N
+ 108 RenderingIntent N
+ 112 ProfileDataOffset N
+ 116 ProfileSize N
=head3 BMP OS2 Tags
@@ -19653,11 +19668,23 @@ Information extracted from OS/2-format BMP images.
Index1 Tag Name Writable
------ -------- --------
+ 0 BMPVersion N
4 ImageWidth N
6 ImageHeight N
8 Planes N
10 BitDepth N
+=head3 BMP Extra Tags
+
+Extra information extracted from some BMP images.
+
+ Tag Name Writable
+ -------- --------
+ EmbeddedJPG N
+ EmbeddedPNG N
+ ICC_Profile ICC_Profile
+ LinkedProfileName N
+
=head2 BPG Tags
The information listed below is extracted from BPG (Better Portable
diff --git a/perl-Image-ExifTool.spec b/perl-Image-ExifTool.spec
index d38fdd4d..18e7668c 100644
--- a/perl-Image-ExifTool.spec
+++ b/perl-Image-ExifTool.spec
@@ -1,6 +1,6 @@
Summary: perl module for image data extraction
Name: perl-Image-ExifTool
-Version: 10.36
+Version: 10.37
Release: 1
License: Artistic/GPL
Group: Development/Libraries/Perl
diff --git a/t/BMP_2.out b/t/BMP_2.out
index af4ad1f6..8752d730 100644
--- a/t/BMP_2.out
+++ b/t/BMP_2.out
@@ -1,14 +1,15 @@
-[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93
+[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.37
[File, System, Image] FileName - File Name: BMP.bmp
[File, System, Image] Directory - Directory: t/images
[File, System, Image] FileSize - File Size: 1142 bytes
[File, System, Time] FileModifyDate - File Modification Date/Time: 2005:11:14 14:47:21-05:00
-[File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00
-[File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:02-05:00
+[File, System, Time] FileAccessDate - File Access Date/Time: 2016:12:07 08:45:27-05:00
+[File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2016:11:24 09:55:16-05:00
[File, System, Image] FilePermissions - File Permissions: rw-r--r--
[File, File, Image] FileType - File Type: BMP
[File, File, Image] FileTypeExtension - File Type Extension: bmp
[File, File, Image] MIMEType - MIME Type: image/bmp
+[File, File, Image] 0 - BMP Version: Windows V3
[File, File, Image] 4 - Image Width: 8
[File, File, Image] 8 - Image Height: 8
[File, File, Image] 12 - Planes: 1
diff --git a/t/Pentax_4.out b/t/Pentax_4.out
index 645e3d58..ff214178 100644
--- a/t/Pentax_4.out
+++ b/t/Pentax_4.out
@@ -1,14 +1,15 @@
-[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.02
+[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.37
[File, System, Image] FileName - File Name: Pentax.avi
[File, System, Image] Directory - Directory: t/images
[File, System, Image] FileSize - File Size: 1672 bytes
[File, System, Time] FileModifyDate - File Modification Date/Time: 2009:10:30 08:10:17-04:00
-[File, System, Time] FileAccessDate - File Access Date/Time: 2015:09:03 13:07:16-04:00
-[File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:09:03 13:07:16-04:00
+[File, System, Time] FileAccessDate - File Access Date/Time: 2016:12:07 08:45:27-05:00
+[File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2016:11:24 09:55:16-05:00
[File, System, Image] FilePermissions - File Permissions: rw-r--r--
[File, File, Image] FileType - File Type: AVI
[File, File, Image] FileTypeExtension - File Type Extension: avi
[File, File, Image] MIMEType - MIME Type: video/x-msvideo
+[File, File, Image] 0 - BMP Version: Windows V3
[File, File, Image] 4 - Image Width: 1280
[File, File, Image] 8 - Image Height: 720
[File, File, Image] 12 - Planes: 1
diff --git a/t/RIFF_3.out b/t/RIFF_3.out
index 7e2a8f55..78e0f1ae 100644
--- a/t/RIFF_3.out
+++ b/t/RIFF_3.out
@@ -1,14 +1,15 @@
-[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 9.93
+[ExifTool, ExifTool, ExifTool] ExifToolVersion - ExifTool Version Number: 10.37
[File, System, Image] FileName - File Name: RIFF.avi
[File, System, Image] Directory - Directory: t/images
[File, System, Image] FileSize - File Size: 1262 bytes
[File, System, Time] FileModifyDate - File Modification Date/Time: 2008:09:12 12:04:10-04:00
-[File, System, Time] FileAccessDate - File Access Date/Time: 2015:04:18 07:17:35-04:00
-[File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2015:03:07 15:31:28-05:00
+[File, System, Time] FileAccessDate - File Access Date/Time: 2016:12:07 08:45:30-05:00
+[File, System, Time] FileInodeChangeDate - File Inode Change Date/Time: 2016:11:30 08:15:11-05:00
[File, System, Image] FilePermissions - File Permissions: rw-r--r--
[File, File, Image] FileType - File Type: AVI
[File, File, Image] FileTypeExtension - File Type Extension: avi
[File, File, Image] MIMEType - MIME Type: video/x-msvideo
+[File, File, Image] 0 - BMP Version: Windows V3
[File, File, Image] 4 - Image Width: 320
[File, File, Image] 8 - Image Height: 240
[File, File, Image] 12 - Planes: 1
diff --git a/windows_exiftool b/windows_exiftool
index 6746fa3e..31e3e31d 100755
--- a/windows_exiftool
+++ b/windows_exiftool
@@ -12,7 +12,7 @@
use strict;
require 5.004;
-my $version = '10.36';
+my $version = '10.37';
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
my $exeDir;
@@ -1202,7 +1202,7 @@ for (;;) {
} elsif (/^([-\w]+:)*(geotag|geotime)\b/i) {
if (lc $2 eq 'geotag') {
if ((not defined $addGeotime or $addGeotime) and length $val) {
- $addGeotime = ($1 || '') . 'Geotime<DateTimeOriginal';
+ $addGeotime = ($1 || '') . 'Geotime<DateTimeOriginal#';
}
} else {
$addGeotime = '';
@@ -1229,10 +1229,12 @@ for (;;) {
$addGeotime = '';
}
}
- } elsif (/^-(.*)/) {
- push @exclude, $1;
} else {
- push @tags, $_;
+ my $lst = s/^-// ? \@exclude : \@tags;
+ unless (/^([-\w*]+:)*([-\w*?]+)#?$/) {
+ Warn(qq(Invalid TAG name: $_\n));
+ }
+ push @$lst, $_; # (push everything for backward compatibility)
}
}
} else {
@@ -3538,7 +3540,7 @@ sub AddPrintFormat($)
#------------------------------------------------------------------------------
# Get suggested file extension based on tag value for binary output
-# Inputs: 0) data ref
+# Inputs: 0) ExifTool ref, 1) data ref, 2) tag name
# Returns: file extension (lower case), or 'dat' if unknown
sub SuggestedExtension($$$)
{
@@ -3567,6 +3569,8 @@ sub SuggestedExtension($$$)
$ext = $ext ? lc($ext) : 'raw';
} elsif ($tag eq 'EXIF') {
$ext = 'exif';
+ } elsif ($tag eq 'ICC_Profile') {
+ $ext = 'icc';
} elsif ($$valPt =~ /^(MM\0\x2a|II\x2a\0)/) {
$ext = 'tiff';
} elsif ($$valPt !~ /^.{0,4096}\0/s) {
@@ -4869,7 +4873,7 @@ OPTIONS
produces output like this:
- -- Generated by ExifTool 10.36 --
+ -- Generated by ExifTool 10.37 --
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
@@ -5573,11 +5577,12 @@ OPTIONS
tag. After the -geotag option has been specified, the value of the
"Geotime" tag is written to define a date/time for the position
interpolation. If "Geotime" is not specified, the value is copied
- from "DateTimeOriginal". For example, the following two commands
- are equivalent:
+ from "DateTimeOriginal#" (the "#" is added to copy the unformatted
+ value, avoiding potential conflicts with the -d option). For
+ example, the following two commands are equivalent:
- exiftool -geotag track.log image.jpg
- exiftool -geotag "-Geotime<DateTimeOriginal" image.jpg
+ exiftool -geotag trk.log image.jpg
+ exiftool -geotag trk.log "-Geotime<DateTimeOriginal#" image.jpg
When the "Geotime" value is converted to UTC, the local system
timezone is assumed unless the date/time value contains a timezone.