Issues (459)

src/util/RGB.php (1 issue)

Labels
Severity
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
round($aAlpha * 127) of type double is incompatible with the type integer expected by parameter $alpha of imagecolorresolvealpha(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

576
        return imagecolorresolvealpha($this->img, $r, $g, $b, /** @scrutinizer ignore-type */ round($aAlpha * 127));
Loading history...
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