129 lines
6.4 KiB
HTML
129 lines
6.4 KiB
HTML
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||
|
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
|
||
|
<html>
|
||
|
<head>
|
||
|
<title>Under the Hood</title>
|
||
|
<link rel=stylesheet type='text/css' href='style.css' title='Style'>
|
||
|
<style type="text/css">
|
||
|
<!--
|
||
|
pre { margin: 0 }
|
||
|
ol.index { margin: 0; padding: 0 0 0 2em }
|
||
|
-->
|
||
|
</style>
|
||
|
</head>
|
||
|
<body>
|
||
|
<div class='index'>
|
||
|
<a href="#overview">Overview</a>
|
||
|
<br><a href="#conversions">Value Conversions</a>
|
||
|
<br><a href="#philophies">Underlying Philosophies</a>
|
||
|
</div>
|
||
|
|
||
|
<h1 class='up'>"Under the Hood" of ExifTool</h1>
|
||
|
|
||
|
<p>This page is a work in progress, and will be used to explain some details
|
||
|
of ExifTool's inner workings.</p>
|
||
|
|
||
|
<a name="overview"></a>
|
||
|
<h2>Overview of ExifTool</h2>
|
||
|
|
||
|
<p>Below is a diagram showing the flow of information for the exiftool
|
||
|
application. Indicated outside the boxes on the diagram are some command-line
|
||
|
options associated with the various stages of processing. All of these options
|
||
|
are directly associated with options or function calls available via the API
|
||
|
(Application Programming Interface), with the exception of the output text
|
||
|
formatting which is handled at the application level.</p>
|
||
|
|
||
|
<center><img src="overview.png" alt="ExifTool Overview" width="680" height="460"></center>
|
||
|
|
||
|
<p>The information flow is separated into two distinct modes: 1)
|
||
|
<span class=blu>Reading or extracting information</span>, and 2)
|
||
|
<span class=red>Writing or editing</span>. The application runs in
|
||
|
<b class=blu>read</b> mode by default, but switches to <b class=red>write</b> mode
|
||
|
if a new value is assigned to any tag (via "<code>-TAG=</code>",
|
||
|
"<code>-tagsFromFile</code>", "<code>-geotag</code>", "<code>-csv=</code>" or
|
||
|
"<code>-json=</code>" on the command line).</p>
|
||
|
|
||
|
<a name="conversions"></a>
|
||
|
<h2>Value Conversions</h2>
|
||
|
<p>When ExifTool reads or writes the value of a tag, there are 3 separate
|
||
|
conversions applied to each value, resulting in 4 different levels for the value
|
||
|
of each tag. By default, users interact only with the human-readable
|
||
|
("<b>PrintConv</b>") value, but other levels are exposed through various exiftool
|
||
|
options:</p>
|
||
|
|
||
|
<ol start=3><li>The "<b>PrintConv</b>" value is the final human-readable value
|
||
|
which has been converted for display. Often, the "PrintConv" conversion will
|
||
|
translate numbers into words for better readability. The <code>-lang</code>
|
||
|
(Lang) option is used to specify the language for this conversion, and the
|
||
|
<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
|
||
|
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>
|
||
|
|
||
|
<ol start=1><li>The "<b>Raw</b>" value is the value after initial formatting is
|
||
|
applied to the binary data from the file. Most tags have no separate "ValueConv"
|
||
|
conversion, so for these tags the "Raw" value is the same as the "ValueConv"
|
||
|
value. This value may be seen by using the <code>-v</code> option.</li></ol>
|
||
|
|
||
|
<ol start=0><li>The "<b>Binary</b>" value is actual binary data stored in the
|
||
|
file. This data is displayed in hexadecimal form with the <code>-v3</code>
|
||
|
option, or by using the <code>-htmlDump</code> feature. Note that this value is
|
||
|
not related to the <code>-b</code> (<code>-binary</code>) option, which actually
|
||
|
returns the "ValueConv" value and is used for tags where this value can not be
|
||
|
presented in a simple text format. The Writable column in the
|
||
|
<a href="TagNames/index.html">Tag Name documentation</a>
|
||
|
gives the format of this binary data for writable tags.</li></ol>
|
||
|
|
||
|
<p>Below are some examples of these different values for a few tags:</p>
|
||
|
|
||
|
<blockquote><table class=norm>
|
||
|
<tr><th>Tag</th><th>3. PrintConv</th><th>2. ValueConv</th><th>1. Raw</th><th>0. 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>
|
||
|
<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>
|
||
|
<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>
|
||
|
<td><pre>00 00 4d 9c 00 00 0f d1</pre></td></tr>
|
||
|
</table></blockquote>
|
||
|
|
||
|
<a name="philophies"></a>
|
||
|
<h2>Underlying Philosophies</h2>
|
||
|
|
||
|
<p>You have the right to know about the metadata contained in your images. A main
|
||
|
goal of the Exiftool project is to make this information freely available, both to
|
||
|
the general public and as a resource for other developers.</p>
|
||
|
|
||
|
<p>In the design of exiftool, there have been a number of underlying philosophies
|
||
|
which have helped to influence the overall development:</p>
|
||
|
|
||
|
<ol>
|
||
|
<li>Make <a href="ExifTool.html">Image::ExifTool</a> as independent as possible
|
||
|
from other libraries to make it portable and easy to install. (Portable to
|
||
|
a wide range of systems and Perl versions.)</li>
|
||
|
<li>Keep the interface simple for simple tasks (sometimes at the expense of making
|
||
|
it more complicated for complex tasks).</li>
|
||
|
<li>The <a href="ExifTool.html#Methods">API functions</a> should be isolated from
|
||
|
the details of the metadata formats (otherwise the interface turns into a giant
|
||
|
hairball, like the metadata).</li>
|
||
|
<li>Maintain flexibility to allow users the freedom to do what they want.</li>
|
||
|
<li>Design the code to be efficient for batch processing, even if it increases the
|
||
|
initial overhead.</li>
|
||
|
<li>When writing files, remember 3 things: 1) data integrity, 2) data integrity, and
|
||
|
3) data integrity. If you can't do it right, don't do it at all.</li>
|
||
|
<li>If possible, recognize file types by their structure, not by their extension.</li>
|
||
|
<li>Maintain backward compatibility when making changes to the ExifTool API or
|
||
|
command line application.</li>
|
||
|
</ol>
|
||
|
|
||
|
<hr>
|
||
|
<i>Created Jun. 24, 2009</i><br>
|
||
|
<i>Last revised Dec. 24, 2013</i>
|
||
|
<p class='lf'><a href="index.html"><-- Back to ExifTool home page</a></p>
|
||
|
</body>
|
||
|
</html>
|