PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.10.4
GiveWP – Donation Plugin and Fundraising Platform v2.10.4
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / vendor / tecnickcom / tcpdf / include / tcpdf_images.php
give / vendor / tecnickcom / tcpdf / include Last commit date
barcodes 5 years ago sRGB.icc 7 years ago tcpdf_colors.php 5 years ago tcpdf_filters.php 6 years ago tcpdf_font_data.php 7 years ago tcpdf_fonts.php 5 years ago tcpdf_images.php 5 years ago tcpdf_static.php 5 years ago
tcpdf_images.php
358 lines
1 <?php
2 //============================================================+
3 // File name : tcpdf_images.php
4 // Version : 1.0.005
5 // Begin : 2002-08-03
6 // Last Update : 2014-11-15
7 // Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com
8 // License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html)
9 // -------------------------------------------------------------------
10 // Copyright (C) 2002-2014 Nicola Asuni - Tecnick.com LTD
11 //
12 // This file is part of TCPDF software library.
13 //
14 // TCPDF is free software: you can redistribute it and/or modify it
15 // under the terms of the GNU Lesser General Public License as
16 // published by the Free Software Foundation, either version 3 of the
17 // License, or (at your option) any later version.
18 //
19 // TCPDF is distributed in the hope that it will be useful, but
20 // WITHOUT ANY WARRANTY; without even the implied warranty of
21 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
22 // See the GNU Lesser General Public License for more details.
23 //
24 // You should have received a copy of the License
25 // along with TCPDF. If not, see
26 // <http://www.tecnick.com/pagefiles/tcpdf/LICENSE.TXT>.
27 //
28 // See LICENSE.TXT file for more information.
29 // -------------------------------------------------------------------
30 //
31 // Description :
32 // Static image methods used by the TCPDF class.
33 //
34 //============================================================+
35
36 /**
37 * @file
38 * This is a PHP class that contains static image methods for the TCPDF class.<br>
39 * @package com.tecnick.tcpdf
40 * @author Nicola Asuni
41 * @version 1.0.005
42 */
43
44 /**
45 * @class TCPDF_IMAGES
46 * Static image methods used by the TCPDF class.
47 * @package com.tecnick.tcpdf
48 * @brief PHP class for generating PDF documents without requiring external extensions.
49 * @version 1.0.005
50 * @author Nicola Asuni - info@tecnick.com
51 */
52 class TCPDF_IMAGES {
53
54 /**
55 * Array of hinheritable SVG properties.
56 * @since 5.0.000 (2010-05-02)
57 * @public static
58 */
59 public static $svginheritprop = array('clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cursor', 'direction', 'display', 'fill', 'fill-opacity', 'fill-rule', 'font', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'image-rendering', 'kerning', 'letter-spacing', 'marker', 'marker-end', 'marker-mid', 'marker-start', 'pointer-events', 'shape-rendering', 'stroke', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-rendering', 'visibility', 'word-spacing', 'writing-mode');
60
61 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
62
63 /**
64 * Return the image type given the file name or array returned by getimagesize() function.
65 * @param $imgfile (string) image file name
66 * @param $iminfo (array) array of image information returned by getimagesize() function.
67 * @return string image type
68 * @since 4.8.017 (2009-11-27)
69 * @public static
70 */
71 public static function getImageFileType($imgfile, $iminfo=array()) {
72 $type = '';
73 if (isset($iminfo['mime']) AND !empty($iminfo['mime'])) {
74 $mime = explode('/', $iminfo['mime']);
75 if ((count($mime) > 1) AND ($mime[0] == 'image') AND (!empty($mime[1]))) {
76 $type = strtolower(trim($mime[1]));
77 }
78 }
79 if (empty($type)) {
80 $type = strtolower(trim(pathinfo(parse_url($imgfile, PHP_URL_PATH), PATHINFO_EXTENSION)));
81 }
82 if ($type == 'jpg') {
83 $type = 'jpeg';
84 }
85 return $type;
86 }
87
88 /**
89 * Set the transparency for the given GD image.
90 * @param $new_image (image) GD image object
91 * @param $image (image) GD image object.
92 * return GD image object.
93 * @since 4.9.016 (2010-04-20)
94 * @public static
95 */
96 public static function setGDImageTransparency($new_image, $image) {
97 // default transparency color (white)
98 $tcol = array('red' => 255, 'green' => 255, 'blue' => 255);
99 // transparency index
100 $tid = imagecolortransparent($image);
101 $palletsize = imagecolorstotal($image);
102 if (($tid >= 0) AND ($tid < $palletsize)) {
103 // get the colors for the transparency index
104 $tcol = imagecolorsforindex($image, $tid);
105 }
106 $tid = imagecolorallocate($new_image, $tcol['red'], $tcol['green'], $tcol['blue']);
107 imagefill($new_image, 0, 0, $tid);
108 imagecolortransparent($new_image, $tid);
109 return $new_image;
110 }
111
112 /**
113 * Convert the loaded image to a PNG and then return a structure for the PDF creator.
114 * This function requires GD library and write access to the directory defined on K_PATH_CACHE constant.
115 * @param $image (image) Image object.
116 * @param $tempfile (string) Temporary file name.
117 * return image PNG image object.
118 * @since 4.9.016 (2010-04-20)
119 * @public static
120 */
121 public static function _toPNG($image, $tempfile) {
122 // turn off interlaced mode
123 imageinterlace($image, 0);
124 // create temporary PNG image
125 imagepng($image, $tempfile);
126 // remove image from memory
127 imagedestroy($image);
128 // get PNG image data
129 $retvars = self::_parsepng($tempfile);
130 // tidy up by removing temporary image
131 unlink($tempfile);
132 return $retvars;
133 }
134
135 /**
136 * Convert the loaded image to a JPEG and then return a structure for the PDF creator.
137 * This function requires GD library and write access to the directory defined on K_PATH_CACHE constant.
138 * @param $image (image) Image object.
139 * @param $quality (int) JPEG quality.
140 * @param $tempfile (string) Temporary file name.
141 * return image JPEG image object.
142 * @public static
143 */
144 public static function _toJPEG($image, $quality, $tempfile) {
145 imagejpeg($image, $tempfile, $quality);
146 imagedestroy($image);
147 $retvars = self::_parsejpeg($tempfile);
148 // tidy up by removing temporary image
149 unlink($tempfile);
150 return $retvars;
151 }
152
153 /**
154 * Extract info from a JPEG file without using the GD library.
155 * @param $file (string) image file to parse
156 * @return array structure containing the image data
157 * @public static
158 */
159 public static function _parsejpeg($file) {
160 // check if is a local file
161 if (!@TCPDF_STATIC::file_exists($file)) {
162 return false;
163 }
164 $a = getimagesize($file);
165 if (empty($a)) {
166 //Missing or incorrect image file
167 return false;
168 }
169 if ($a[2] != 2) {
170 // Not a JPEG file
171 return false;
172 }
173 // bits per pixel
174 $bpc = isset($a['bits']) ? intval($a['bits']) : 8;
175 // number of image channels
176 if (!isset($a['channels'])) {
177 $channels = 3;
178 } else {
179 $channels = intval($a['channels']);
180 }
181 // default colour space
182 switch ($channels) {
183 case 1: {
184 $colspace = 'DeviceGray';
185 break;
186 }
187 case 3: {
188 $colspace = 'DeviceRGB';
189 break;
190 }
191 case 4: {
192 $colspace = 'DeviceCMYK';
193 break;
194 }
195 default: {
196 $channels = 3;
197 $colspace = 'DeviceRGB';
198 break;
199 }
200 }
201 // get file content
202 $data = file_get_contents($file);
203 // check for embedded ICC profile
204 $icc = array();
205 $offset = 0;
206 while (($pos = strpos($data, "ICC_PROFILE\0", $offset)) !== false) {
207 // get ICC sequence length
208 $length = (TCPDF_STATIC::_getUSHORT($data, ($pos - 2)) - 16);
209 // marker sequence number
210 $msn = max(1, ord($data[($pos + 12)]));
211 // number of markers (total of APP2 used)
212 $nom = max(1, ord($data[($pos + 13)]));
213 // get sequence segment
214 $icc[($msn - 1)] = substr($data, ($pos + 14), $length);
215 // move forward to next sequence
216 $offset = ($pos + 14 + $length);
217 }
218 // order and compact ICC segments
219 if (count($icc) > 0) {
220 ksort($icc);
221 $icc = implode('', $icc);
222 if ((ord($icc[36]) != 0x61) OR (ord($icc[37]) != 0x63) OR (ord($icc[38]) != 0x73) OR (ord($icc[39]) != 0x70)) {
223 // invalid ICC profile
224 $icc = false;
225 }
226 } else {
227 $icc = false;
228 }
229 return array('w' => $a[0], 'h' => $a[1], 'ch' => $channels, 'icc' => $icc, 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'DCTDecode', 'data' => $data);
230 }
231
232 /**
233 * Extract info from a PNG file without using the GD library.
234 * @param $file (string) image file to parse
235 * @return array structure containing the image data
236 * @public static
237 */
238 public static function _parsepng($file) {
239 $f = @fopen($file, 'rb');
240 if ($f === false) {
241 // Can't open image file
242 return false;
243 }
244 //Check signature
245 if (fread($f, 8) != chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) {
246 // Not a PNG file
247 return false;
248 }
249 //Read header chunk
250 fread($f, 4);
251 if (fread($f, 4) != 'IHDR') {
252 //Incorrect PNG file
253 return false;
254 }
255 $w = TCPDF_STATIC::_freadint($f);
256 $h = TCPDF_STATIC::_freadint($f);
257 $bpc = ord(fread($f, 1));
258 $ct = ord(fread($f, 1));
259 if ($ct == 0) {
260 $colspace = 'DeviceGray';
261 } elseif ($ct == 2) {
262 $colspace = 'DeviceRGB';
263 } elseif ($ct == 3) {
264 $colspace = 'Indexed';
265 } else {
266 // alpha channel
267 fclose($f);
268 return 'pngalpha';
269 }
270 if (ord(fread($f, 1)) != 0) {
271 // Unknown compression method
272 fclose($f);
273 return false;
274 }
275 if (ord(fread($f, 1)) != 0) {
276 // Unknown filter method
277 fclose($f);
278 return false;
279 }
280 if (ord(fread($f, 1)) != 0) {
281 // Interlacing not supported
282 fclose($f);
283 return false;
284 }
285 fread($f, 4);
286 $channels = ($ct == 2 ? 3 : 1);
287 $parms = '/DecodeParms << /Predictor 15 /Colors '.$channels.' /BitsPerComponent '.$bpc.' /Columns '.$w.' >>';
288 //Scan chunks looking for palette, transparency and image data
289 $pal = '';
290 $trns = '';
291 $data = '';
292 $icc = false;
293 $n = TCPDF_STATIC::_freadint($f);
294 do {
295 $type = fread($f, 4);
296 if ($type == 'PLTE') {
297 // read palette
298 $pal = TCPDF_STATIC::rfread($f, $n);
299 fread($f, 4);
300 } elseif ($type == 'tRNS') {
301 // read transparency info
302 $t = TCPDF_STATIC::rfread($f, $n);
303 if ($ct == 0) { // DeviceGray
304 $trns = array(ord($t[1]));
305 } elseif ($ct == 2) { // DeviceRGB
306 $trns = array(ord($t[1]), ord($t[3]), ord($t[5]));
307 } else { // Indexed
308 if ($n > 0) {
309 $trns = array();
310 for ($i = 0; $i < $n; ++ $i) {
311 $trns[] = ord($t[$i]);
312 }
313 }
314 }
315 fread($f, 4);
316 } elseif ($type == 'IDAT') {
317 // read image data block
318 $data .= TCPDF_STATIC::rfread($f, $n);
319 fread($f, 4);
320 } elseif ($type == 'iCCP') {
321 // skip profile name
322 $len = 0;
323 while ((ord(fread($f, 1)) != 0) AND ($len < 80)) {
324 ++$len;
325 }
326 // get compression method
327 if (ord(fread($f, 1)) != 0) {
328 // Unknown filter method
329 fclose($f);
330 return false;
331 }
332 // read ICC Color Profile
333 $icc = TCPDF_STATIC::rfread($f, ($n - $len - 2));
334 // decompress profile
335 $icc = gzuncompress($icc);
336 fread($f, 4);
337 } elseif ($type == 'IEND') {
338 break;
339 } else {
340 TCPDF_STATIC::rfread($f, $n + 4);
341 }
342 $n = TCPDF_STATIC::_freadint($f);
343 } while ($n);
344 if (($colspace == 'Indexed') AND (empty($pal))) {
345 // Missing palette
346 fclose($f);
347 return false;
348 }
349 fclose($f);
350 return array('w' => $w, 'h' => $h, 'ch' => $channels, 'icc' => $icc, 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'FlateDecode', 'parms' => $parms, 'pal' => $pal, 'trns' => $trns, 'data' => $data);
351 }
352
353 } // END OF TCPDF_IMAGES CLASS
354
355 //============================================================+
356 // END OF FILE
357 //============================================================+
358