Exiv2
exif.hpp
Go to the documentation of this file.
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  */
27 #ifndef EXIF_HPP_
28 #define EXIF_HPP_
29 
30 // *****************************************************************************
31 #include "exiv2lib_export.h"
32 
33 // included header files
34 #include "metadatum.hpp"
35 #include "tags.hpp"
36 
37 // + standard includes
38 #include <list>
39 
40 // *****************************************************************************
41 // namespace extensions
46 namespace Exiv2 {
47 
48 // *****************************************************************************
49 // class declarations
50  class ExifData;
51 
52 // *****************************************************************************
53 // class definitions
54 
59  class EXIV2API Exifdatum : public Metadatum {
60  template<typename T> friend Exifdatum& setValue(Exifdatum&, const T&);
61  public:
63 
64 
75  explicit Exifdatum(const ExifKey& key, const Value* pValue =0);
77  Exifdatum(const Exifdatum& rhs);
79  virtual ~Exifdatum();
81 
83 
84  Exifdatum& operator=(const Exifdatum& rhs);
90  Exifdatum& operator=(const uint16_t& value);
95  Exifdatum& operator=(const uint32_t& value);
100  Exifdatum& operator=(const URational& value);
105  Exifdatum& operator=(const int16_t& value);
110  Exifdatum& operator=(const int32_t& value);
115  Exifdatum& operator=(const Rational& value);
120  Exifdatum& operator=(const std::string& value);
125  Exifdatum& operator=(const Value& value);
126  void setValue(const Value* pValue);
134  int setValue(const std::string& value);
148  int setDataArea(const byte* buf, long len);
150 
152 
153  std::string key() const;
155  const char* familyName() const;
156  std::string groupName() const;
157  std::string tagName() const;
158  std::string tagLabel() const;
159  uint16_t tag() const;
161  int ifdId() const;
163  const char* ifdName() const;
165  int idx() const;
177  long copy(byte* buf, ByteOrder byteOrder) const;
178  std::ostream& write(std::ostream& os, const ExifData* pMetadata =0) const;
180  TypeId typeId() const;
182  const char* typeName() const;
184  long typeSize() const;
186  long count() const;
188  long size() const;
190  std::string toString() const;
191  std::string toString(long n) const;
192  long toLong(long n =0) const;
193  float toFloat(long n =0) const;
194  Rational toRational(long n =0) const;
195  Value::AutoPtr getValue() const;
196  const Value& value() const;
198  long sizeDataArea() const;
211  DataBuf dataArea() const;
213 
214  private:
215  // DATA
216  ExifKey::AutoPtr key_;
217  Value::AutoPtr value_;
218 
219  }; // class Exifdatum
220 
232  class EXIV2API ExifThumbC {
233  public:
235 
236  explicit ExifThumbC(const ExifData& exifData);
239 
241 
242 
246  DataBuf copy() const;
257  long writeFile(const std::string& path) const;
258 #ifdef EXV_UNICODE_PATH
259 
263  long writeFile(const std::wstring& wpath) const;
264 #endif
265 
269  const char* mimeType() const;
274  const char* extension() const;
275 #ifdef EXV_UNICODE_PATH
276 
280  const wchar_t* wextension() const;
281 #endif
282 
283 
284  private:
285  // DATA
286  const ExifData& exifData_;
287 
288  }; // class ExifThumb
289 
301  class EXIV2API ExifThumb : public ExifThumbC {
302  public:
304 
305  explicit ExifThumb(ExifData& exifData);
308 
310 
311 
328  void setJpegThumbnail(
329  const std::string& path,
330  URational xres,
331  URational yres,
332  uint16_t unit
333  );
334 #ifdef EXV_UNICODE_PATH
335 
340  void setJpegThumbnail(
341  const std::wstring& wpath,
342  URational xres,
343  URational yres,
344  uint16_t unit
345  );
346 #endif
347 
364  void setJpegThumbnail(
365  const byte* buf,
366  long size,
367  URational xres,
368  URational yres,
369  uint16_t unit
370  );
384  void setJpegThumbnail(const std::string& path);
385 #ifdef EXV_UNICODE_PATH
386 
391  void setJpegThumbnail(const std::wstring& wpath);
392 #endif
393 
405  void setJpegThumbnail(const byte* buf, long size);
410  void erase();
412 
413  private:
414  // DATA
415  ExifData& exifData_;
416 
417  }; // class ExifThumb
418 
420  typedef std::list<Exifdatum> ExifMetadata;
421 
434  class EXIV2API ExifData {
435  public:
437  typedef ExifMetadata::iterator iterator;
439  typedef ExifMetadata::const_iterator const_iterator;
440 
442 
443 
451  Exifdatum& operator[](const std::string& key);
458  void add(const ExifKey& key, const Value* pValue);
466  void add(const Exifdatum& exifdatum);
473  iterator erase(iterator pos);
479  iterator erase(iterator beg, iterator end);
484  void clear();
486  void sortByKey();
488  void sortByTag();
490  iterator begin() { return exifMetadata_.begin(); }
492  iterator end() { return exifMetadata_.end(); }
497  iterator findKey(const ExifKey& key);
499 
501 
502  const_iterator begin() const { return exifMetadata_.begin(); }
505  const_iterator end() const { return exifMetadata_.end(); }
510  const_iterator findKey(const ExifKey& key) const;
512  bool empty() const { return count() == 0; }
514  long count() const { return static_cast<long>(exifMetadata_.size()); }
516 
517  private:
518  // DATA
519  ExifMetadata exifMetadata_;
520 
521  }; // class ExifData
522 
529  class EXIV2API ExifParser {
530  public:
544  static ByteOrder decode(
545  ExifData& exifData,
546  const byte* pData,
547  uint32_t size
548  );
587  static WriteMethod encode(
588  Blob& blob,
589  const byte* pData,
590  uint32_t size,
591  ByteOrder byteOrder,
592  const ExifData& exifData
593  );
614  static void encode(
615  Blob& blob,
616  ByteOrder byteOrder,
617  const ExifData& exifData
618  )
619  {
620  encode(blob, 0, 0, byteOrder, exifData);
621  }
622 
623  }; // class ExifParser
624 
625 } // namespace Exiv2
626 
627 #endif // #ifndef EXIF_HPP_
const char * ifdName(IfdId ifdId)
Return the name of the IFD.
Definition: tags_int.cpp:2148
Concrete keys for Exif metadata and access to Exif tag reference data.
Definition: tags.hpp:148
A container for Exif data. This is a top-level class of the Exiv2 library. The container holds Exifda...
Definition: exif.hpp:434
EXIV2API long writeFile(const DataBuf &buf, const std::string &path)
Write DataBuf buf to file path.
Definition: basicio.cpp:2702
ByteOrder
Type to express the byte order (little or big endian)
Definition: types.hpp:113
Utility class containing a character array. All it does is to take care of memory allocation and dele...
Definition: types.hpp:204
std::pair< int32_t, int32_t > Rational
8 byte signed rational type.
Definition: types.hpp:110
ExifMetadata::const_iterator const_iterator
ExifMetadata const iterator type.
Definition: exif.hpp:439
std::auto_ptr< ExifKey > AutoPtr
Shortcut for an ExifKey auto pointer.
Definition: tags.hpp:151
std::list< Exifdatum > ExifMetadata
Container type to hold all metadata.
Definition: exif.hpp:420
T getValue(const byte *buf, ByteOrder byteOrder)
Read a value of type T from the data buffer.
Definition: value.hpp:1372
Access and modify an Exif thumbnail image. This class implements manipulators to set and erase the th...
Definition: exif.hpp:301
TypeId
Exiv2 value type identifiers.
Definition: types.hpp:130
const_iterator end() const
End of the metadata.
Definition: exif.hpp:505
Provides abstract base classes Metadatum and Key.
uint8_t byte
1 byte unsigned integer type.
Definition: types.hpp:105
std::string toString(const T &arg)
Utility function to convert the argument of any type to a string.
Definition: types.hpp:521
iterator begin()
Begin of the metadata.
Definition: exif.hpp:490
WriteMethod
Type to indicate write method used by TIFF parsers.
Definition: types.hpp:116
Exif tag and type information.
static void encode(Blob &blob, ByteOrder byteOrder, const ExifData &exifData)
Encode metadata from the provided metadata to Exif format.
Definition: exif.hpp:614
long count() const
Get the number of metadata entries.
Definition: exif.hpp:514
Stateless parser class for Exif data. Images use this class to decode and encode binary Exif data...
Definition: exif.hpp:529
iterator end()
End of the metadata.
Definition: exif.hpp:492
Exiv2::Exifdatum & setValue(Exiv2::Exifdatum &exifDatum, const T &value)
Set the value of exifDatum to value. If the object already has a value, it is replaced. Otherwise a new ValueType<T> value is created and set to value.
Definition: exif.cpp:193
std::vector< byte > Blob
Container for binary data.
Definition: types.hpp:162
std::pair< uint32_t, uint32_t > URational
8 byte unsigned rational type.
Definition: types.hpp:108
const char * groupName(IfdId ifdId)
Return the group name for a group id.
Definition: tags_int.cpp:2155
IPTC string type.
Definition: types.hpp:147
Common interface for all types of values used with metadata.
Definition: value.hpp:60
std::auto_ptr< Value > AutoPtr
Shortcut for a Value auto pointer.
Definition: value.hpp:63
ExifMetadata::iterator iterator
ExifMetadata iterator type.
Definition: exif.hpp:437
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition: asfvideo.hpp:36
bool empty() const
Return true if there is no Exif metadata.
Definition: exif.hpp:512
An Exif metadatum, consisting of an ExifKey and a Value and methods to manipulate these...
Definition: exif.hpp:59
Abstract base class defining the interface to access information related to one metadata tag...
Definition: metadatum.hpp:126
Access to a Exif thumbnail image. This class provides higher level accessors to the thumbnail image t...
Definition: exif.hpp:232