1 | <?php |
||
2 | |||
3 | /** |
||
4 | * JPGraph v4.0.3 |
||
5 | */ |
||
6 | |||
7 | namespace Amenadiel\JpGraph\Util; |
||
8 | |||
9 | /** |
||
10 | * File: JPGRAPH_RGB.INC.PHP |
||
11 | * // Description: Class to handle RGb color space specification and |
||
12 | * // named colors |
||
13 | * // Created: 2001-01-08 (Refactored to separate file 2008-08-01) |
||
14 | * // Ver: $Id: jpgraph_rgb.inc.php 1893 2009-10-02 23:15:25Z ljp $ |
||
15 | * // |
||
16 | * // Copyright (c) Asial Corporation. All rights reserved. |
||
17 | */ |
||
18 | |||
19 | /** |
||
20 | * @class RGB |
||
21 | * // Description: Color definitions as RGB triples |
||
22 | */ |
||
23 | class RGB |
||
24 | { |
||
25 | public $rgb_table; |
||
26 | public $img; |
||
27 | |||
28 | public function __construct($aImg = null) |
||
29 | { |
||
30 | $this->img = $aImg; |
||
31 | |||
32 | // Conversion array between color names and RGB |
||
33 | $this->rgb_table = [ |
||
34 | 'aqua' => [0, 255, 255], |
||
35 | 'lime' => [0, 255, 0], |
||
36 | 'teal' => [0, 128, 128], |
||
37 | 'whitesmoke' => [245, 245, 245], |
||
38 | 'gainsboro' => [220, 220, 220], |
||
39 | 'oldlace' => [253, 245, 230], |
||
40 | 'linen' => [250, 240, 230], |
||
41 | 'antiquewhite' => [250, 235, 215], |
||
42 | 'papayawhip' => [255, 239, 213], |
||
43 | 'blanchedalmond' => [255, 235, 205], |
||
44 | 'bisque' => [255, 228, 196], |
||
45 | 'peachpuff' => [255, 218, 185], |
||
46 | 'navajowhite' => [255, 222, 173], |
||
47 | 'moccasin' => [255, 228, 181], |
||
48 | 'cornsilk' => [255, 248, 220], |
||
49 | 'ivory' => [255, 255, 240], |
||
50 | 'lemonchiffon' => [255, 250, 205], |
||
51 | 'seashell' => [255, 245, 238], |
||
52 | 'mintcream' => [245, 255, 250], |
||
53 | 'azure' => [240, 255, 255], |
||
54 | 'aliceblue' => [240, 248, 255], |
||
55 | 'lavender' => [230, 230, 250], |
||
56 | 'lavenderblush' => [255, 240, 245], |
||
57 | 'mistyrose' => [255, 228, 225], |
||
58 | 'white' => [255, 255, 255], |
||
59 | 'black' => [0, 0, 0], |
||
60 | 'darkslategray' => [47, 79, 79], |
||
61 | 'dimgray' => [105, 105, 105], |
||
62 | 'slategray' => [112, 128, 144], |
||
63 | 'lightslategray' => [119, 136, 153], |
||
64 | 'gray' => [190, 190, 190], |
||
65 | 'lightgray' => [211, 211, 211], |
||
66 | 'midnightblue' => [25, 25, 112], |
||
67 | 'navy' => [0, 0, 128], |
||
68 | 'indigo' => [75, 0, 130], |
||
69 | 'electricindigo' => [102, 0, 255], |
||
70 | 'deepindigo' => [138, 43, 226], |
||
71 | 'pigmentindigo' => [75, 0, 130], |
||
72 | 'indigodye' => [0, 65, 106], |
||
73 | 'cornflowerblue' => [100, 149, 237], |
||
74 | 'darkslateblue' => [72, 61, 139], |
||
75 | 'slateblue' => [106, 90, 205], |
||
76 | 'mediumslateblue' => [123, 104, 238], |
||
77 | 'lightslateblue' => [132, 112, 255], |
||
78 | 'mediumblue' => [0, 0, 205], |
||
79 | 'royalblue' => [65, 105, 225], |
||
80 | 'blue' => [0, 0, 255], |
||
81 | 'dodgerblue' => [30, 144, 255], |
||
82 | 'deepskyblue' => [0, 191, 255], |
||
83 | 'skyblue' => [135, 206, 235], |
||
84 | 'lightskyblue' => [135, 206, 250], |
||
85 | 'steelblue' => [70, 130, 180], |
||
86 | 'lightred' => [211, 167, 168], |
||
87 | 'lightsteelblue' => [176, 196, 222], |
||
88 | 'lightblue' => [173, 216, 230], |
||
89 | 'powderblue' => [176, 224, 230], |
||
90 | 'paleturquoise' => [175, 238, 238], |
||
91 | 'darkturquoise' => [0, 206, 209], |
||
92 | 'mediumturquoise' => [72, 209, 204], |
||
93 | 'turquoise' => [64, 224, 208], |
||
94 | 'cyan' => [0, 255, 255], |
||
95 | 'lightcyan' => [224, 255, 255], |
||
96 | 'cadetblue' => [95, 158, 160], |
||
97 | 'mediumaquamarine' => [102, 205, 170], |
||
98 | 'aquamarine' => [127, 255, 212], |
||
99 | 'darkgreen' => [0, 100, 0], |
||
100 | 'darkolivegreen' => [85, 107, 47], |
||
101 | 'darkseagreen' => [143, 188, 143], |
||
102 | 'seagreen' => [46, 139, 87], |
||
103 | 'mediumseagreen' => [60, 179, 113], |
||
104 | 'lightseagreen' => [32, 178, 170], |
||
105 | 'palegreen' => [152, 251, 152], |
||
106 | 'springgreen' => [0, 255, 127], |
||
107 | 'lawngreen' => [124, 252, 0], |
||
108 | 'green' => [0, 255, 0], |
||
109 | 'chartreuse' => [127, 255, 0], |
||
110 | 'mediumspringgreen' => [0, 250, 154], |
||
111 | 'greenyellow' => [173, 255, 47], |
||
112 | 'limegreen' => [50, 205, 50], |
||
113 | 'yellowgreen' => [154, 205, 50], |
||
114 | 'forestgreen' => [34, 139, 34], |
||
115 | 'olivedrab' => [107, 142, 35], |
||
116 | 'darkkhaki' => [189, 183, 107], |
||
117 | 'khaki' => [240, 230, 140], |
||
118 | 'palegoldenrod' => [238, 232, 170], |
||
119 | 'lightgoldenrodyellow' => [250, 250, 210], |
||
120 | 'lightyellow' => [255, 255, 200], |
||
121 | 'yellow' => [255, 255, 0], |
||
122 | 'gold' => [255, 215, 0], |
||
123 | 'lightgoldenrod' => [238, 221, 130], |
||
124 | 'goldenrod' => [218, 165, 32], |
||
125 | 'darkgoldenrod' => [184, 134, 11], |
||
126 | 'rosybrown' => [188, 143, 143], |
||
127 | 'indianred' => [205, 92, 92], |
||
128 | 'saddlebrown' => [139, 69, 19], |
||
129 | 'sienna' => [160, 82, 45], |
||
130 | 'peru' => [205, 133, 63], |
||
131 | 'burlywood' => [222, 184, 135], |
||
132 | 'beige' => [245, 245, 220], |
||
133 | 'wheat' => [245, 222, 179], |
||
134 | 'sandybrown' => [244, 164, 96], |
||
135 | 'tan' => [210, 180, 140], |
||
136 | 'chocolate' => [210, 105, 30], |
||
137 | 'firebrick' => [178, 34, 34], |
||
138 | 'brown' => [165, 42, 42], |
||
139 | 'darksalmon' => [233, 150, 122], |
||
140 | 'salmon' => [250, 128, 114], |
||
141 | 'lightsalmon' => [255, 160, 122], |
||
142 | 'orange' => [255, 165, 0], |
||
143 | 'darkorange' => [255, 140, 0], |
||
144 | 'coral' => [255, 127, 80], |
||
145 | 'lightcoral' => [240, 128, 128], |
||
146 | 'tomato' => [255, 99, 71], |
||
147 | 'orangered' => [255, 69, 0], |
||
148 | 'red' => [255, 0, 0], |
||
149 | 'hotpink' => [255, 105, 180], |
||
150 | 'deeppink' => [255, 20, 147], |
||
151 | 'pink' => [255, 192, 203], |
||
152 | 'lightpink' => [255, 182, 193], |
||
153 | 'palevioletred' => [219, 112, 147], |
||
154 | 'maroon' => [176, 48, 96], |
||
155 | 'mediumvioletred' => [199, 21, 133], |
||
156 | 'violetred' => [208, 32, 144], |
||
157 | 'magenta' => [255, 0, 255], |
||
158 | 'violet' => [238, 130, 238], |
||
159 | 'plum' => [221, 160, 221], |
||
160 | 'orchid' => [218, 112, 214], |
||
161 | 'mediumorchid' => [186, 85, 211], |
||
162 | 'darkorchid' => [153, 50, 204], |
||
163 | 'darkviolet' => [148, 0, 211], |
||
164 | 'blueviolet' => [138, 43, 226], |
||
165 | 'purple' => [160, 32, 240], |
||
166 | 'mediumpurple' => [147, 112, 219], |
||
167 | 'thistle' => [216, 191, 216], |
||
168 | 'snow1' => [255, 250, 250], |
||
169 | 'snow2' => [238, 233, 233], |
||
170 | 'snow3' => [205, 201, 201], |
||
171 | 'snow4' => [139, 137, 137], |
||
172 | 'seashell1' => [255, 245, 238], |
||
173 | 'seashell2' => [238, 229, 222], |
||
174 | 'seashell3' => [205, 197, 191], |
||
175 | 'seashell4' => [139, 134, 130], |
||
176 | 'AntiqueWhite1' => [255, 239, 219], |
||
177 | 'AntiqueWhite2' => [238, 223, 204], |
||
178 | 'AntiqueWhite3' => [205, 192, 176], |
||
179 | 'AntiqueWhite4' => [139, 131, 120], |
||
180 | 'bisque1' => [255, 228, 196], |
||
181 | 'bisque2' => [238, 213, 183], |
||
182 | 'bisque3' => [205, 183, 158], |
||
183 | 'bisque4' => [139, 125, 107], |
||
184 | 'peachPuff1' => [255, 218, 185], |
||
185 | 'peachpuff2' => [238, 203, 173], |
||
186 | 'peachpuff3' => [205, 175, 149], |
||
187 | 'peachpuff4' => [139, 119, 101], |
||
188 | 'navajowhite1' => [255, 222, 173], |
||
189 | 'navajowhite2' => [238, 207, 161], |
||
190 | 'navajowhite3' => [205, 179, 139], |
||
191 | 'navajowhite4' => [139, 121, 94], |
||
192 | 'lemonchiffon1' => [255, 250, 205], |
||
193 | 'lemonchiffon2' => [238, 233, 191], |
||
194 | 'lemonchiffon3' => [205, 201, 165], |
||
195 | 'lemonchiffon4' => [139, 137, 112], |
||
196 | 'ivory1' => [255, 255, 240], |
||
197 | 'ivory2' => [238, 238, 224], |
||
198 | 'ivory3' => [205, 205, 193], |
||
199 | 'ivory4' => [139, 139, 131], |
||
200 | 'honeydew' => [193, 205, 193], |
||
201 | 'lavenderblush1' => [255, 240, 245], |
||
202 | 'lavenderblush2' => [238, 224, 229], |
||
203 | 'lavenderblush3' => [205, 193, 197], |
||
204 | 'lavenderblush4' => [139, 131, 134], |
||
205 | 'mistyrose1' => [255, 228, 225], |
||
206 | 'mistyrose2' => [238, 213, 210], |
||
207 | 'mistyrose3' => [205, 183, 181], |
||
208 | 'mistyrose4' => [139, 125, 123], |
||
209 | 'azure1' => [240, 255, 255], |
||
210 | 'azure2' => [224, 238, 238], |
||
211 | 'azure3' => [193, 205, 205], |
||
212 | 'azure4' => [131, 139, 139], |
||
213 | 'slateblue1' => [131, 111, 255], |
||
214 | 'slateblue2' => [122, 103, 238], |
||
215 | 'slateblue3' => [105, 89, 205], |
||
216 | 'slateblue4' => [71, 60, 139], |
||
217 | 'royalblue1' => [72, 118, 255], |
||
218 | 'royalblue2' => [67, 110, 238], |
||
219 | 'royalblue3' => [58, 95, 205], |
||
220 | 'royalblue4' => [39, 64, 139], |
||
221 | 'dodgerblue1' => [30, 144, 255], |
||
222 | 'dodgerblue2' => [28, 134, 238], |
||
223 | 'dodgerblue3' => [24, 116, 205], |
||
224 | 'dodgerblue4' => [16, 78, 139], |
||
225 | 'steelblue1' => [99, 184, 255], |
||
226 | 'steelblue2' => [92, 172, 238], |
||
227 | 'steelblue3' => [79, 148, 205], |
||
228 | 'steelblue4' => [54, 100, 139], |
||
229 | 'deepskyblue1' => [0, 191, 255], |
||
230 | 'deepskyblue2' => [0, 178, 238], |
||
231 | 'deepskyblue3' => [0, 154, 205], |
||
232 | 'deepskyblue4' => [0, 104, 139], |
||
233 | 'skyblue1' => [135, 206, 255], |
||
234 | 'skyblue2' => [126, 192, 238], |
||
235 | 'skyblue3' => [108, 166, 205], |
||
236 | 'skyblue4' => [74, 112, 139], |
||
237 | 'lightskyblue1' => [176, 226, 255], |
||
238 | 'lightskyblue2' => [164, 211, 238], |
||
239 | 'lightskyblue3' => [141, 182, 205], |
||
240 | 'lightskyblue4' => [96, 123, 139], |
||
241 | 'slategray1' => [198, 226, 255], |
||
242 | 'slategray2' => [185, 211, 238], |
||
243 | 'slategray3' => [159, 182, 205], |
||
244 | 'slategray4' => [108, 123, 139], |
||
245 | 'lightsteelblue1' => [202, 225, 255], |
||
246 | 'lightsteelblue2' => [188, 210, 238], |
||
247 | 'lightsteelblue3' => [162, 181, 205], |
||
248 | 'lightsteelblue4' => [110, 123, 139], |
||
249 | 'lightblue1' => [191, 239, 255], |
||
250 | 'lightblue2' => [178, 223, 238], |
||
251 | 'lightblue3' => [154, 192, 205], |
||
252 | 'lightblue4' => [104, 131, 139], |
||
253 | 'lightcyan1' => [224, 255, 255], |
||
254 | 'lightcyan2' => [209, 238, 238], |
||
255 | 'lightcyan3' => [180, 205, 205], |
||
256 | 'lightcyan4' => [122, 139, 139], |
||
257 | 'paleturquoise1' => [187, 255, 255], |
||
258 | 'paleturquoise2' => [174, 238, 238], |
||
259 | 'paleturquoise3' => [150, 205, 205], |
||
260 | 'paleturquoise4' => [102, 139, 139], |
||
261 | 'cadetblue1' => [152, 245, 255], |
||
262 | 'cadetblue2' => [142, 229, 238], |
||
263 | 'cadetblue3' => [122, 197, 205], |
||
264 | 'cadetblue4' => [83, 134, 139], |
||
265 | 'turquoise1' => [0, 245, 255], |
||
266 | 'turquoise2' => [0, 229, 238], |
||
267 | 'turquoise3' => [0, 197, 205], |
||
268 | 'turquoise4' => [0, 134, 139], |
||
269 | 'cyan1' => [0, 255, 255], |
||
270 | 'cyan2' => [0, 238, 238], |
||
271 | 'cyan3' => [0, 205, 205], |
||
272 | 'cyan4' => [0, 139, 139], |
||
273 | 'darkslategray1' => [151, 255, 255], |
||
274 | 'darkslategray2' => [141, 238, 238], |
||
275 | 'darkslategray3' => [121, 205, 205], |
||
276 | 'darkslategray4' => [82, 139, 139], |
||
277 | 'aquamarine1' => [127, 255, 212], |
||
278 | 'aquamarine2' => [118, 238, 198], |
||
279 | 'aquamarine3' => [102, 205, 170], |
||
280 | 'aquamarine4' => [69, 139, 116], |
||
281 | 'darkseagreen1' => [193, 255, 193], |
||
282 | 'darkseagreen2' => [180, 238, 180], |
||
283 | 'darkseagreen3' => [155, 205, 155], |
||
284 | 'darkseagreen4' => [105, 139, 105], |
||
285 | 'seagreen1' => [84, 255, 159], |
||
286 | 'seagreen2' => [78, 238, 148], |
||
287 | 'seagreen3' => [67, 205, 128], |
||
288 | 'seagreen4' => [46, 139, 87], |
||
289 | 'palegreen1' => [154, 255, 154], |
||
290 | 'palegreen2' => [144, 238, 144], |
||
291 | 'palegreen3' => [124, 205, 124], |
||
292 | 'palegreen4' => [84, 139, 84], |
||
293 | 'springgreen1' => [0, 255, 127], |
||
294 | 'springgreen2' => [0, 238, 118], |
||
295 | 'springgreen3' => [0, 205, 102], |
||
296 | 'springgreen4' => [0, 139, 69], |
||
297 | 'chartreuse1' => [127, 255, 0], |
||
298 | 'chartreuse2' => [118, 238, 0], |
||
299 | 'chartreuse3' => [102, 205, 0], |
||
300 | 'chartreuse4' => [69, 139, 0], |
||
301 | 'olivedrab1' => [192, 255, 62], |
||
302 | 'olivedrab2' => [179, 238, 58], |
||
303 | 'olivedrab3' => [154, 205, 50], |
||
304 | 'olivedrab4' => [105, 139, 34], |
||
305 | 'darkolivegreen1' => [202, 255, 112], |
||
306 | 'darkolivegreen2' => [188, 238, 104], |
||
307 | 'darkolivegreen3' => [162, 205, 90], |
||
308 | 'darkolivegreen4' => [110, 139, 61], |
||
309 | 'khaki1' => [255, 246, 143], |
||
310 | 'khaki2' => [238, 230, 133], |
||
311 | 'khaki3' => [205, 198, 115], |
||
312 | 'khaki4' => [139, 134, 78], |
||
313 | 'lightgoldenrod1' => [255, 236, 139], |
||
314 | 'lightgoldenrod2' => [238, 220, 130], |
||
315 | 'lightgoldenrod3' => [205, 190, 112], |
||
316 | 'lightgoldenrod4' => [139, 129, 76], |
||
317 | 'yellow1' => [255, 255, 0], |
||
318 | 'yellow2' => [238, 238, 0], |
||
319 | 'yellow3' => [205, 205, 0], |
||
320 | 'yellow4' => [139, 139, 0], |
||
321 | 'gold1' => [255, 215, 0], |
||
322 | 'gold2' => [238, 201, 0], |
||
323 | 'gold3' => [205, 173, 0], |
||
324 | 'gold4' => [139, 117, 0], |
||
325 | 'goldenrod1' => [255, 193, 37], |
||
326 | 'goldenrod2' => [238, 180, 34], |
||
327 | 'goldenrod3' => [205, 155, 29], |
||
328 | 'goldenrod4' => [139, 105, 20], |
||
329 | 'darkgoldenrod1' => [255, 185, 15], |
||
330 | 'darkgoldenrod2' => [238, 173, 14], |
||
331 | 'darkgoldenrod3' => [205, 149, 12], |
||
332 | 'darkgoldenrod4' => [139, 101, 8], |
||
333 | 'rosybrown1' => [255, 193, 193], |
||
334 | 'rosybrown2' => [238, 180, 180], |
||
335 | 'rosybrown3' => [205, 155, 155], |
||
336 | 'rosybrown4' => [139, 105, 105], |
||
337 | 'indianred1' => [255, 106, 106], |
||
338 | 'indianred2' => [238, 99, 99], |
||
339 | 'indianred3' => [205, 85, 85], |
||
340 | 'indianred4' => [139, 58, 58], |
||
341 | 'sienna1' => [255, 130, 71], |
||
342 | 'sienna2' => [238, 121, 66], |
||
343 | 'sienna3' => [205, 104, 57], |
||
344 | 'sienna4' => [139, 71, 38], |
||
345 | 'burlywood1' => [255, 211, 155], |
||
346 | 'burlywood2' => [238, 197, 145], |
||
347 | 'burlywood3' => [205, 170, 125], |
||
348 | 'burlywood4' => [139, 115, 85], |
||
349 | 'wheat1' => [255, 231, 186], |
||
350 | 'wheat2' => [238, 216, 174], |
||
351 | 'wheat3' => [205, 186, 150], |
||
352 | 'wheat4' => [139, 126, 102], |
||
353 | 'tan1' => [255, 165, 79], |
||
354 | 'tan2' => [238, 154, 73], |
||
355 | 'tan3' => [205, 133, 63], |
||
356 | 'tan4' => [139, 90, 43], |
||
357 | 'chocolate1' => [255, 127, 36], |
||
358 | 'chocolate2' => [238, 118, 33], |
||
359 | 'chocolate3' => [205, 102, 29], |
||
360 | 'chocolate4' => [139, 69, 19], |
||
361 | 'firebrick1' => [255, 48, 48], |
||
362 | 'firebrick2' => [238, 44, 44], |
||
363 | 'firebrick3' => [205, 38, 38], |
||
364 | 'firebrick4' => [139, 26, 26], |
||
365 | 'brown1' => [255, 64, 64], |
||
366 | 'brown2' => [238, 59, 59], |
||
367 | 'brown3' => [205, 51, 51], |
||
368 | 'brown4' => [139, 35, 35], |
||
369 | 'salmon1' => [255, 140, 105], |
||
370 | 'salmon2' => [238, 130, 98], |
||
371 | 'salmon3' => [205, 112, 84], |
||
372 | 'salmon4' => [139, 76, 57], |
||
373 | 'lightsalmon1' => [255, 160, 122], |
||
374 | 'lightsalmon2' => [238, 149, 114], |
||
375 | 'lightsalmon3' => [205, 129, 98], |
||
376 | 'lightsalmon4' => [139, 87, 66], |
||
377 | 'orange1' => [255, 165, 0], |
||
378 | 'orange2' => [238, 154, 0], |
||
379 | 'orange3' => [205, 133, 0], |
||
380 | 'orange4' => [139, 90, 0], |
||
381 | 'darkorange1' => [255, 127, 0], |
||
382 | 'darkorange2' => [238, 118, 0], |
||
383 | 'darkorange3' => [205, 102, 0], |
||
384 | 'darkorange4' => [139, 69, 0], |
||
385 | 'coral1' => [255, 114, 86], |
||
386 | 'coral2' => [238, 106, 80], |
||
387 | 'coral3' => [205, 91, 69], |
||
388 | 'coral4' => [139, 62, 47], |
||
389 | 'tomato1' => [255, 99, 71], |
||
390 | 'tomato2' => [238, 92, 66], |
||
391 | 'tomato3' => [205, 79, 57], |
||
392 | 'tomato4' => [139, 54, 38], |
||
393 | 'orangered1' => [255, 69, 0], |
||
394 | 'orangered2' => [238, 64, 0], |
||
395 | 'orangered3' => [205, 55, 0], |
||
396 | 'orangered4' => [139, 37, 0], |
||
397 | 'deeppink1' => [255, 20, 147], |
||
398 | 'deeppink2' => [238, 18, 137], |
||
399 | 'deeppink3' => [205, 16, 118], |
||
400 | 'deeppink4' => [139, 10, 80], |
||
401 | 'hotpink1' => [255, 110, 180], |
||
402 | 'hotpink2' => [238, 106, 167], |
||
403 | 'hotpink3' => [205, 96, 144], |
||
404 | 'hotpink4' => [139, 58, 98], |
||
405 | 'pink1' => [255, 181, 197], |
||
406 | 'pink2' => [238, 169, 184], |
||
407 | 'pink3' => [205, 145, 158], |
||
408 | 'pink4' => [139, 99, 108], |
||
409 | 'lightpink1' => [255, 174, 185], |
||
410 | 'lightpink2' => [238, 162, 173], |
||
411 | 'lightpink3' => [205, 140, 149], |
||
412 | 'lightpink4' => [139, 95, 101], |
||
413 | 'palevioletred1' => [255, 130, 171], |
||
414 | 'palevioletred2' => [238, 121, 159], |
||
415 | 'palevioletred3' => [205, 104, 137], |
||
416 | 'palevioletred4' => [139, 71, 93], |
||
417 | 'maroon1' => [255, 52, 179], |
||
418 | 'maroon2' => [238, 48, 167], |
||
419 | 'maroon3' => [205, 41, 144], |
||
420 | 'maroon4' => [139, 28, 98], |
||
421 | 'violetred1' => [255, 62, 150], |
||
422 | 'violetred2' => [238, 58, 140], |
||
423 | 'violetred3' => [205, 50, 120], |
||
424 | 'violetred4' => [139, 34, 82], |
||
425 | 'magenta1' => [255, 0, 255], |
||
426 | 'magenta2' => [238, 0, 238], |
||
427 | 'magenta3' => [205, 0, 205], |
||
428 | 'magenta4' => [139, 0, 139], |
||
429 | 'mediumred' => [140, 34, 34], |
||
430 | 'orchid1' => [255, 131, 250], |
||
431 | 'orchid2' => [238, 122, 233], |
||
432 | 'orchid3' => [205, 105, 201], |
||
433 | 'orchid4' => [139, 71, 137], |
||
434 | 'plum1' => [255, 187, 255], |
||
435 | 'plum2' => [238, 174, 238], |
||
436 | 'plum3' => [205, 150, 205], |
||
437 | 'plum4' => [139, 102, 139], |
||
438 | 'mediumorchid1' => [224, 102, 255], |
||
439 | 'mediumorchid2' => [209, 95, 238], |
||
440 | 'mediumorchid3' => [180, 82, 205], |
||
441 | 'mediumorchid4' => [122, 55, 139], |
||
442 | 'darkorchid1' => [191, 62, 255], |
||
443 | 'darkorchid2' => [178, 58, 238], |
||
444 | 'darkorchid3' => [154, 50, 205], |
||
445 | 'darkorchid4' => [104, 34, 139], |
||
446 | 'purple1' => [155, 48, 255], |
||
447 | 'purple2' => [145, 44, 238], |
||
448 | 'purple3' => [125, 38, 205], |
||
449 | 'purple4' => [85, 26, 139], |
||
450 | 'mediumpurple1' => [171, 130, 255], |
||
451 | 'mediumpurple2' => [159, 121, 238], |
||
452 | 'mediumpurple3' => [137, 104, 205], |
||
453 | 'mediumpurple4' => [93, 71, 139], |
||
454 | 'thistle1' => [255, 225, 255], |
||
455 | 'thistle2' => [238, 210, 238], |
||
456 | 'thistle3' => [205, 181, 205], |
||
457 | 'thistle4' => [139, 123, 139], |
||
458 | 'gray1' => [10, 10, 10], |
||
459 | 'gray2' => [40, 40, 30], |
||
460 | 'gray3' => [70, 70, 70], |
||
461 | 'gray4' => [100, 100, 100], |
||
462 | 'gray5' => [130, 130, 130], |
||
463 | 'gray6' => [160, 160, 160], |
||
464 | 'gray7' => [190, 190, 190], |
||
465 | 'gray8' => [210, 210, 210], |
||
466 | 'gray9' => [240, 240, 240], |
||
467 | 'darkgray' => [100, 100, 100], |
||
468 | 'darkblue' => [0, 0, 139], |
||
469 | 'darkcyan' => [0, 139, 139], |
||
470 | 'darkmagenta' => [139, 0, 139], |
||
471 | 'darkred' => [139, 0, 0], |
||
472 | 'silver' => [192, 192, 192], |
||
473 | 'eggplant' => [144, 176, 168], |
||
474 | 'lightgreen' => [144, 238, 144], ]; |
||
475 | } |
||
476 | |||
477 | //================================== |
||
478 | // PUBLIC METHODS |
||
479 | // Colors can be specified as either |
||
480 | // 1. #xxxxxx HTML style |
||
481 | // 2. "colorname" as a named color |
||
482 | // 3. array(r,g,b) RGB triple |
||
483 | // This function translates this to a native RGB format and returns an |
||
484 | // RGB triple. |
||
485 | |||
486 | public function Color($aColor) |
||
487 | { |
||
488 | if (is_string($aColor)) { |
||
489 | $matches = []; |
||
490 | // this regex will parse a color string and fill the $matches array as such: |
||
491 | // 0: the full match if any |
||
492 | // 1: a hex string preceded by a hash, can be 3 characters (#fff) or 6 (#ffffff) (4 or 5 also accepted but...) |
||
493 | // 2,3,4: r,g,b values in hex if the first character of the string is # |
||
494 | // 5: all alpha-numeric characters at the beginning of the string if string does not start with # |
||
495 | // 6: alpha value prefixed by @ if supplied |
||
496 | // 7: alpha value with @ stripped |
||
497 | // 8: adjust value prefixed with : if supplied |
||
498 | // 9: adjust value with : stripped |
||
499 | $regex = '/(#([0-9a-fA-F]{1,2})([0-9a-fA-F]{1,2})([0-9a-fA-F]{1,2}))?([\w]+)?(@([\d\.,]+))?(:([\d\.,]+))?/'; |
||
500 | if (!preg_match($regex, $aColor, $matches)) { |
||
501 | JpGraphError::RaiseL(25078, $aColor); //(" Unknown color: $aColor"); |
||
502 | } |
||
503 | if (empty($matches[5])) { |
||
504 | $r = strlen($matches[2]) == 1 ? $matches[2] . $matches[2] : $matches[2]; |
||
505 | $g = strlen($matches[3]) == 1 ? $matches[3] . $matches[3] : $matches[3]; |
||
506 | $b = strlen($matches[4]) == 1 ? $matches[4] . $matches[4] : $matches[4]; |
||
507 | $r = hexdec($r); |
||
508 | $g = hexdec($g); |
||
509 | $b = hexdec($b); |
||
510 | } else { |
||
511 | if (!isset($this->rgb_table[$matches[5]])) { |
||
512 | JpGraphError::RaiseL(25078, $aColor); //(" Unknown color: $aColor"); |
||
513 | } |
||
514 | $r = $this->rgb_table[$matches[5]][0]; |
||
515 | $g = $this->rgb_table[$matches[5]][1]; |
||
516 | $b = $this->rgb_table[$matches[5]][2]; |
||
517 | } |
||
518 | $alpha = isset($matches[7]) ? str_replace(',', '.', $matches[7]) : 0; |
||
519 | $adj = isset($matches[9]) ? str_replace(',', '.', $matches[9]) : 1.0; |
||
520 | |||
521 | if ($adj < 0) { |
||
522 | JpGraphError::RaiseL(25077); //('Adjustment factor for color must be > 0'); |
||
523 | } |
||
524 | |||
525 | // Scale adj so that an adj=2 always |
||
526 | // makes the color 100% white (i.e. 255,255,255. |
||
527 | // and adj=1 neutral and adj=0 black. |
||
528 | if ($adj == 1) { |
||
529 | return [$r, $g, $b, $alpha]; |
||
530 | } |
||
531 | if ($adj > 1) { |
||
532 | $m = ($adj - 1.0) * (255 - min(255, min($r, min($g, $b)))); |
||
533 | |||
534 | return [min(255, $r + $m), min(255, $g + $m), min(255, $b + $m), $alpha]; |
||
535 | } |
||
536 | if ($adj < 1) { |
||
537 | $m = ($adj - 1.0) * max(255, max($r, max($g, $b))); |
||
538 | |||
539 | return [max(0, $r + $m), max(0, $g + $m), max(0, $b + $m), $alpha]; |
||
540 | } |
||
541 | } elseif (is_array($aColor)) { |
||
542 | if (!isset($aColor[3])) { |
||
543 | $aColor[3] = 0; |
||
544 | } |
||
545 | |||
546 | return $aColor; |
||
547 | } else { |
||
548 | JpGraphError::RaiseL(25079, $aColor, safe_count($aColor)); //(" Unknown color specification: $aColor , size=". safe_count($aColor)); |
||
549 | } |
||
550 | } |
||
551 | |||
552 | // Compare two colors |
||
553 | // return true if equal |
||
554 | public function Equal($aCol1, $aCol2) |
||
555 | { |
||
556 | $c1 = $this->Color($aCol1); |
||
557 | $c2 = $this->Color($aCol2); |
||
558 | |||
559 | return $c1[0] == $c2[0] && $c1[1] == $c2[1] && $c1[2] == $c2[2]; |
||
560 | } |
||
561 | |||
562 | // Allocate a new color in the current image |
||
563 | // Return new color index, -1 if no more colors could be allocated |
||
564 | public function Allocate($aColor, $aAlpha = 0.0) |
||
565 | { |
||
566 | list($r, $g, $b, $a) = $this->color($aColor); |
||
567 | // If alpha is specified in the color string then this |
||
568 | // takes precedence over the second argument |
||
569 | if ($a > 0) { |
||
570 | $aAlpha = $a; |
||
571 | } |
||
572 | if ($aAlpha < 0 || $aAlpha > 1) { |
||
573 | JpGraphError::RaiseL(25080); //('Alpha parameter for color must be between 0.0 and 1.0'); |
||
574 | } |
||
575 | |||
576 | return imagecolorresolvealpha($this->img, $r, $g, $b, round($aAlpha * 127)); |
||
0 ignored issues
–
show
Bug
introduced
by
![]() |
|||
577 | } |
||
578 | |||
579 | // Try to convert an array with three valid numbers to the corresponding hex array |
||
580 | // This is currenly only used in processing the colors for barplots in order to be able |
||
581 | // to handle the case where the color might be specified as an array of colros as well. |
||
582 | // In that case we must be able to find out if an array of values should be interpretated as |
||
583 | // a single color (specifeid as an RGB triple) |
||
584 | public static function tryHexConversion($aColor) |
||
585 | { |
||
586 | if (is_array($aColor)) { |
||
587 | if (safe_count($aColor) == 3) { |
||
588 | if (is_numeric($aColor[0]) && is_numeric($aColor[1]) && is_numeric($aColor[2])) { |
||
589 | if (($aColor[0] >= 0 && $aColor[0] <= 255) && |
||
590 | ($aColor[1] >= 0 && $aColor[1] <= 255) && |
||
591 | ($aColor[2] >= 0 && $aColor[2] <= 255)) { |
||
592 | return sprintf('#%02x%02x%02x', $aColor[0], $aColor[1], $aColor[2]); |
||
593 | } |
||
594 | } |
||
595 | } |
||
596 | } |
||
597 | |||
598 | return $aColor; |
||
599 | } |
||
600 | |||
601 | // Return a RGB tripple corresponding to a position in the normal light spectrum |
||
602 | // The argumen values is in the range [0, 1] where a value of 0 correponds to blue and |
||
603 | // a value of 1 corresponds to red. Values in betwen is mapped to a linear interpolation |
||
604 | // of the constituting colors in the visible color spectra. |
||
605 | // The $aDynamicRange specified how much of the dynamic range we shold use |
||
606 | // a value of 1.0 give the full dyanmic range and a lower value give more dark |
||
607 | // colors. In the extreme of 0.0 then all colors will be black. |
||
608 | public static function GetSpectrum($aVal, $aDynamicRange = 1.0) |
||
609 | { |
||
610 | if ($aVal < 0 || $aVal > 1.0001) { |
||
611 | return [0, 0, 0]; // Invalid case - just return black |
||
612 | } |
||
613 | |||
614 | $sat = round(255 * $aDynamicRange); |
||
615 | $a = 0.25; |
||
616 | if ($aVal <= 0.25) { |
||
617 | return [0, round($sat * $aVal / $a), $sat]; |
||
618 | } |
||
619 | if ($aVal <= 0.5) { |
||
620 | return [0, $sat, round($sat - $sat * ($aVal - 0.25) / $a)]; |
||
621 | } |
||
622 | if ($aVal <= 0.75) { |
||
623 | return [round($sat * ($aVal - 0.5) / $a), $sat, 0]; |
||
624 | } |
||
625 | |||
626 | return [$sat, round($sat - $sat * ($aVal - 0.75) / $a), 0]; |
||
627 | } |
||
628 | } // @class |
||
629 |