]> git.mxchange.org Git - friendica.git/blob - view/theme/frio/php/Colors.php
restructuring for PR for friendica main repo
[friendica.git] / view / theme / frio / php / Colors.php
1 <?php
2
3 class colors {
4
5 /* Convert hexdec color string to rgb(a) string */
6  
7         function hex2rgba($color, $opacity = false) {
8
9                 $default = 'rgb(0,0,0)';
10
11                 //Return default if no color provided
12                 if(empty($color))
13                   return $default; 
14
15                 //Sanitize $color if "#" is provided 
16                 if ($color[0] == '#' ) {
17                         $color = substr( $color, 1 );
18                 }
19
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] );
25                 } else {
26                         return $default;
27                 }
28
29                 //Convert hexadec to rgb
30                 $rgb =  array_map('hexdec', $hex);
31
32                 //Check if opacity is set(rgba or rgb)
33                 if($opacity){
34                         if(abs($opacity) > 1)
35                                 $opacity = 1.0;
36                         $output = 'rgba('.implode(",",$rgb).','.$opacity.')';
37                 } else {
38                         $output = 'rgb('.implode(",",$rgb).')';
39                 }
40
41                 //Return rgb(a) color string
42                 return $output;
43         }
44
45         function hex2rgb( $colour ) {
46                 if ( $colour[0] == '#' ) {
47                         $colour = substr( $colour, 1 );
48                 }
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] );
53                 } else {
54                         return false;
55                 }
56                 $r = hexdec( $r );
57                 $g = hexdec( $g );
58                 $b = hexdec( $b );
59                 return array( 'red' => $r, 'green' => $g, 'blue' => $b );
60         }
61
62
63         function rgbToHsl( $r, $g, $b ) {
64                 $oldR = $r;
65                 $oldG = $g;
66                 $oldB = $b;
67                 $r /= 255;
68                 $g /= 255;
69                 $b /= 255;
70                 $max = max( $r, $g, $b );
71                 $min = min( $r, $g, $b );
72                 $h;
73                 $s;
74                 $l = ( $max + $min ) / 2;
75                 $d = $max - $min;
76
77                 if( $d == 0 ){
78                         $h = $s = 0; // achromatic
79                 } else {
80                         $s = $d / ( 1 - abs( 2 * $l - 1 ) );
81                         switch( $max ){
82                                 case $r:
83                                         $h = 60 * fmod( ( ( $g - $b ) / $d ), 6 ); 
84                                         if ($b > $g) {
85                                                 $h += 360;
86                                         }
87                                         break;
88                                 case $g: 
89                                         $h = 60 * ( ( $b - $r ) / $d + 2 ); 
90                                         break;
91                                 case $b: 
92                                         $h = 60 * ( ( $r - $g ) / $d + 4 ); 
93                                         break;
94                         }
95                 }
96
97                 return array( round( $h, 2 ), round( $s, 2 ), round( $l, 2 ) );
98         }
99         function hslToRgb( $h, $s, $l ){
100                 $r = ""; 
101                 $g = ""; 
102                 $b = "";
103
104                 $c = ( 1 - abs( 2 * $l - 1 ) ) * $s;
105                 $x = $c * ( 1 - abs( fmod( ( $h / 60 ), 2 ) - 1 ) );
106                 $m = $l - ( $c / 2 );
107                 if ( $h < 60 ) {
108                         $r = $c;
109                         $g = $x;
110                         $b = 0;
111                 } else if ( $h < 120 ) {
112                         $r = $x;
113                         $g = $c;
114                         $b = 0;
115                 } else if ( $h < 180 ) {
116                         $r = 0;
117                         $g = $c;
118                         $b = $x;
119                 } else if ( $h < 240 ) {
120                         $r = 0;
121                         $g = $x;
122                         $b = $c;
123                 } else if ( $h < 300 ) {
124                         $r = $x;
125                         $g = 0;
126                         $b = $c;
127                 } else {
128                         $r = $c;
129                         $g = 0;
130                         $b = $x;
131                 }
132
133                 $r = ( $r + $m ) * 255;
134                 $g = ( $g + $m ) * 255;
135                 $b = ( $b + $m  ) * 255;
136
137                 return array( floor( $r ), floor( $g ), floor( $b ) );
138         }
139
140         /*
141          * Som more example code - this needs to be deletet if we don't need it in
142          * the future
143          */
144
145           function HTMLToRGB($htmlCode)
146           {
147             if($htmlCode[0] == '#')
148               $htmlCode = substr($htmlCode, 1);
149
150             if (strlen($htmlCode) == 3)
151             {
152               $htmlCode = $htmlCode[0] . $htmlCode[0] . $htmlCode[1] . $htmlCode[1] . $htmlCode[2] . $htmlCode[2];
153             }
154
155             $r = hexdec($htmlCode[0] . $htmlCode[1]);
156             $g = hexdec($htmlCode[2] . $htmlCode[3]);
157             $b = hexdec($htmlCode[4] . $htmlCode[5]);
158
159             return $b + ($g << 0x8) + ($r << 0x10);
160           }
161
162           function RGBToHTML($RGB)
163           {
164             $r = 0xFF & ($RGB >> 0x10);
165             $g = 0xFF & ($RGB >> 0x8);
166             $b = 0xFF & $RGB;
167
168             $r = dechex($r);
169             $g = dechex($g);
170             $b = dechex($b);
171
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);
173           }
174
175           function ChangeLuminosity($RGB, $LuminosityPercent)
176           {
177             $HSL = RGBToHSL($RGB);
178             $NewHSL = (int)(((float)$LuminosityPercent / 100) * 255) + (0xFFFF00 & $HSL);
179             return HSLToRGB($NewHSL);
180           }
181
182           function RGBToHSL($RGB)
183           {
184             $r = 0xFF & ($RGB >> 0x10);
185             $g = 0xFF & ($RGB >> 0x8);
186             $b = 0xFF & $RGB;
187
188             $r = ((float)$r) / 255.0;
189             $g = ((float)$g) / 255.0;
190             $b = ((float)$b) / 255.0;
191
192             $maxC = max($r, $g, $b);
193             $minC = min($r, $g, $b);
194
195             $l = ($maxC + $minC) / 2.0;
196
197             if($maxC == $minC)
198             {
199               $s = 0;
200               $h = 0;
201             }
202             else
203             {
204               if($l < .5)
205               {
206                 $s = ($maxC - $minC) / ($maxC + $minC);
207               }
208               else
209               {
210                 $s = ($maxC - $minC) / (2.0 - $maxC - $minC);
211               }
212               if($r == $maxC)
213                 $h = ($g - $b) / ($maxC - $minC);
214               if($g == $maxC)
215                 $h = 2.0 + ($b - $r) / ($maxC - $minC);
216               if($b == $maxC)
217                 $h = 4.0 + ($r - $g) / ($maxC - $minC);
218
219               $h = $h / 6.0; 
220             }
221
222             $h = (int)round(255.0 * $h);
223             $s = (int)round(255.0 * $s);
224             $l = (int)round(255.0 * $l);
225
226             $HSL = $l + ($s << 0x8) + ($h << 0x10);
227             return $HSL;
228           }
229
230           function HSLToRGB($HSL)
231           {
232             $h = 0xFF & ($HSL >> 0x10);
233             $s = 0xFF & ($HSL >> 0x8);
234             $l = 0xFF & $HSL;
235
236             $h = ((float)$h) / 255.0;
237             $s = ((float)$s) / 255.0;
238             $l = ((float)$l) / 255.0;
239
240             if($s == 0)
241             {
242               $r = $l;
243               $g = $l;
244               $b = $l;
245             }
246             else
247             {
248               if($l < .5)
249               {
250                 $t2 = $l * (1.0 + $s);
251               }
252               else
253               {
254                 $t2 = ($l + $s) - ($l * $s);
255               }
256               $t1 = 2.0 * $l - $t2;
257
258               $rt3 = $h + 1.0/3.0;
259               $gt3 = $h;
260               $bt3 = $h - 1.0/3.0;
261
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;
268
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;
272               else $r = $t1;
273
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;
277               else $g = $t1;
278
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;
282               else $b = $t1;
283             }
284
285             $r = (int)round(255.0 * $r);
286             $g = (int)round(255.0 * $g);
287             $b = (int)round(255.0 * $b);
288
289             $RGB = $b + ($g << 0x8) + ($r << 0x10);
290             return $RGB;
291           }
292 }