/lib/map/colorsUtility.php

https://github.com/jlabresh1/strategicscrap · PHP · 126 lines · 108 code · 7 blank · 11 comment · 26 complexity · ba00f6b47b40dbe2967df3c927e3d121 MD5 · raw file

  1. <?php
  2. /*
  3. *DISCLAIMER
  4. *
  5. *THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES *OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, *INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF *USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  6. *
  7. * @author: Olivier G. <olbibigo_AT_gmail_DOT_com>
  8. * @version: 1.1
  9. * @history:
  10. * 1.0 creation
  11. 1.1 disclaimer added
  12. */
  13. class ColorsUtility {
  14. public static function rgb2hsl($rgb){//each component between 0..255
  15. if( (!is_array($rgb)) || (!isset($rgb['red'])) || (!isset($rgb['green'])) || (!isset($rgb['blue']))) {
  16. return array('hue' => 0, 'saturation' => 0, 'lightness' => 0);
  17. }
  18. $var_R=($rgb['red']/255);
  19. $var_G=($rgb['green']/255);
  20. $var_B=($rgb['blue']/255);
  21. $var_Min=min($var_R,$var_G,$var_B);
  22. $var_Max=max($var_R,$var_G,$var_B);
  23. $del_Max=$var_Max-$var_Min;
  24. $l=($var_Max+$var_Min)/2;
  25. if ($del_Max==0) {
  26. $h=0;
  27. $s=0;
  28. }else{
  29. if ($l<0.5){
  30. $s=$del_Max/($var_Max+$var_Min);
  31. }else{
  32. $s=$del_Max/(2-$var_Max-$var_Min);
  33. }
  34. $del_R=((($var_Max-$var_R)/6)+($del_Max/2))/$del_Max;
  35. $del_G=((($var_Max-$var_G)/6)+($del_Max/2))/$del_Max;
  36. $del_B=((($var_Max-$var_B)/6)+($del_Max/2))/$del_Max;
  37. if ($var_R==$var_Max){
  38. $h=$del_B-$del_G;
  39. }elseif ($var_G==$var_Max){
  40. $h=(1/3)+$del_R-$del_B;
  41. }elseif ($var_B==$var_Max){
  42. $h=(2/3)+$del_G-$del_R;
  43. }
  44. if ($h<0){
  45. $h+=1;
  46. }
  47. if ($h>1){
  48. $h-=1;
  49. }
  50. }
  51. return array('hue' => $h, 'saturation' => $s, 'lightness' => $l); //each component between 0..1
  52. }
  53. public static function hsl2rgb($hsl){//each component between 0..1
  54. if( (!is_array($hsl)) || (!isset($hsl['hue'])) || (!isset($hsl['saturation'])) || (!isset($hsl['lightness']))) {
  55. return array('red' => 0, 'green' => 0, 'blue' => 0);
  56. }
  57. $h=$hsl['hue']-floor($hsl['hue']);
  58. $s=$hsl['saturation']-floor($hsl['saturation']);
  59. $l=$hsl['lightness']-floor($hsl['lightness']);
  60. if ($s==0) {
  61. $r=$l*255;
  62. $g=$l*255;
  63. $b=$l*255;
  64. }
  65. else {
  66. if ($l<0.5){
  67. $var_2=$l*($l+$s);
  68. }else{
  69. $var_2=($l+$s)-($s*$l);
  70. }
  71. $var_1=2*$l-$var_2;
  72. $r=255*ColorsUtility::_hue_rgb($var_1,$var_2,$h+(1/3));
  73. $g=255*ColorsUtility::_hue_rgb($var_1,$var_2,$h);
  74. $b=255*ColorsUtility::_hue_rgb($var_1,$var_2,$h-(1/3));
  75. }
  76. return array('red' => max(0, min(255, floor($r))), 'green' => max(0, min(255, floor($g))), 'blue' => max(0, min(255, floor($b))));//each component between 0..255
  77. }
  78. public static function rgb2hex($rgb){
  79. if( (!is_array($rgb)) || (!isset($rgb['red'])) || (!isset($rgb['green'])) || (!isset($rgb['blue']))) {
  80. return '#000000';
  81. }
  82. $r = dechex($rgb['red']);
  83. $g = dechex($rgb['green']);
  84. $b = dechex($rgb['blue']);
  85. return '#'.((strlen($r) >= 2)? $r : '0'.$r).((strlen($g) >= 2)? $g : '0'.$g).((strlen($b) >= 2)? $b : '0'.$b);
  86. }
  87. public static function hex2rgb($hex){
  88. if(!ereg("[0-9a-fA-F]{6}", $hex)) {
  89. return array('red' => 0, 'green' => 0, 'blue' => 0);
  90. }
  91. $int = hexdec($hex);
  92. return array('red' => 0xFF & ($int >> 0x10), 'green' => 0xFF & ($int >> 0x8), 'blue' => 0xFF & $int);
  93. }
  94. public static function hsl2hex($hsl){
  95. return ColorsUtility::rgb2hex(ColorsUtility::hsl2rgb($hsl));
  96. }
  97. public static function hex2hsl($hex){
  98. return ColorsUtility::rgb2hsl(ColorsUtility::hex2rgb($hex));
  99. }
  100. private static function _hue_rgb($v1,$v2,$vH) {
  101. if($vH<0){
  102. ++$vH;
  103. }
  104. if($vH>1){
  105. --$vH;
  106. }
  107. if(($vH*6)<1){
  108. return ($v1+($v2-$v1)*6*$vH);
  109. }
  110. if(($vH*2)<1){
  111. return $v2;
  112. }
  113. if(($vH*3)<2){
  114. return ($v1+($v2-$v1)*((2/3)-$vH)*6);
  115. }
  116. return $v1;
  117. }
  118. }
  119. ?>