Exiv2
exif.hpp
Go to the documentation of this file.
1// ***************************************************************** -*- C++ -*-
2/*
3 * Copyright (C) 2004-2021 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
46namespace 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
85 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
154 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
237 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
263 long writeFile(const std::wstring& wpath) const;
264#endif
269 const char* mimeType() const;
274 const char* extension() const;
275#ifdef EXV_UNICODE_PATH
280 const wchar_t* wextension() const;
281#endif
283
284 private:
285 // DATA
286 const ExifData& exifData_;
287
288 }; // class ExifThumb
289
301 class EXIV2API ExifThumb : public ExifThumbC {
302 public:
304
305
306 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
340 void setJpegThumbnail(
341 const std::wstring& wpath,
342 URational xres,
343 URational yres,
344 uint16_t unit
345 );
346#endif
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
391 void setJpegThumbnail(const std::wstring& wpath);
392#endif
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
503 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_
Utility class containing a character array. All it does is to take care of memory allocation and dele...
Definition: types.hpp:193
A container for Exif data. This is a top-level class of the Exiv2 library. The container holds Exifda...
Definition: exif.hpp:434
ExifMetadata::iterator iterator
ExifMetadata iterator type.
Definition: exif.hpp:437
bool empty() const
Return true if there is no Exif metadata.
Definition: exif.hpp:512
ExifMetadata::const_iterator const_iterator
ExifMetadata const iterator type.
Definition: exif.hpp:439
long count() const
Get the number of metadata entries.
Definition: exif.hpp:514
iterator begin()
Begin of the metadata.
Definition: exif.hpp:490
const_iterator end() const
End of the metadata.
Definition: exif.hpp:505
iterator end()
End of the metadata.
Definition: exif.hpp:492
const_iterator begin() const
Begin of the metadata.
Definition: exif.hpp:503
Concrete keys for Exif metadata and access to Exif tag reference data.
Definition: tags.hpp:140
std::auto_ptr< ExifKey > AutoPtr
Shortcut for an ExifKey auto pointer.
Definition: tags.hpp:143
Stateless parser class for Exif data. Images use this class to decode and encode binary Exif data.
Definition: exif.hpp:529
static void encode(Blob &blob, ByteOrder byteOrder, const ExifData &exifData)
Encode metadata from the provided metadata to Exif format.
Definition: exif.hpp:614
Access to a Exif thumbnail image. This class provides higher level accessors to the thumbnail image t...
Definition: exif.hpp:232
Access and modify an Exif thumbnail image. This class implements manipulators to set and erase the th...
Definition: exif.hpp:301
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:115
Common interface for all types of values used with metadata.
Definition: value.hpp:51
std::auto_ptr< Value > AutoPtr
Shortcut for a Value auto pointer.
Definition: value.hpp:54
const char * groupName(IfdId ifdId)
Return the group name for a group id.
Definition: tags_int.cpp:2569
const char * ifdName(IfdId ifdId)
Return the name of the IFD.
Definition: tags_int.cpp:2562
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition: asfvideo.hpp:36
T getValue(const byte *buf, ByteOrder byteOrder)
Read a value of type T from the data buffer.
TypeId
Exiv2 value type identifiers.
Definition: types.hpp:119
EXIV2API long writeFile(const DataBuf &buf, const std::string &path)
Write DataBuf buf to file path.
Definition: basicio.cpp:2703
std::vector< byte > Blob
Container for binary data.
Definition: types.hpp:151
std::list< Exifdatum > ExifMetadata
Container type to hold all metadata.
Definition: exif.hpp:420
ByteOrder
Type to express the byte order (little or big endian)
Definition: types.hpp:102
std::pair< int32_t, int32_t > Rational
8 byte signed rational type.
Definition: types.hpp:99
WriteMethod
Type to indicate write method used by TIFF parsers.
Definition: types.hpp:105
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....
Definition: exif.cpp:194
std::string toString(const T &arg)
Utility function to convert the argument of any type to a string.
Definition: types.hpp:510
std::pair< uint32_t, uint32_t > URational
8 byte unsigned rational type.
Definition: types.hpp:97