Exiv2
pngchunk_int.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  */
29  /*
30  File: pngchunk.cpp
31  */
32 
33 #ifndef PNGCHUNK_INT_HPP_
34 #define PNGCHUNK_INT_HPP_
35 
36 // *****************************************************************************
37 // included header files
38 #include "types.hpp"
39 #include "pngimage.hpp"
40 
41 // + standard includes
42 #include <iosfwd>
43 #include <cassert>
44 #include <cstdarg>
45 
46 // *****************************************************************************
47 // namespace extensions
48 namespace Exiv2 {
49 
50 // *****************************************************************************
51 // class declarations
52  class Image;
53 
54  namespace Internal {
55 
56 // *****************************************************************************
57 // class definitions
58 
63  class PngChunk {
64  public:
68  enum TxtChunkType {
69  tEXt_Chunk = 0,
70  zTXt_Chunk = 1,
71  iTXt_Chunk = 2
72  };
73 
74  public:
83  static void decodeIHDRChunk(const DataBuf& data,
84  int* outWidth,
85  int* outHeight);
86 
95  static void decodeTXTChunk(Image* pImage,
96  const DataBuf& data,
97  TxtChunkType type);
98 
106  static DataBuf decodeTXTChunk(const DataBuf& data,
107  TxtChunkType type);
108 
109 
116  static DataBuf keyTXTChunk(const DataBuf& data, bool stripHeader=false);
117 
126  static std::string makeMetadataChunk(const std::string& metadata,
127  MetadataId type);
128 
129  private:
134  static DataBuf parseTXTChunk(const DataBuf& data,
135  int keysize,
136  TxtChunkType type);
137 
147  static void parseChunkContent( Image* pImage,
148  const byte* key,
149  long keySize,
150  const DataBuf arr);
151 
162  static std::string makeAsciiTxtChunk(const std::string& keyword,
163  const std::string& text,
164  bool compress);
165 
174  static std::string makeUtf8TxtChunk(const std::string& keyword,
175  const std::string& text,
176  bool compress);
177 
181  static void zlibUncompress(const byte* compressedText,
182  unsigned int compressedTextSize,
183  DataBuf& arr);
184 
188  static std::string zlibCompress(const std::string& text);
189 
193  static DataBuf readRawProfile(const DataBuf& text,bool iTXt);
194 
199  static std::string writeRawProfile(const std::string& profileData,
200  const char* profileType);
201 
202  friend class Exiv2::PngImage;
203 
204  }; // class PngChunk
205 
206 }} // namespace Internal, Exiv2
207 
208 #endif // #ifndef PNGCHUNK_INT_HPP_
TxtChunkType
Text Chunk types.
Definition: pngchunk_int.hpp:68
Utility class containing a character array. All it does is to take care of memory allocation and dele...
Definition: types.hpp:204
PNG image, implemented using the following references: PNG specification by W3C PNG tags list by Phi...
uint8_t byte
1 byte unsigned integer type.
Definition: types.hpp:105
Abstract base class defining the interface for an image. This is the top-level interface to the Exiv2...
Definition: image.hpp:81
MetadataId
An identifier for each type of metadata.
Definition: types.hpp:119
static void decodeIHDRChunk(const DataBuf &data, int *outWidth, int *outHeight)
Decode PNG IHDR chunk data from a data buffer data and return image size to outWidth and outHeight...
Type definitions for Exiv2 and related functionality.
Stateless parser class for data in PNG chunk format. Images use this class to decode and encode PNG-b...
Definition: pngchunk_int.hpp:63
static std::string makeMetadataChunk(const std::string &metadata, MetadataId type)
Return a complete PNG chunk data compressed or not as buffer. Data returned is formated accordingly w...
IPTC string type.
Definition: types.hpp:147
static void decodeTXTChunk(Image *pImage, const DataBuf &data, TxtChunkType type)
Decode PNG tEXt, zTXt, or iTXt chunk data from pImage passed by data buffer data and extract Comment...
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition: asfvideo.hpp:36
static DataBuf keyTXTChunk(const DataBuf &data, bool stripHeader=false)
Return PNG TXT chunk key as data buffer.
Class to access PNG images. Exif and IPTC metadata are supported directly.
Definition: pngimage.hpp:58