Exiv2
tiffimage.hpp
1 // ***************************************************************** -*- C++ -*-
2 /*
3  * Copyright (C) 2004-2018 Exiv2 authors
4  * This program is part of the Exiv2 distribution.
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301 USA.
19  */
20 /*
21  File: tiffimage.hpp
22  */
23 
24 #ifndef TIFFIMAGE_HPP_
25 #define TIFFIMAGE_HPP_
26 
27 // *****************************************************************************
28 #include "exiv2lib_export.h"
29 
30 // included header files
31 #include "image.hpp"
32 
33 // *****************************************************************************
34 // namespace extensions
35 namespace Exiv2 {
36 
37 // *****************************************************************************
38 // class definitions
39 
40  // Add TIFF to the supported image formats
41  namespace ImageType {
42  const int tiff = 4;
43  const int dng = 4;
44  const int nef = 4;
45  const int pef = 4;
46  const int arw = 4;
47  const int sr2 = 4;
48  const int srw = 4;
49  }
50 
55  class EXIV2API TiffImage : public Image {
56  public:
58 
59 
74  TiffImage(BasicIo::AutoPtr io, bool create);
76 
78 
79  void readMetadata();
80  void writeMetadata();
81 
88  virtual void printStructure(std::ostream& out, PrintStructureOption option,int depth=0);
89 
94  void setComment(const std::string& comment);
96 
98 
99  std::string mimeType() const;
100  int pixelWidth() const;
101  int pixelHeight() const;
103 
104  private:
106 
107  TiffImage(const TiffImage& rhs);
110  TiffImage& operator=(const TiffImage& rhs);
112 
114 
115  std::string primaryGroup() const;
118 
119  private:
120  // DATA
121  mutable std::string primaryGroup_;
122  mutable std::string mimeType_;
123  mutable int pixelWidth_;
124  mutable int pixelHeight_;
125 
126  }; // class TiffImage
127 
133  class EXIV2API TiffParser {
134  public:
148  static ByteOrder decode(
149  ExifData& exifData,
150  IptcData& iptcData,
151  XmpData& xmpData,
152  const byte* pData,
153  uint32_t size
154  );
188  static WriteMethod encode(
189  BasicIo& io,
190  const byte* pData,
191  uint32_t size,
192  ByteOrder byteOrder,
193  const ExifData& exifData,
194  const IptcData& iptcData,
195  const XmpData& xmpData
196  );
197 
198  }; // class TiffParser
199 
200 // *****************************************************************************
201 // template, inline and free functions
202 
203  // These could be static private functions on Image subclasses but then
204  // ImageFactory needs to be made a friend.
210  EXIV2API Image::AutoPtr newTiffInstance(BasicIo::AutoPtr io, bool create);
211 
213  EXIV2API bool isTiffType(BasicIo& iIo, bool advance);
214 
215 } // namespace Exiv2
216 
217 #endif // #ifndef TIFFIMAGE_HPP_
Exiv2::ImageType::sr2
const int sr2
SR2 image type (see class TiffImage)
Definition: tiffimage.hpp:47
image_int.hpp
Internal image helpers.
Exiv2::TiffImage::writeMetadata
void writeMetadata()
Write metadata back to the image.
Definition: tiffimage.cpp:208
Exiv2::BasicIo::error
virtual int error() const =0
Returns 0 if the IO source is in a valid state, otherwise nonzero.
Exiv2::DataBuf::pData_
byte * pData_
Pointer to the buffer, 0 if none has been allocated.
Definition: types.hpp:269
nikonmn_int.hpp
Nikon makernote tags. References: [1] MakerNote EXIF Tag of the Nikon 990 by Max Lyons [2] Exif fil...
Exiv2::Image::iptcData_
IptcData iptcData_
IPTC data container.
Definition: image.hpp:489
Exiv2::IoCloser
Utility class that closes a BasicIo instance upon destruction. Meant to be used as a stack variable i...
Definition: basicio.hpp:264
Exiv2::ExifData::findKey
iterator findKey(const ExifKey &key)
Find the first Exifdatum with the given key, return an iterator to it.
Definition: exif.cpp:581
Exiv2::ImageType::tiff
const int tiff
TIFF image type (see class TiffImage)
Definition: tiffimage.hpp:42
tiffvisitor_int.hpp
Internal operations on a TIFF composite tree, implemented as visitor classes.
Exiv2::ExifData::add
void add(const ExifKey &key, const Value *pValue)
Add an Exifdatum from the supplied key and value pair. This method copies (clones) key and value....
Definition: exif.cpp:564
Exiv2::MimeTypeList::operator==
bool operator==(int compression) const
Comparison operator for compression.
Definition: tiffimage.cpp:82
Exiv2::TiffImage::printStructure
virtual void printStructure(std::ostream &out, PrintStructureOption option, int depth=0)
Print out the structure of image file.
Definition: tiffimage.cpp:335
Exiv2::Internal::IfdId
IfdId
Type to specify the IFD to which a metadata belongs.
Definition: tags_int.hpp:54
Exiv2::ExifData::begin
iterator begin()
Begin of the metadata.
Definition: exif.hpp:490
types.hpp
Type definitions for Exiv2 and related functionality.
Exiv2::ExifData::const_iterator
ExifMetadata::const_iterator const_iterator
ExifMetadata const iterator type.
Definition: exif.hpp:439
Exiv2::Internal::TiffHeader
Standard TIFF header structure.
Definition: tiffimage_int.hpp:149
Exiv2::TiffImage::pixelHeight
int pixelHeight() const
Return the pixel height of the image.
Definition: tiffimage.cpp:151
Exiv2::ImageType::nef
const int nef
NEF image type (see class TiffImage)
Definition: tiffimage.hpp:44
Exiv2::ExifData::erase
iterator erase(iterator pos)
Delete the Exifdatum at iterator position pos, return the position of the next exifdatum....
Definition: exif.cpp:607
Exiv2::comment
Exiv2 type for the Exif user comment.
Definition: types.hpp:150
Exiv2::TiffImage::mimeType
std::string mimeType() const
Return the MIME type of the image.
Definition: tiffimage.cpp:94
Exiv2::TiffImage::TiffImage
TiffImage(BasicIo::AutoPtr io, bool create)
Constructor that can either open an existing TIFF image or create a new image from scratch....
Definition: tiffimage.cpp:73
Exiv2::strError
EXIV2API std::string strError()
Return a system error message and the error code (errno). See strerror(3).
Definition: futils.cpp:352
Exiv2::Internal::FindExifdatum
Unary predicate that matches an Exifdatum with a given IfdId.
Definition: tiffimage_int.hpp:476
Exiv2::mimeTypeList
MimeTypeList mimeTypeList[]
List of TIFF compression to MIME type mappings.
Definition: tiffimage.cpp:88
EXV_COUNTOF
#define EXV_COUNTOF(a)
Macro to determine the size of an array.
Definition: types.hpp:517
Exiv2::Internal::TiffHeaderBase::read
virtual bool read(const byte *pData, uint32_t size)
Read the image header from a data buffer. Return false if the data buffer does not contain an image h...
Definition: tiffimage_int.cpp:1780
Exiv2::Image::exifData_
ExifData exifData_
Exif data container.
Definition: image.hpp:488
Exiv2::TiffParser::decode
static ByteOrder decode(ExifData &exifData, IptcData &iptcData, XmpData &xmpData, const byte *pData, uint32_t size)
Decode metadata from a buffer pData of length size with data in TIFF format to the provided metadata ...
Definition: tiffimage.cpp:251
Exiv2::newTiffInstance
EXIV2API Image::AutoPtr newTiffInstance(BasicIo::AutoPtr io, bool create)
Create a new TiffImage instance and return an auto-pointer to it. Caller owns the returned object and...
Definition: tiffimage.cpp:310
Exiv2::ExifData::end
iterator end()
End of the metadata.
Definition: exif.hpp:492
Exiv2::MimeTypeList
Structure for TIFF compression to MIME type mappings.
Definition: tiffimage.cpp:80
Exiv2::isTiffType
EXIV2API bool isTiffType(BasicIo &iIo, bool advance)
Check if the file iIo is a TIFF image.
Definition: tiffimage.cpp:319
Exiv2::Image::iccProfileDefined
virtual bool iccProfileDefined()
Erase iccProfile. the profile is not removed from the actual image until the writeMetadata() method i...
Definition: image.hpp:238
Exiv2::Image::clearMetadata
virtual void clearMetadata()
Erase all buffered metadata. Metadata is not removed from the actual image until the writeMetadata() ...
Definition: image.cpp:541
Exiv2::DataValue
Value for an undefined data type.
Definition: value.hpp:262
Exiv2::Internal::TiffMapping::findEncoder
static EncoderFct findEncoder(const std::string &make, uint32_t extendedTag, IfdId group)
Find special encoder function for a key.
Definition: tiffimage_int.cpp:1534
Exiv2::TiffImage::readMetadata
void readMetadata()
Read all metadata supported by a specific image format from the image. Before this method is called,...
Definition: tiffimage.cpp:169
Exiv2::Internal::TiffMapping::findDecoder
static DecoderFct findDecoder(const std::string &make, uint32_t extendedTag, IfdId group)
Find the decoder function for a key.
Definition: tiffimage_int.cpp:1520
Exiv2::MimeTypeList::compression_
int compression_
TIFF compression.
Definition: tiffimage.cpp:83
Exiv2::Image::setByteOrder
void setByteOrder(ByteOrder byteOrder)
Set the byte order to encode the Exif metadata in.
Definition: image.cpp:678
Exiv2::Image::byteOrder
ByteOrder byteOrder() const
Return the byte order in which the Exif metadata of the image is encoded. Initially,...
Definition: image.cpp:683
tiffimage_int.hpp
Internal class TiffParserWorker to parse TIFF data.
Exiv2::Image::printTiffStructure
void printTiffStructure(BasicIo &io, std::ostream &out, PrintStructureOption option, int depth, size_t offset=0)
Print out the structure of image file.
Definition: image.cpp:523
Exiv2::TiffImage::pixelWidth
int pixelWidth() const
Return the pixel width of the image.
Definition: tiffimage.cpp:139
Exiv2::Image::xmpData
virtual XmpData & xmpData()
Returns an XmpData instance containing currently buffered XMP data.
Definition: image.cpp:561
Exiv2::DataBuf::alloc
void alloc(long size)
Allocate a data buffer of at least the given size. Note that if the requested size is less than the c...
Definition: types.cpp:161
Exiv2::ExifKey
Concrete keys for Exif metadata and access to Exif tag reference data.
Definition: tags.hpp:148
Exiv2::DataBuf::size_
long size_
The current size of the buffer.
Definition: types.hpp:271
Exiv2::BasicIo::eof
virtual bool eof() const =0
Returns true if the IO position has reached the end, otherwise false.
Exiv2::find
const T * find(T(&src)[N], const K &key)
Find an element that matches key in the array src.
Definition: types.hpp:508
orfimage.hpp
Olympus RAW image.
Exiv2::BasicIo::read
virtual DataBuf read(long rcount)=0
Read data from the IO source. Reading starts at the current IO position and the position is advanced ...
Exiv2::Image::imageType
int imageType() const
set type support for this image format
Definition: image.hpp:483
makernote_int.hpp
Makernote factory and registry, IFD makernote header, and camera vendor specific makernote implementa...
Exiv2
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition: asfvideo.hpp:36
Exiv2::XmpData
A container for XMP data. This is a top-level class of the Exiv2 library.
Definition: xmp_exiv2.hpp:173
Exiv2::Image::io
virtual BasicIo & io() const
Return a reference to the BasicIo instance being used for Io.
Definition: image.cpp:723
Exiv2::ImageType::pef
const int pef
PEF image type (see class TiffImage)
Definition: tiffimage.hpp:45
image.hpp
Exiv2::ImageType::none
const int none
Not an image.
Definition: image.hpp:48
Exiv2::TiffParser
Stateless parser class for data in TIFF format. Images use this class to decode and encode TIFF data....
Definition: tiffimage.hpp:133
Exiv2::TiffImage
Class to access TIFF images. Exif metadata is supported directly, IPTC is read from the Exif data,...
Definition: tiffimage.hpp:55
Exiv2::TiffParser::encode
static WriteMethod encode(BasicIo &io, const byte *pData, uint32_t size, ByteOrder byteOrder, const ExifData &exifData, const IptcData &iptcData, const XmpData &xmpData)
Encode metadata from the provided metadata to TIFF format.
Definition: tiffimage.cpp:268
Exiv2::Internal::TiffParserWorker::encode
static WriteMethod encode(BasicIo &io, const byte *pData, uint32_t size, const ExifData &exifData, const IptcData &iptcData, const XmpData &xmpData, uint32_t root, FindEncoderFct findEncoderFct, TiffHeaderBase *pHeader, OffsetWriter *pOffsetWriter)
Encode TIFF metadata from the metadata containers into a memory block blob.
Definition: tiffimage_int.cpp:1627
Exiv2::Image::io_
BasicIo::AutoPtr io_
Image data IO pointer.
Definition: image.hpp:487
Exiv2::TiffImage::setComment
void setComment(const std::string &comment)
Not supported. TIFF format does not contain a comment. Calling this function will throw an Error(kerI...
Definition: tiffimage.cpp:163
Exiv2::ByteOrder
ByteOrder
Type to express the byte order (little or big endian)
Definition: types.hpp:113
Exiv2::Image::iccProfile_
DataBuf iccProfile_
ICC buffer (binary data)
Definition: image.hpp:491
Exiv2::XmpData::usePacket
bool usePacket() const
are we to use the packet?
Definition: xmp_exiv2.hpp:252
Exiv2::ImageType::dng
const int dng
DNG image type (see class TiffImage)
Definition: tiffimage.hpp:43
Exiv2::Image::AutoPtr
std::auto_ptr< Image > AutoPtr
Image auto_ptr type.
Definition: image.hpp:84
Exiv2::Internal::Tag::root
const uint32_t root
Special tag: root IFD.
Definition: tiffcomposite_int.hpp:80
Exiv2::BasicIo::AutoPtr
std::auto_ptr< BasicIo > AutoPtr
BasicIo auto_ptr type.
Definition: basicio.hpp:58
Exiv2::Image::writeXmpFromPacket
bool writeXmpFromPacket() const
Return the flag indicating the source when writing XMP metadata.
Definition: image.cpp:728
Exiv2::Error
BasicError< char > Error
Error class used for exceptions (std::string based)
Definition: error.hpp:323
Exiv2::IptcData
A container for IPTC data. This is a top-level class of the Exiv2 library.
Definition: iptc.hpp:173
Exiv2::MimeTypeList::mimeType_
const char * mimeType_
MIME type.
Definition: tiffimage.cpp:84
Exiv2::ImageType::arw
const int arw
ARW image type (see class TiffImage)
Definition: tiffimage.hpp:46
Exiv2::string
IPTC string type.
Definition: types.hpp:147
Exiv2::PrintStructureOption
PrintStructureOption
Options for printStructure.
Definition: image.hpp:67
Exiv2::BasicIo::seek
virtual int seek(long offset, Position pos)=0
Move the current IO position.
Exiv2::ExifData::iterator
ExifMetadata::iterator iterator
ExifMetadata iterator type.
Definition: exif.hpp:437
Exiv2::BasicIo
An interface for simple binary IO.
Definition: basicio.hpp:55
Exiv2::Image::xmpData_
XmpData xmpData_
XMP data container.
Definition: image.hpp:490
Exiv2::Image
Abstract base class defining the interface for an image. This is the top-level interface to the Exiv2...
Definition: image.hpp:81
Exiv2::WriteMethod
WriteMethod
Type to indicate write method used by TIFF parsers.
Definition: types.hpp:116
Exiv2::ImageType::srw
const int srw
SRW image type (see class TiffImage)
Definition: tiffimage.hpp:48
Exiv2::Internal::TiffHeaderBase::byteOrder
virtual ByteOrder byteOrder() const
Return the byte order (little or big endian).
Definition: tiffimage_int.cpp:1836
futils.hpp
Basic file utility functions required by Exiv2.
Exiv2::Internal::TiffParserWorker::decode
static ByteOrder decode(ExifData &exifData, IptcData &iptcData, XmpData &xmpData, const byte *pData, uint32_t size, uint32_t root, FindDecoderFct findDecoderFct, TiffHeaderBase *pHeader=0)
Decode TIFF metadata from a data buffer pData of length size into the provided metadata containers.
Definition: tiffimage_int.cpp:1597
error.hpp
Error class for exceptions, log message class.
tiffcomposite_int.hpp
Internal classes used in a TIFF composite structure.
Exiv2::ExifData
A container for Exif data. This is a top-level class of the Exiv2 library. The container holds Exifda...
Definition: exif.hpp:434