]>
Commit | Line | Data |
---|---|---|
30c337cf | 1 | <?php |
63b54c4d AD |
2 | |
3 | function _resolve_htmlcolor($color) { | |
4 | $htmlcolors = array ("aliceblue" => "#f0f8ff", | |
5 | "antiquewhite" => "#faebd7", | |
6 | "aqua" => "#00ffff", | |
7 | "aquamarine" => "#7fffd4", | |
8 | "azure" => "#f0ffff", | |
9 | "beige" => "#f5f5dc", | |
10 | "bisque" => "#ffe4c4", | |
11 | "black" => "#000000", | |
12 | "blanchedalmond" => "#ffebcd", | |
13 | "blue" => "#0000ff", | |
14 | "blueviolet" => "#8a2be2", | |
15 | "brown" => "#a52a2a", | |
16 | "burlywood" => "#deb887", | |
17 | "cadetblue" => "#5f9ea0", | |
18 | "chartreuse" => "#7fff00", | |
19 | "chocolate" => "#d2691e", | |
20 | "coral" => "#ff7f50", | |
21 | "cornflowerblue" => "#6495ed", | |
22 | "cornsilk" => "#fff8dc", | |
23 | "crimson" => "#dc143c", | |
24 | "cyan" => "#00ffff", | |
25 | "darkblue" => "#00008b", | |
26 | "darkcyan" => "#008b8b", | |
27 | "darkgoldenrod" => "#b8860b", | |
28 | "darkgray" => "#a9a9a9", | |
29 | "darkgrey" => "#a9a9a9", | |
30 | "darkgreen" => "#006400", | |
31 | "darkkhaki" => "#bdb76b", | |
32 | "darkmagenta" => "#8b008b", | |
33 | "darkolivegreen" => "#556b2f", | |
34 | "darkorange" => "#ff8c00", | |
35 | "darkorchid" => "#9932cc", | |
36 | "darkred" => "#8b0000", | |
37 | "darksalmon" => "#e9967a", | |
38 | "darkseagreen" => "#8fbc8f", | |
39 | "darkslateblue" => "#483d8b", | |
40 | "darkslategray" => "#2f4f4f", | |
41 | "darkslategrey" => "#2f4f4f", | |
42 | "darkturquoise" => "#00ced1", | |
43 | "darkviolet" => "#9400d3", | |
44 | "deeppink" => "#ff1493", | |
45 | "deepskyblue" => "#00bfff", | |
46 | "dimgray" => "#696969", | |
47 | "dimgrey" => "#696969", | |
48 | "dodgerblue" => "#1e90ff", | |
49 | "firebrick" => "#b22222", | |
50 | "floralwhite" => "#fffaf0", | |
51 | "forestgreen" => "#228b22", | |
52 | "fuchsia" => "#ff00ff", | |
53 | "gainsboro" => "#dcdcdc", | |
54 | "ghostwhite" => "#f8f8ff", | |
55 | "gold" => "#ffd700", | |
56 | "goldenrod" => "#daa520", | |
57 | "gray" => "#808080", | |
58 | "grey" => "#808080", | |
59 | "green" => "#008000", | |
60 | "greenyellow" => "#adff2f", | |
61 | "honeydew" => "#f0fff0", | |
62 | "hotpink" => "#ff69b4", | |
63 | "indianred " => "#cd5c5c", | |
64 | "indigo " => "#4b0082", | |
65 | "ivory" => "#fffff0", | |
66 | "khaki" => "#f0e68c", | |
67 | "lavender" => "#e6e6fa", | |
68 | "lavenderblush" => "#fff0f5", | |
69 | "lawngreen" => "#7cfc00", | |
70 | "lemonchiffon" => "#fffacd", | |
71 | "lightblue" => "#add8e6", | |
72 | "lightcoral" => "#f08080", | |
73 | "lightcyan" => "#e0ffff", | |
74 | "lightgoldenrodyellow" => "#fafad2", | |
75 | "lightgray" => "#d3d3d3", | |
76 | "lightgrey" => "#d3d3d3", | |
77 | "lightgreen" => "#90ee90", | |
78 | "lightpink" => "#ffb6c1", | |
79 | "lightsalmon" => "#ffa07a", | |
80 | "lightseagreen" => "#20b2aa", | |
81 | "lightskyblue" => "#87cefa", | |
82 | "lightslategray" => "#778899", | |
83 | "lightslategrey" => "#778899", | |
84 | "lightsteelblue" => "#b0c4de", | |
85 | "lightyellow" => "#ffffe0", | |
86 | "lime" => "#00ff00", | |
87 | "limegreen" => "#32cd32", | |
88 | "linen" => "#faf0e6", | |
89 | "magenta" => "#ff00ff", | |
90 | "maroon" => "#800000", | |
91 | "mediumaquamarine" => "#66cdaa", | |
92 | "mediumblue" => "#0000cd", | |
93 | "mediumorchid" => "#ba55d3", | |
94 | "mediumpurple" => "#9370db", | |
95 | "mediumseagreen" => "#3cb371", | |
96 | "mediumslateblue" => "#7b68ee", | |
97 | "mediumspringgreen" => "#00fa9a", | |
98 | "mediumturquoise" => "#48d1cc", | |
99 | "mediumvioletred" => "#c71585", | |
100 | "midnightblue" => "#191970", | |
101 | "mintcream" => "#f5fffa", | |
102 | "mistyrose" => "#ffe4e1", | |
103 | "moccasin" => "#ffe4b5", | |
104 | "navajowhite" => "#ffdead", | |
105 | "navy" => "#000080", | |
106 | "oldlace" => "#fdf5e6", | |
107 | "olive" => "#808000", | |
108 | "olivedrab" => "#6b8e23", | |
109 | "orange" => "#ffa500", | |
110 | "orangered" => "#ff4500", | |
111 | "orchid" => "#da70d6", | |
112 | "palegoldenrod" => "#eee8aa", | |
113 | "palegreen" => "#98fb98", | |
114 | "paleturquoise" => "#afeeee", | |
115 | "palevioletred" => "#db7093", | |
116 | "papayawhip" => "#ffefd5", | |
117 | "peachpuff" => "#ffdab9", | |
118 | "peru" => "#cd853f", | |
119 | "pink" => "#ffc0cb", | |
120 | "plum" => "#dda0dd", | |
121 | "powderblue" => "#b0e0e6", | |
122 | "purple" => "#800080", | |
123 | "red" => "#ff0000", | |
124 | "rosybrown" => "#bc8f8f", | |
125 | "royalblue" => "#4169e1", | |
126 | "saddlebrown" => "#8b4513", | |
127 | "salmon" => "#fa8072", | |
128 | "sandybrown" => "#f4a460", | |
129 | "seagreen" => "#2e8b57", | |
130 | "seashell" => "#fff5ee", | |
131 | "sienna" => "#a0522d", | |
132 | "silver" => "#c0c0c0", | |
133 | "skyblue" => "#87ceeb", | |
134 | "slateblue" => "#6a5acd", | |
135 | "slategray" => "#708090", | |
136 | "slategrey" => "#708090", | |
137 | "snow" => "#fffafa", | |
138 | "springgreen" => "#00ff7f", | |
139 | "steelblue" => "#4682b4", | |
140 | "tan" => "#d2b48c", | |
141 | "teal" => "#008080", | |
142 | "thistle" => "#d8bfd8", | |
143 | "tomato" => "#ff6347", | |
144 | "turquoise" => "#40e0d0", | |
145 | "violet" => "#ee82ee", | |
146 | "wheat" => "#f5deb3", | |
147 | "white" => "#ffffff", | |
148 | "whitesmoke" => "#f5f5f5", | |
149 | "yellow" => "#ffff00", | |
150 | "yellowgreen" => "#9acd32"); | |
151 | ||
152 | $color = strtolower($color); | |
153 | ||
154 | if (isset($htmlcolors[$color])) | |
155 | return $htmlcolors[$color]; | |
156 | else | |
157 | return $color; | |
158 | } | |
159 | ||
30c337cf AD |
160 | ### RGB >> HSL |
161 | function _color_rgb2hsl($rgb) { | |
162 | $r = $rgb[0]; $g = $rgb[1]; $b = $rgb[2]; | |
163 | $min = min($r, min($g, $b)); $max = max($r, max($g, $b)); | |
164 | $delta = $max - $min; $l = ($min + $max) / 2; $s = 0; | |
165 | if ($l > 0 && $l < 1) { | |
166 | $s = $delta / ($l < 0.5 ? (2 * $l) : (2 - 2 * $l)); | |
167 | } | |
168 | $h = 0; | |
169 | if ($delta > 0) { | |
170 | if ($max == $r && $max != $g) $h += ($g - $b) / $delta; | |
171 | if ($max == $g && $max != $b) $h += (2 + ($b - $r) / $delta); | |
172 | if ($max == $b && $max != $r) $h += (4 + ($r - $g) / $delta); | |
173 | $h /= 6; | |
174 | } return array($h, $s, $l); | |
175 | } | |
176 | ||
177 | ### HSL >> RGB | |
178 | function _color_hsl2rgb($hsl) { | |
179 | $h = $hsl[0]; $s = $hsl[1]; $l = $hsl[2]; | |
180 | $m2 = ($l <= 0.5) ? $l * ($s + 1) : $l + $s - $l*$s; | |
181 | $m1 = $l * 2 - $m2; | |
182 | return array(_color_hue2rgb($m1, $m2, $h + 0.33333), | |
183 | _color_hue2rgb($m1, $m2, $h), | |
184 | _color_hue2rgb($m1, $m2, $h - 0.33333)); | |
185 | } | |
186 | ||
187 | ### Helper function for _color_hsl2rgb(). | |
188 | function _color_hue2rgb($m1, $m2, $h) { | |
189 | $h = ($h < 0) ? $h + 1 : (($h > 1) ? $h - 1 : $h); | |
190 | if ($h * 6 < 1) return $m1 + ($m2 - $m1) * $h * 6; | |
191 | if ($h * 2 < 1) return $m2; | |
192 | if ($h * 3 < 2) return $m1 + ($m2 - $m1) * (0.66666 - $h) * 6; | |
193 | return $m1; | |
194 | } | |
195 | ||
196 | ### Convert a hex color into an RGB triplet. | |
197 | function _color_unpack($hex, $normalize = false) { | |
63b54c4d AD |
198 | |
199 | if (strpos($hex, '#') !== 0) | |
200 | $hex = _resolve_htmlcolor($hex); | |
201 | ||
30c337cf AD |
202 | if (strlen($hex) == 4) { |
203 | $hex = $hex[1] . $hex[1] . $hex[2] . $hex[2] . $hex[3] . $hex[3]; | |
204 | } $c = hexdec($hex); | |
205 | for ($i = 16; $i >= 0; $i -= 8) { | |
206 | $out[] = (($c >> $i) & 0xFF) / ($normalize ? 255 : 1); | |
207 | } return $out; | |
208 | } | |
209 | ||
210 | ### Convert an RGB triplet to a hex color. | |
211 | function _color_pack($rgb, $normalize = false) { | |
212 | foreach ($rgb as $k => $v) { | |
213 | $out |= (($v * ($normalize ? 255 : 1)) << (16 - $k * 8)); | |
214 | }return '#'. str_pad(dechex($out), 6, 0, STR_PAD_LEFT); | |
215 | } | |
216 | ||
217 | function rgb2hsl($arr) { | |
218 | $r = $arr[0]; | |
219 | $g = $arr[1]; | |
220 | $b = $arr[2]; | |
221 | ||
222 | $var_R = ($r / 255); | |
223 | $var_G = ($g / 255); | |
224 | $var_B = ($b / 255); | |
225 | ||
226 | $var_Min = min($var_R, $var_G, $var_B); | |
227 | $var_Max = max($var_R, $var_G, $var_B); | |
228 | $del_Max = $var_Max - $var_Min; | |
229 | ||
230 | $v = $var_Max; | |
231 | ||
232 | if ($del_Max == 0) { | |
233 | $h = 0; | |
234 | $s = 0; | |
235 | } else { | |
236 | $s = $del_Max / $var_Max; | |
237 | ||
238 | $del_R = ( ( ( $max - $var_R ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max; | |
239 | $del_G = ( ( ( $max - $var_G ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max; | |
240 | $del_B = ( ( ( $max - $var_B ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max; | |
241 | ||
242 | if ($var_R == $var_Max) $h = $del_B - $del_G; | |
243 | else if ($var_G == $var_Max) $h = ( 1 / 3 ) + $del_R - $del_B; | |
244 | else if ($var_B == $var_Max) $h = ( 2 / 3 ) + $del_G - $del_R; | |
245 | ||
246 | if ($H < 0) $h++; | |
247 | if ($H > 1) $h--; | |
248 | } | |
249 | ||
250 | return array($h, $s, $v); | |
251 | } | |
252 | ||
253 | function hsl2rgb($arr) { | |
254 | $h = $arr[0]; | |
255 | $s = $arr[1]; | |
256 | $v = $arr[2]; | |
257 | ||
258 | if($s == 0) { | |
259 | $r = $g = $B = $v * 255; | |
260 | } else { | |
261 | $var_H = $h * 6; | |
262 | $var_i = floor( $var_H ); | |
263 | $var_1 = $v * ( 1 - $s ); | |
264 | $var_2 = $v * ( 1 - $s * ( $var_H - $var_i ) ); | |
265 | $var_3 = $v * ( 1 - $s * (1 - ( $var_H - $var_i ) ) ); | |
266 | ||
267 | if ($var_i == 0) { $var_R = $v ; $var_G = $var_3 ; $var_B = $var_1 ; } | |
268 | else if ($var_i == 1) { $var_R = $var_2 ; $var_G = $v ; $var_B = $var_1 ; } | |
269 | else if ($var_i == 2) { $var_R = $var_1 ; $var_G = $v ; $var_B = $var_3 ; } | |
270 | else if ($var_i == 3) { $var_R = $var_1 ; $var_G = $var_2 ; $var_B = $v ; } | |
271 | else if ($var_i == 4) { $var_R = $var_3 ; $var_G = $var_1 ; $var_B = $v ; } | |
272 | else { $var_R = $v ; $var_G = $var_1 ; $var_B = $var_2 ; } | |
273 | ||
274 | $r = $var_R * 255; | |
275 | $g = $var_G * 255; | |
276 | $B = $var_B * 255; | |
277 | } | |
278 | return array($r, $g, $B); | |
279 | } | |
280 | ||
281 | ?> |