Exiv2
pngchunk_int.hpp
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 */
20#ifndef PNGCHUNK_INT_HPP_
21#define PNGCHUNK_INT_HPP_
22
23// *****************************************************************************
24// included header files
25#include "types.hpp"
26#include "pngimage.hpp"
27
28// + standard includes
29#include <iosfwd>
30#include <cassert>
31#include <cstdarg>
32
33// *****************************************************************************
34// namespace extensions
35namespace Exiv2 {
36
37// *****************************************************************************
38// class declarations
39 class Image;
40
41 namespace Internal {
42
43// *****************************************************************************
44// class definitions
45
50 class PngChunk {
51 public:
56 tEXt_Chunk = 0,
57 zTXt_Chunk = 1,
58 iTXt_Chunk = 2
59 };
60
61 public:
70 static void decodeIHDRChunk(const DataBuf& data,
71 int* outWidth,
72 int* outHeight);
73
82 static void decodeTXTChunk(Image* pImage,
83 const DataBuf& data,
84 TxtChunkType type);
85
93 static DataBuf decodeTXTChunk(const DataBuf& data,
94 TxtChunkType type);
95
96
103 static DataBuf keyTXTChunk(const DataBuf& data, bool stripHeader=false);
104
113 static std::string makeMetadataChunk(const std::string& metadata,
114 MetadataId type);
115
116 private:
121 static DataBuf parseTXTChunk(const DataBuf& data,
122 int keysize,
123 TxtChunkType type);
124
134 static void parseChunkContent( Image* pImage,
135 const byte* key,
136 long keySize,
137 const DataBuf arr);
138
149 static std::string makeAsciiTxtChunk(const std::string& keyword,
150 const std::string& text,
151 bool compress);
152
161 static std::string makeUtf8TxtChunk(const std::string& keyword,
162 const std::string& text,
163 bool compress);
164
168 static void zlibUncompress(const byte* compressedText,
169 unsigned int compressedTextSize,
170 DataBuf& arr);
171
175 static std::string zlibCompress(const std::string& text);
176
180 static DataBuf readRawProfile(const DataBuf& text,bool iTXt);
181
186 static std::string writeRawProfile(const std::string& profileData,
187 const char* profileType);
188
189 friend class Exiv2::PngImage;
190
191 }; // class PngChunk
192
193}} // namespace Internal, Exiv2
194
195#endif // #ifndef PNGCHUNK_INT_HPP_
Utility class containing a character array. All it does is to take care of memory allocation and dele...
Definition: types.hpp:193
Abstract base class defining the interface for an image. This is the top-level interface to the Exiv2...
Definition: image.hpp:78
Stateless parser class for data in PNG chunk format. Images use this class to decode and encode PNG-b...
Definition: pngchunk_int.hpp:50
static DataBuf decodeTXTChunk(const DataBuf &data, TxtChunkType type)
Decode PNG tEXt, zTXt, or iTXt chunk data from pImage passed by data buffer data and extract Comment,...
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.
static DataBuf keyTXTChunk(const DataBuf &data, bool stripHeader=false)
Return PNG TXT chunk key as data buffer.
TxtChunkType
Text Chunk types.
Definition: pngchunk_int.hpp:55
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,...
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...
Class to access PNG images. Exif and IPTC metadata are supported directly.
Definition: pngimage.hpp:47
Provides classes and functions to encode and decode Exif and Iptc data. The libexiv2 API consists of ...
Definition: asfvideo.hpp:36
MetadataId
An identifier for each type of metadata.
Definition: types.hpp:108