5 /* Convert hexdec color string to rgb(a) string */
7 function hex2rgba($color, $opacity = false) {
9 $default = 'rgb(0,0,0)';
11 //Return default if no color provided
15 //Sanitize $color if "#" is provided
16 if ($color[0] == '#' ) {
17 $color = substr( $color, 1 );
20 //Check if color has 6 or 3 characters and get values
21 if (strlen($color) == 6) {
22 $hex = array( $color[0] . $color[1], $color[2] . $color[3], $color[4] . $color[5] );
23 } elseif ( strlen( $color ) == 3 ) {
24 $hex = array( $color[0] . $color[0], $color[1] . $color[1], $color[2] . $color[2] );
29 //Convert hexadec to rgb
30 $rgb = array_map('hexdec', $hex);
32 //Check if opacity is set(rgba or rgb)
36 $output = 'rgba('.implode(",",$rgb).','.$opacity.')';
38 $output = 'rgb('.implode(",",$rgb).')';
41 //Return rgb(a) color string
45 function hex2rgb( $colour ) {
46 if ( $colour[0] == '#' ) {
47 $colour = substr( $colour, 1 );
49 if ( strlen( $colour ) == 6 ) {
50 list( $r, $g, $b ) = array( $colour[0] . $colour[1], $colour[2] . $colour[3], $colour[4] . $colour[5] );
51 } elseif ( strlen( $colour ) == 3 ) {
52 list( $r, $g, $b ) = array( $colour[0] . $colour[0], $colour[1] . $colour[1], $colour[2] . $colour[2] );
59 return array( 'red' => $r, 'green' => $g, 'blue' => $b );
63 function rgbToHsl( $r, $g, $b ) {
70 $max = max( $r, $g, $b );
71 $min = min( $r, $g, $b );
74 $l = ( $max + $min ) / 2;
78 $h = $s = 0; // achromatic
80 $s = $d / ( 1 - abs( 2 * $l - 1 ) );
83 $h = 60 * fmod( ( ( $g - $b ) / $d ), 6 );
89 $h = 60 * ( ( $b - $r ) / $d + 2 );
92 $h = 60 * ( ( $r - $g ) / $d + 4 );
97 return array( round( $h, 2 ), round( $s, 2 ), round( $l, 2 ) );
99 function hslToRgb( $h, $s, $l ){
104 $c = ( 1 - abs( 2 * $l - 1 ) ) * $s;
105 $x = $c * ( 1 - abs( fmod( ( $h / 60 ), 2 ) - 1 ) );
106 $m = $l - ( $c / 2 );
111 } else if ( $h < 120 ) {
115 } else if ( $h < 180 ) {
119 } else if ( $h < 240 ) {
123 } else if ( $h < 300 ) {
133 $r = ( $r + $m ) * 255;
134 $g = ( $g + $m ) * 255;
135 $b = ( $b + $m ) * 255;
137 return array( floor( $r ), floor( $g ), floor( $b ) );
141 * Som more example code - this needs to be deletet if we don't need it in
145 function HTMLToRGB($htmlCode)
147 if($htmlCode[0] == '#')
148 $htmlCode = substr($htmlCode, 1);
150 if (strlen($htmlCode) == 3)
152 $htmlCode = $htmlCode[0] . $htmlCode[0] . $htmlCode[1] . $htmlCode[1] . $htmlCode[2] . $htmlCode[2];
155 $r = hexdec($htmlCode[0] . $htmlCode[1]);
156 $g = hexdec($htmlCode[2] . $htmlCode[3]);
157 $b = hexdec($htmlCode[4] . $htmlCode[5]);
159 return $b + ($g << 0x8) + ($r << 0x10);
162 function RGBToHTML($RGB)
164 $r = 0xFF & ($RGB >> 0x10);
165 $g = 0xFF & ($RGB >> 0x8);
172 return "#" . str_pad($r, 2, "0", STR_PAD_LEFT) . str_pad($g, 2, "0", STR_PAD_LEFT) . str_pad($b, 2, "0", STR_PAD_LEFT);
175 function ChangeLuminosity($RGB, $LuminosityPercent)
177 $HSL = RGBToHSL($RGB);
178 $NewHSL = (int)(((float)$LuminosityPercent / 100) * 255) + (0xFFFF00 & $HSL);
179 return HSLToRGB($NewHSL);
182 function RGBToHSL($RGB)
184 $r = 0xFF & ($RGB >> 0x10);
185 $g = 0xFF & ($RGB >> 0x8);
188 $r = ((float)$r) / 255.0;
189 $g = ((float)$g) / 255.0;
190 $b = ((float)$b) / 255.0;
192 $maxC = max($r, $g, $b);
193 $minC = min($r, $g, $b);
195 $l = ($maxC + $minC) / 2.0;
206 $s = ($maxC - $minC) / ($maxC + $minC);
210 $s = ($maxC - $minC) / (2.0 - $maxC - $minC);
213 $h = ($g - $b) / ($maxC - $minC);
215 $h = 2.0 + ($b - $r) / ($maxC - $minC);
217 $h = 4.0 + ($r - $g) / ($maxC - $minC);
222 $h = (int)round(255.0 * $h);
223 $s = (int)round(255.0 * $s);
224 $l = (int)round(255.0 * $l);
226 $HSL = $l + ($s << 0x8) + ($h << 0x10);
230 function HSLToRGB($HSL)
232 $h = 0xFF & ($HSL >> 0x10);
233 $s = 0xFF & ($HSL >> 0x8);
236 $h = ((float)$h) / 255.0;
237 $s = ((float)$s) / 255.0;
238 $l = ((float)$l) / 255.0;
250 $t2 = $l * (1.0 + $s);
254 $t2 = ($l + $s) - ($l * $s);
256 $t1 = 2.0 * $l - $t2;
262 if($rt3 < 0) $rt3 += 1.0;
263 if($rt3 > 1) $rt3 -= 1.0;
264 if($gt3 < 0) $gt3 += 1.0;
265 if($gt3 > 1) $gt3 -= 1.0;
266 if($bt3 < 0) $bt3 += 1.0;
267 if($bt3 > 1) $bt3 -= 1.0;
269 if(6.0 * $rt3 < 1) $r = $t1 + ($t2 - $t1) * 6.0 * $rt3;
270 elseif(2.0 * $rt3 < 1) $r = $t2;
271 elseif(3.0 * $rt3 < 2) $r = $t1 + ($t2 - $t1) * ((2.0/3.0) - $rt3) * 6.0;
274 if(6.0 * $gt3 < 1) $g = $t1 + ($t2 - $t1) * 6.0 * $gt3;
275 elseif(2.0 * $gt3 < 1) $g = $t2;
276 elseif(3.0 * $gt3 < 2) $g = $t1 + ($t2 - $t1) * ((2.0/3.0) - $gt3) * 6.0;
279 if(6.0 * $bt3 < 1) $b = $t1 + ($t2 - $t1) * 6.0 * $bt3;
280 elseif(2.0 * $bt3 < 1) $b = $t2;
281 elseif(3.0 * $bt3 < 2) $b = $t1 + ($t2 - $t1) * ((2.0/3.0) - $bt3) * 6.0;
285 $r = (int)round(255.0 * $r);
286 $g = (int)round(255.0 * $g);
287 $b = (int)round(255.0 * $b);
289 $RGB = $b + ($g << 0x8) + ($r << 0x10);