Documentation cleanup

This commit is contained in:
Andreas Huggel 2006-11-21 16:51:04 +00:00
parent ba89716cd6
commit 5c7e414801
9 changed files with 68 additions and 54 deletions

View File

@ -1,7 +1,7 @@
<head>
<title>Exiv2 - Exif and Iptc metadata manipulation library and tools</title>
<title>Exiv2 - Exif and IPTC metadata library and tools</title>
<meta name="Author" content="Andreas Huggel">
<meta name="Description" content="Open source Exif and Iptc metadata library and tools with Exif MakerNote and read/write support">
<meta name="Description" content="Open source Exif and IPTC metadata library and tools with Exif MakerNote and read/write support">
<meta name="Keywords" content="exif, iptc, metadata, makernote, manipulation, manipulate, read and write, write, change, update, jpeg, jpg, ifd, image file directory, thumbnail, thumbnails, tag, tags, canon, fujifilm, sigma/foveon, nikon, open source, opensource, huggel, andreas, andreas huggel">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link type="text/css" rel="stylesheet" href="../include/default.css">

View File

@ -9,7 +9,7 @@
<li><a href="tags-panasonic.html"><span>Panasonic</span></a></li>
<li><a href="tags-sigma.html"><span>Sigma/Foveon</span></a></li>
<li><a href="tags-sony.html"><span>Sony</span></a></li>
<li><a href="tags-iptc.html"><span>Iptc&nbsp;datasets</span></a></li>
<li><a href="tags-iptc.html"><span>IPTC&nbsp;datasets</span></a></li>
</ul>
</div>

View File

@ -1 +1 @@
<h1>Exif and Iptc metadata manipulation library and tools</h1>
<h1>Exif and IPTC metadata library and tools</h1>

View File

@ -11,34 +11,48 @@ __index1__
<p>
The Makernote is tag 0x927c in the Exif IFD. According to the
<a title="The Exif 2.2 standard (PDF)" href="http://tsc.jeita.or.jp/avs/data/cp3451.pdf">
<a title="The Exif 2.2 standard (PDF)" href="http://www.exif.org/Exif2-2.PDF">
Exif 2.2 standard</a>, the makernote is <i>"a tag for manufacturers of
Exif writers to record any desired information. The contents are up to
the manufacturer, but this tag should not be used for any other than
its intended purpose."</i></p>
<p>Unfortunately, most vendors do not publish their makernote specifications. (Why not?)
Most of the <a href="#R0">specifications available on the Internet</a>
were reverse-engineered. Judging from the size of many makernote fields, manufacturers
apparently store a lot of information there and from the available specifications,
some of this is certainly quite interesting. For example, makernotes may contain
information about the lens used, contrast, saturation and sharpness settings, image
quality settings, etc.</p>
<p>Most vendors do not publish their makernote specifications. Most of the
<a href="#R0">specifications available on the Internet</a>
were reverse-engineered. Judging from the size of many makernote
fields, manufacturers store a lot of information there and from the
available specifications, some of this is certainly quite
interesting. For example, makernotes may contain information about the
lens used, contrast, saturation and sharpness settings, image quality
settings, etc. For some more advanced camera settings, the Exif
standard doesn't define a standard tag, so camera vendors have to
resort to using the makernote. Unfortunately, in some cases, camera
vendors store important information only in proprietary makernote
fields, instead of using available Exif standard tags. The most
infamous example for this is Nikon's ISO settings tag.</p>
<p>Many (but not all) vendors write the makernote in TIFF IFD (Image File Directory) format,
i.e., in the same format as the rest of the Exif information is encoded. Although this may
appear to make sense at first glance, it actually complicates the situation for programs that
attempt to write to the Exif data. The problem is that IFDs contain offsets relative to the
start of the Exif data. That implies that if an Exif writer moves a makernote field encoded in
IFD format to a different location within the Exif data, it gets corrupted. The reason to
write to the Exif data could be as simple as to add copyright information, an Exif comment,
etc. In my opinion, this is a bug in the specification. In fact, some vendors seem to have
recognized this problem and use offsets relative to somewhere at the beginning of the makernote
field for the makernote IFD.</p>
<p>Most vendors write the makernote in TIFF format, i.e., in the same
format as the rest of the Exif information is encoded. This appears to
be a sensible thing at first glance. Unfortunately, in general it
means that <i>any</i> change of an Exif tag, which moves the
makernote field, will corrupt it. It is an inherent problem of the
TIFF format that a writer must know the format and all extensions
used, in order to be able to write changes correctly; unknown tags are
potentially corrupted when they are moved (rearranged). But since
makernotes are usually proprietary, Exif writers often don't know
these details. The reason to write to the Exif data could be as simple
as to add copyright information, an Exif comment, etc. Some camera
manufacturers seem to have recognized this problem and now use a
modified TIFF format with offsets relative to somewhere at the
beginning of the makernote field for the makernote IFD to address the
issue.</p>
<p>The following table summarizes the structures of the makernote
field used by some vendors. Please let me know if you have additional
information.</p>
<p>The following table summarizes the structures of the makernote field used by some vendors.
Please let me know if you find further specifications on the Internet.</p>
__makernotes__
<p><a href="http://www.exif.org/">Exif.org</a> has another table with similar
info and sample pictures: <a href="http://www.exif.org/samples.html">Digital
Camera Sample Images</a>. According to this source, (at least some) Ricoh and

View File

@ -6,9 +6,9 @@ __header2__
<div id="content">
__index1__
__index2__
<h2>Iptc datasets defined in Exiv2</h2>
<h2>IPTC datasets defined in Exiv2</h2>
<p>Datasets are defined according to the specification of the Iptc
<p>Datasets are defined according to the specification of the IPTC
<a href="http://www.iptc.org/IIM/">Information Interchange Model (IIM)</a>.</p>
<p>Click on a column header to sort the table.</p>

View File

@ -20,7 +20,7 @@
*/
/*!
@file datasets.hpp
@brief Iptc dataSet and type information
@brief IPTC dataset and type information
@version $Rev$
@author Brad Schick (brad) <brad@robotbattle.com>
@date 24-Jul-04, brad: created
@ -84,13 +84,13 @@ namespace Exiv2 {
const char* photoshop_; //!< Photoshop string
}; // struct DataSet
//! Container for Iptc dataset information. Implemented as a static class.
//! Container for IPTC dataset information. Implemented as a static class.
class IptcDataSets {
public:
/*!
@name Record identifiers
@brief Record identifiers to logically group dataSets. There are other
possible record types, but they are not standardized by the Iptc
possible record types, but they are not standardized by the IPTC
IIM4 standard (and not commonly used in images).
*/
//@{
@ -186,7 +186,7 @@ namespace Exiv2 {
/*!
@brief Return the name of the dataset.
@param number The dataset number
@param recordId The Iptc record Id
@param recordId The IPTC record Id
@return The name of the dataset or a string containing the hexadecimal
value of the dataset in the form "0x01ff", if this is an unknown
dataset.
@ -195,21 +195,21 @@ namespace Exiv2 {
/*!
@brief Return the title (label) of the dataset.
@param number The dataset number
@param recordId The Iptc record Id
@param recordId The IPTC record Id
@return The title (label) of the dataset
*/
static const char* dataSetTitle(uint16_t number, uint16_t recordId);
/*!
@brief Return the description of the dataset.
@param number The dataset number
@param recordId The Iptc record Id
@param recordId The IPTC record Id
@return The description of the dataset
*/
static const char* dataSetDesc(uint16_t number, uint16_t recordId);
/*!
@brief Return the photohsop name of a given dataset.
@param number The dataset number
@param recordId The Iptc record Id
@param recordId The IPTC record Id
@return The name used by photoshop for a dataset or an empty
string if photoshop does not use the dataset.
*/
@ -217,7 +217,7 @@ namespace Exiv2 {
/*!
@brief Check if a given dataset is repeatable
@param number The dataset number
@param recordId The Iptc record Id
@param recordId The IPTC record Id
@return true if the given dataset is repeatable otherwise false
*/
static bool dataSetRepeatable(uint16_t number, uint16_t recordId);
@ -272,7 +272,7 @@ namespace Exiv2 {
}; // class IptcDataSets
/*!
@brief Concrete keys for Iptc metadata.
@brief Concrete keys for IPTC metadata.
*/
class IptcKey : public Key {
public:
@ -282,7 +282,7 @@ namespace Exiv2 {
//! @name Creators
//@{
/*!
@brief Constructor to create an Iptc key from a key string.
@brief Constructor to create an IPTC key from a key string.
@param key The key string.
@throw Error if the first part of the key is not '<b>Iptc</b>' or
@ -291,7 +291,7 @@ namespace Exiv2 {
*/
explicit IptcKey(const std::string& key);
/*!
@brief Constructor to create an Iptc key from dataset and record ids.
@brief Constructor to create an IPTC key from dataset and record ids.
@param tag Dataset id
@param record Record id
*/
@ -314,7 +314,7 @@ namespace Exiv2 {
virtual const char* familyName() const { return familyName_; }
/*!
@brief Return the name of the group (the second part of the key).
For Iptc keys, the group name is the record name.
For IPTC keys, the group name is the record name.
*/
virtual std::string groupName() const { return recordName(); }
virtual std::string tagName() const

View File

@ -8,7 +8,7 @@
@date 07-Feb-04, ahu: created
*/
/*!
@mainpage Exif and IPTC metadata manipulation library and tools v0.11
@mainpage Exif and IPTC metadata library and tools v0.11
@section overview Exiv2 Overview

View File

@ -170,7 +170,7 @@ namespace Exiv2 {
}
return 0;
} // IptcData::read
} // IptcData::load
int IptcData::readData(uint16_t dataSet, uint16_t record,
const byte* data, uint32_t sizeData)

View File

@ -20,7 +20,7 @@
*/
/*!
@file iptc.hpp
@brief Encoding and decoding of Iptc data
@brief Encoding and decoding of IPTC data
@version $Rev$
@author Brad Schick (brad)
<a href="mailto:brad@robotbattle.com">brad@robotbattle.com</a>
@ -49,7 +49,7 @@ namespace Exiv2 {
// class definitions
/*!
@brief Information related to one Iptc dataset. An Iptc metadatum consists
@brief Information related to one IPTC dataset. An IPTC metadatum consists
of an IptcKey and a Value and provides methods to manipulate these.
*/
class Iptcdatum : public Metadatum {
@ -267,15 +267,15 @@ namespace Exiv2 {
}; // class FindMetadatumById
/*!
@brief A container for Iptc data. This is a top-level class of
@brief A container for IPTC data. This is a top-level class of
the %Exiv2 library.
Provide high-level access to the Iptc data of an image:
- read Iptc information from JPEG files
Provide high-level access to the IPTC data of an image:
- read IPTC information from JPEG files
- access metadata through keys and standard C++ iterators
- add, modify and delete metadata
- write Iptc data to JPEG files
- extract Iptc metadata to files, insert from these files
- write IPTC data to JPEG files
- extract IPTC metadata to files, insert from these files
*/
class IptcData {
public:
@ -289,12 +289,12 @@ namespace Exiv2 {
//! @name Manipulators
//@{
/*!
@brief Load the Iptc data from a byte buffer. The format must follow
@brief Load the IPTC data from a byte buffer. The format must follow
the IPTC IIM4 standard.
@param buf Pointer to the data buffer to read from
@param len Number of bytes in the data buffer
@return 0 if successful;<BR>
5 if Iptc data is invalid or corrupt;<BR>
5 if IPTC data is invalid or corrupt;<BR>
*/
int load(const byte* buf, long len);
/*!
@ -315,7 +315,7 @@ namespace Exiv2 {
*/
int add(const IptcKey& key, Value* value);
/*!
@brief Add a copy of the Iptcdatum to the Iptc metadata. A check
@brief Add a copy of the Iptcdatum to the IPTC metadata. A check
for non-repeatable datasets is performed.
@return 0 if successful;<BR>
6 if the dataset already exists and is not repeatable;<BR>
@ -363,10 +363,10 @@ namespace Exiv2 {
//! End of the metadata
const_iterator end() const { return iptcMetadata_.end(); }
/*!
@brief Write the Iptc data to a data buffer and return the data buffer.
@brief Write the IPTC data to a data buffer and return the data buffer.
Caller owns this buffer. The copied data follows the IPTC IIM4
standard.
@return Data buffer containing the Iptc data.
@return Data buffer containing the IPTC data.
*/
DataBuf copy() const;
/*!
@ -383,12 +383,12 @@ namespace Exiv2 {
*/
const_iterator findId(uint16_t dataset,
uint16_t record = IptcDataSets::application2) const;
//! Return true if there is no Iptc metadata
//! Return true if there is no IPTC metadata
bool empty() const { return count() == 0; }
//! Get the number of metadata entries
long count() const { return static_cast<long>(iptcMetadata_.size()); }
/*!
@brief Return the exact size of all contained Iptc metadata
@brief Return the exact size of all contained IPTC metadata
*/
long size() const;
//@}