mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-19 16:03:14 +00:00
116 lines
5.5 KiB
HTML
116 lines
5.5 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) Reading or
|
|
extracting information, and 2) Writing or editing. The application runs in
|
|
<b>read</b> mode by default, but switches to <b>write</b> mode if a new value is
|
|
assigned to any tag (via "<code>-TAG=VALUE</code>", "<code>-tagsFromFile</code>"
|
|
or "<code>-geotag</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>
|
|
option is used to specify the language for this conversion.</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 (ie.
|
|
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.</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>In the design of exiftool, there have been a number of underlying philosophies
|
|
which have helped to influence the overall development:</p>
|
|
|
|
<ol>
|
|
<li>Keep Image::ExifTool 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>Maintain flexibility to allow users the freedom to do what they want.
|
|
<li>Design the code to be efficient for batch processing, even if it increases the
|
|
initial overhead.</li>
|
|
<li>For writing, 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>When processing, recognize file types by their structure, not by their extension
|
|
(if at all possible).</li>
|
|
<li>Maintain backward compatibility when making changes to the ExifTool API or
|
|
command line application.</li>
|
|
</ol>
|
|
|
|
<hr>
|
|
<i>Last revised Feb. 3, 2010</i>
|
|
<p class='lf'><a href="index.html"><-- Back to ExifTool home page</a></p>
|
|
</body>
|
|
</html>
|