]>
Commit | Line | Data |
---|---|---|
824f8c45 | 1 | <?php |
2 | //============================================================+ | |
3 | // File name : tcpdf_colors.php | |
4 | // Version : 1.0.004 | |
5 | // Begin : 2002-04-09 | |
6 | // Last Update : 2014-04-25 | |
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-2013 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 GNU Lesser General Public License | |
25 | // along with TCPDF. If not, see <http://www.gnu.org/licenses/>. | |
26 | // | |
27 | // See LICENSE.TXT file for more information. | |
28 | // ------------------------------------------------------------------- | |
29 | // | |
30 | // Description : Array of WEB safe colors | |
31 | // | |
32 | //============================================================+ | |
33 | ||
34 | /** | |
35 | * @file | |
36 | * PHP color class for TCPDF | |
37 | * @author Nicola Asuni | |
38 | * @package com.tecnick.tcpdf | |
39 | */ | |
40 | ||
41 | /** | |
42 | * @class TCPDF_COLORS | |
43 | * PHP color class for TCPDF | |
44 | * @package com.tecnick.tcpdf | |
45 | * @version 1.0.004 | |
46 | * @author Nicola Asuni - info@tecnick.com | |
47 | */ | |
48 | class TCPDF_COLORS { | |
49 | ||
50 | /** | |
51 | * Array of WEB safe colors | |
52 | * @public static | |
53 | */ | |
54 | public static $webcolor = array ( | |
55 | 'aliceblue' => 'f0f8ff', | |
56 | 'antiquewhite' => 'faebd7', | |
57 | 'aqua' => '00ffff', | |
58 | 'aquamarine' => '7fffd4', | |
59 | 'azure' => 'f0ffff', | |
60 | 'beige' => 'f5f5dc', | |
61 | 'bisque' => 'ffe4c4', | |
62 | 'black' => '000000', | |
63 | 'blanchedalmond' => 'ffebcd', | |
64 | 'blue' => '0000ff', | |
65 | 'blueviolet' => '8a2be2', | |
66 | 'brown' => 'a52a2a', | |
67 | 'burlywood' => 'deb887', | |
68 | 'cadetblue' => '5f9ea0', | |
69 | 'chartreuse' => '7fff00', | |
70 | 'chocolate' => 'd2691e', | |
71 | 'coral' => 'ff7f50', | |
72 | 'cornflowerblue' => '6495ed', | |
73 | 'cornsilk' => 'fff8dc', | |
74 | 'crimson' => 'dc143c', | |
75 | 'cyan' => '00ffff', | |
76 | 'darkblue' => '00008b', | |
77 | 'darkcyan' => '008b8b', | |
78 | 'darkgoldenrod' => 'b8860b', | |
79 | 'dkgray' => 'a9a9a9', | |
80 | 'darkgray' => 'a9a9a9', | |
81 | 'darkgrey' => 'a9a9a9', | |
82 | 'darkgreen' => '006400', | |
83 | 'darkkhaki' => 'bdb76b', | |
84 | 'darkmagenta' => '8b008b', | |
85 | 'darkolivegreen' => '556b2f', | |
86 | 'darkorange' => 'ff8c00', | |
87 | 'darkorchid' => '9932cc', | |
88 | 'darkred' => '8b0000', | |
89 | 'darksalmon' => 'e9967a', | |
90 | 'darkseagreen' => '8fbc8f', | |
91 | 'darkslateblue' => '483d8b', | |
92 | 'darkslategray' => '2f4f4f', | |
93 | 'darkslategrey' => '2f4f4f', | |
94 | 'darkturquoise' => '00ced1', | |
95 | 'darkviolet' => '9400d3', | |
96 | 'deeppink' => 'ff1493', | |
97 | 'deepskyblue' => '00bfff', | |
98 | 'dimgray' => '696969', | |
99 | 'dimgrey' => '696969', | |
100 | 'dodgerblue' => '1e90ff', | |
101 | 'firebrick' => 'b22222', | |
102 | 'floralwhite' => 'fffaf0', | |
103 | 'forestgreen' => '228b22', | |
104 | 'fuchsia' => 'ff00ff', | |
105 | 'gainsboro' => 'dcdcdc', | |
106 | 'ghostwhite' => 'f8f8ff', | |
107 | 'gold' => 'ffd700', | |
108 | 'goldenrod' => 'daa520', | |
109 | 'gray' => '808080', | |
110 | 'grey' => '808080', | |
111 | 'green' => '008000', | |
112 | 'greenyellow' => 'adff2f', | |
113 | 'honeydew' => 'f0fff0', | |
114 | 'hotpink' => 'ff69b4', | |
115 | 'indianred' => 'cd5c5c', | |
116 | 'indigo' => '4b0082', | |
117 | 'ivory' => 'fffff0', | |
118 | 'khaki' => 'f0e68c', | |
119 | 'lavender' => 'e6e6fa', | |
120 | 'lavenderblush' => 'fff0f5', | |
121 | 'lawngreen' => '7cfc00', | |
122 | 'lemonchiffon' => 'fffacd', | |
123 | 'lightblue' => 'add8e6', | |
124 | 'lightcoral' => 'f08080', | |
125 | 'lightcyan' => 'e0ffff', | |
126 | 'lightgoldenrodyellow' => 'fafad2', | |
127 | 'ltgray' => 'd3d3d3', | |
128 | 'lightgray' => 'd3d3d3', | |
129 | 'lightgrey' => 'd3d3d3', | |
130 | 'lightgreen' => '90ee90', | |
131 | 'lightpink' => 'ffb6c1', | |
132 | 'lightsalmon' => 'ffa07a', | |
133 | 'lightseagreen' => '20b2aa', | |
134 | 'lightskyblue' => '87cefa', | |
135 | 'lightslategray' => '778899', | |
136 | 'lightslategrey' => '778899', | |
137 | 'lightsteelblue' => 'b0c4de', | |
138 | 'lightyellow' => 'ffffe0', | |
139 | 'lime' => '00ff00', | |
140 | 'limegreen' => '32cd32', | |
141 | 'linen' => 'faf0e6', | |
142 | 'magenta' => 'ff00ff', | |
143 | 'maroon' => '800000', | |
144 | 'mediumaquamarine' => '66cdaa', | |
145 | 'mediumblue' => '0000cd', | |
146 | 'mediumorchid' => 'ba55d3', | |
147 | 'mediumpurple' => '9370d8', | |
148 | 'mediumseagreen' => '3cb371', | |
149 | 'mediumslateblue' => '7b68ee', | |
150 | 'mediumspringgreen' => '00fa9a', | |
151 | 'mediumturquoise' => '48d1cc', | |
152 | 'mediumvioletred' => 'c71585', | |
153 | 'midnightblue' => '191970', | |
154 | 'mintcream' => 'f5fffa', | |
155 | 'mistyrose' => 'ffe4e1', | |
156 | 'moccasin' => 'ffe4b5', | |
157 | 'navajowhite' => 'ffdead', | |
158 | 'navy' => '000080', | |
159 | 'oldlace' => 'fdf5e6', | |
160 | 'olive' => '808000', | |
161 | 'olivedrab' => '6b8e23', | |
162 | 'orange' => 'ffa500', | |
163 | 'orangered' => 'ff4500', | |
164 | 'orchid' => 'da70d6', | |
165 | 'palegoldenrod' => 'eee8aa', | |
166 | 'palegreen' => '98fb98', | |
167 | 'paleturquoise' => 'afeeee', | |
168 | 'palevioletred' => 'd87093', | |
169 | 'papayawhip' => 'ffefd5', | |
170 | 'peachpuff' => 'ffdab9', | |
171 | 'peru' => 'cd853f', | |
172 | 'pink' => 'ffc0cb', | |
173 | 'plum' => 'dda0dd', | |
174 | 'powderblue' => 'b0e0e6', | |
175 | 'purple' => '800080', | |
176 | 'red' => 'ff0000', | |
177 | 'rosybrown' => 'bc8f8f', | |
178 | 'royalblue' => '4169e1', | |
179 | 'saddlebrown' => '8b4513', | |
180 | 'salmon' => 'fa8072', | |
181 | 'sandybrown' => 'f4a460', | |
182 | 'seagreen' => '2e8b57', | |
183 | 'seashell' => 'fff5ee', | |
184 | 'sienna' => 'a0522d', | |
185 | 'silver' => 'c0c0c0', | |
186 | 'skyblue' => '87ceeb', | |
187 | 'slateblue' => '6a5acd', | |
188 | 'slategray' => '708090', | |
189 | 'slategrey' => '708090', | |
190 | 'snow' => 'fffafa', | |
191 | 'springgreen' => '00ff7f', | |
192 | 'steelblue' => '4682b4', | |
193 | 'tan' => 'd2b48c', | |
194 | 'teal' => '008080', | |
195 | 'thistle' => 'd8bfd8', | |
196 | 'tomato' => 'ff6347', | |
197 | 'turquoise' => '40e0d0', | |
198 | 'violet' => 'ee82ee', | |
199 | 'wheat' => 'f5deb3', | |
200 | 'white' => 'ffffff', | |
201 | 'whitesmoke' => 'f5f5f5', | |
202 | 'yellow' => 'ffff00', | |
203 | 'yellowgreen' => '9acd32' | |
204 | ); // end of web colors | |
205 | ||
206 | /** | |
207 | * Array of valid JavaScript color names | |
208 | * @public static | |
209 | */ | |
210 | public static $jscolor = array ('transparent', 'black', 'white', 'red', 'green', 'blue', 'cyan', 'magenta', 'yellow', 'dkGray', 'gray', 'ltGray'); | |
211 | ||
212 | /** | |
213 | * Array of Spot colors (C,M,Y,K,name) | |
214 | * Color keys must be in lowercase and without spaces. | |
215 | * As long as no open standard for spot colours exists, you have to buy a colour book by one of the colour manufacturers and insert the values and names of spot colours directly. | |
216 | * Common industry standard spot colors are: ANPA-COLOR, DIC, FOCOLTONE, GCMI, HKS, PANTONE, TOYO, TRUMATCH. | |
217 | * @public static | |
218 | */ | |
219 | public static $spotcolor = array ( | |
220 | // special registration colors | |
221 | 'none' => array( 0, 0, 0, 0, 'None'), | |
222 | 'all' => array(100, 100, 100, 100, 'All'), | |
223 | // standard CMYK colors | |
224 | 'cyan' => array(100, 0, 0, 0, 'Cyan'), | |
225 | 'magenta' => array( 0, 100, 0, 0, 'Magenta'), | |
226 | 'yellow' => array( 0, 0, 100, 0, 'Yellow'), | |
227 | 'key' => array( 0, 0, 0, 100, 'Key'), | |
228 | // alias | |
229 | 'white' => array( 0, 0, 0, 0, 'White'), | |
230 | 'black' => array( 0, 0, 0, 100, 'Black'), | |
231 | // standard RGB colors | |
232 | 'red' => array( 0, 100, 100, 0, 'Red'), | |
233 | 'green' => array(100, 0, 100, 0, 'Green'), | |
234 | 'blue' => array(100, 100, 0, 0, 'Blue'), | |
235 | // Add here standard spot colors or dynamically define them with AddSpotColor() | |
236 | // ... | |
237 | ); // end of spot colors | |
238 | ||
239 | // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
240 | ||
241 | /** | |
242 | * Return the Spot color array. | |
243 | * @param $name (string) Name of the spot color. | |
244 | * @param $spotc (array) Reference to an array of spot colors. | |
245 | * @return (array) Spot color array or false if not defined. | |
246 | * @since 5.9.125 (2011-10-03) | |
247 | * @public static | |
248 | */ | |
249 | public static function getSpotColor($name, &$spotc) { | |
250 | if (isset($spotc[$name])) { | |
251 | return $spotc[$name]; | |
252 | } | |
253 | $color = preg_replace('/[\s]*/', '', $name); // remove extra spaces | |
254 | $color = strtolower($color); | |
255 | if (isset(self::$spotcolor[$color])) { | |
256 | if (!isset($spotc[$name])) { | |
257 | $i = (1 + count($spotc)); | |
258 | $spotc[$name] = array('C' => self::$spotcolor[$color][0], 'M' => self::$spotcolor[$color][1], 'Y' => self::$spotcolor[$color][2], 'K' => self::$spotcolor[$color][3], 'name' => self::$spotcolor[$color][4], 'i' => $i); | |
259 | } | |
260 | return $spotc[self::$spotcolor[$color][4]]; | |
261 | } | |
262 | return false; | |
263 | } | |
264 | ||
265 | /** | |
266 | * Returns an array (RGB or CMYK) from an html color name, or a six-digit (i.e. #3FE5AA), or three-digit (i.e. #7FF) hexadecimal color, or a javascript color array, or javascript color name. | |
267 | * @param $hcolor (string) HTML color. | |
268 | * @param $spotc (array) Reference to an array of spot colors. | |
269 | * @param $defcol (array) Color to return in case of error. | |
270 | * @return array RGB or CMYK color, or false in case of error. | |
271 | * @public static | |
272 | */ | |
273 | public static function convertHTMLColorToDec($hcolor, &$spotc, $defcol=array('R'=>128,'G'=>128,'B'=>128)) { | |
274 | $color = preg_replace('/[\s]*/', '', $hcolor); // remove extra spaces | |
275 | $color = strtolower($color); | |
276 | // check for javascript color array syntax | |
277 | if (strpos($color, '[') !== false) { | |
278 | if (preg_match('/[\[][\"\'](t|g|rgb|cmyk)[\"\'][\,]?([0-9\.]*)[\,]?([0-9\.]*)[\,]?([0-9\.]*)[\,]?([0-9\.]*)[\]]/', $color, $m) > 0) { | |
279 | $returncolor = array(); | |
280 | switch ($m[1]) { | |
281 | case 'cmyk': { | |
282 | // RGB | |
283 | $returncolor['C'] = max(0, min(100, (floatval($m[2]) * 100))); | |
284 | $returncolor['M'] = max(0, min(100, (floatval($m[3]) * 100))); | |
285 | $returncolor['Y'] = max(0, min(100, (floatval($m[4]) * 100))); | |
286 | $returncolor['K'] = max(0, min(100, (floatval($m[5]) * 100))); | |
287 | break; | |
288 | } | |
289 | case 'rgb': { | |
290 | // RGB | |
291 | $returncolor['R'] = max(0, min(255, (floatval($m[2]) * 255))); | |
292 | $returncolor['G'] = max(0, min(255, (floatval($m[3]) * 255))); | |
293 | $returncolor['B'] = max(0, min(255, (floatval($m[4]) * 255))); | |
294 | break; | |
295 | } | |
296 | case 'g': { | |
297 | // grayscale | |
298 | $returncolor['G'] = max(0, min(255, (floatval($m[2]) * 255))); | |
299 | break; | |
300 | } | |
301 | case 't': | |
302 | default: { | |
303 | // transparent (empty array) | |
304 | break; | |
305 | } | |
306 | } | |
307 | return $returncolor; | |
308 | } | |
309 | } elseif ((substr($color, 0, 4) != 'cmyk') AND (substr($color, 0, 3) != 'rgb') AND (($dotpos = strpos($color, '.')) !== false)) { | |
310 | // remove class parent (i.e.: color.red) | |
311 | $color = substr($color, ($dotpos + 1)); | |
312 | if ($color == 'transparent') { | |
313 | // transparent (empty array) | |
314 | return array(); | |
315 | } | |
316 | } | |
317 | if (strlen($color) == 0) { | |
318 | return $defcol; | |
319 | } | |
320 | // RGB ARRAY | |
321 | if (substr($color, 0, 3) == 'rgb') { | |
322 | $codes = substr($color, 4); | |
323 | $codes = str_replace(')', '', $codes); | |
324 | $returncolor = explode(',', $codes); | |
325 | foreach ($returncolor as $key => $val) { | |
326 | if (strpos($val, '%') > 0) { | |
327 | // percentage | |
328 | $returncolor[$key] = (255 * intval($val) / 100); | |
329 | } else { | |
330 | $returncolor[$key] = intval($val); | |
331 | } | |
332 | // normalize value | |
333 | $returncolor[$key] = max(0, min(255, $returncolor[$key])); | |
334 | } | |
335 | return $returncolor; | |
336 | } | |
337 | // CMYK ARRAY | |
338 | if (substr($color, 0, 4) == 'cmyk') { | |
339 | $codes = substr($color, 5); | |
340 | $codes = str_replace(')', '', $codes); | |
341 | $returncolor = explode(',', $codes); | |
342 | foreach ($returncolor as $key => $val) { | |
343 | if (strpos($val, '%') !== false) { | |
344 | // percentage | |
345 | $returncolor[$key] = (100 * intval($val) / 100); | |
346 | } else { | |
347 | $returncolor[$key] = intval($val); | |
348 | } | |
349 | // normalize value | |
350 | $returncolor[$key] = max(0, min(100, $returncolor[$key])); | |
351 | } | |
352 | return $returncolor; | |
353 | } | |
354 | if ($color[0] != '#') { | |
355 | // COLOR NAME | |
356 | if (isset(self::$webcolor[$color])) { | |
357 | // web color | |
358 | $color_code = self::$webcolor[$color]; | |
359 | } else { | |
360 | // spot color | |
361 | $returncolor = self::getSpotColor($color, $spotc); | |
362 | if ($returncolor === false) { | |
363 | $returncolor = $defcol; | |
364 | } | |
365 | return $returncolor; | |
366 | } | |
367 | } else { | |
368 | $color_code = substr($color, 1); | |
369 | } | |
370 | // HEXADECIMAL REPRESENTATION | |
371 | switch (strlen($color_code)) { | |
372 | case 3: { | |
373 | // 3-digit RGB hexadecimal representation | |
374 | $r = substr($color_code, 0, 1); | |
375 | $g = substr($color_code, 1, 1); | |
376 | $b = substr($color_code, 2, 1); | |
377 | $returncolor = array(); | |
378 | $returncolor['R'] = max(0, min(255, hexdec($r.$r))); | |
379 | $returncolor['G'] = max(0, min(255, hexdec($g.$g))); | |
380 | $returncolor['B'] = max(0, min(255, hexdec($b.$b))); | |
381 | break; | |
382 | } | |
383 | case 6: { | |
384 | // 6-digit RGB hexadecimal representation | |
385 | $returncolor = array(); | |
386 | $returncolor['R'] = max(0, min(255, hexdec(substr($color_code, 0, 2)))); | |
387 | $returncolor['G'] = max(0, min(255, hexdec(substr($color_code, 2, 2)))); | |
388 | $returncolor['B'] = max(0, min(255, hexdec(substr($color_code, 4, 2)))); | |
389 | break; | |
390 | } | |
391 | case 8: { | |
392 | // 8-digit CMYK hexadecimal representation | |
393 | $returncolor = array(); | |
394 | $returncolor['C'] = max(0, min(100, round(hexdec(substr($color_code, 0, 2)) / 2.55))); | |
395 | $returncolor['M'] = max(0, min(100, round(hexdec(substr($color_code, 2, 2)) / 2.55))); | |
396 | $returncolor['Y'] = max(0, min(100, round(hexdec(substr($color_code, 4, 2)) / 2.55))); | |
397 | $returncolor['K'] = max(0, min(100, round(hexdec(substr($color_code, 6, 2)) / 2.55))); | |
398 | break; | |
399 | } | |
400 | default: { | |
401 | $returncolor = $defcol; | |
402 | break; | |
403 | } | |
404 | } | |
405 | return $returncolor; | |
406 | } | |
407 | ||
408 | /** | |
409 | * Convert a color array into a string representation. | |
410 | * @param $c (array) Array of colors. | |
411 | * @return (string) The color array representation. | |
412 | * @since 5.9.137 (2011-12-01) | |
413 | * @public static | |
414 | */ | |
415 | public static function getColorStringFromArray($c) { | |
416 | $c = array_values($c); | |
417 | $color = '['; | |
418 | switch (count($c)) { | |
419 | case 4: { | |
420 | // CMYK | |
421 | $color .= sprintf('%F %F %F %F', (max(0, min(100, floatval($c[0]))) / 100), (max(0, min(100, floatval($c[1]))) / 100), (max(0, min(100, floatval($c[2]))) / 100), (max(0, min(100, floatval($c[3]))) / 100)); | |
422 | break; | |
423 | } | |
424 | case 3: { | |
425 | // RGB | |
426 | $color .= sprintf('%F %F %F', (max(0, min(255, floatval($c[0]))) / 255), (max(0, min(255, floatval($c[1]))) / 255), (max(0, min(255, floatval($c[2]))) / 255)); | |
427 | break; | |
428 | } | |
429 | case 1: { | |
430 | // grayscale | |
431 | $color .= sprintf('%F', (max(0, min(255, floatval($c[0]))) / 255)); | |
432 | break; | |
433 | } | |
434 | } | |
435 | $color .= ']'; | |
436 | return $color; | |
437 | } | |
438 | ||
439 | /** | |
440 | * Convert color to javascript color. | |
441 | * @param $color (string) color name or "#RRGGBB" | |
442 | * @protected | |
443 | * @since 2.1.002 (2008-02-12) | |
444 | * @public static | |
445 | */ | |
446 | public static function _JScolor($color) { | |
447 | if (substr($color, 0, 1) == '#') { | |
448 | return sprintf("['RGB',%F,%F,%F]", (hexdec(substr($color, 1, 2)) / 255), (hexdec(substr($color, 3, 2)) / 255), (hexdec(substr($color, 5, 2)) / 255)); | |
449 | } | |
450 | if (!in_array($color, self::$jscolor)) { | |
451 | // default transparent color | |
452 | $color = $jscolor[0]; | |
453 | } | |
454 | return 'color.'.$color; | |
455 | } | |
456 | ||
457 | ||
458 | } // END OF TCPDF_COLORS CLASS | |
459 | ||
460 | //============================================================+ | |
461 | // END OF FILE | |
462 | //============================================================+ |