如何使用PHP检测“轻”颜色

前端之家收集整理的这篇文章主要介绍了如何使用PHP检测“轻”颜色前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开展一个动态商店项目,我使用循环来打印产品的所有颜色选项作为颜色框,但我真的需要添加一个“边框”这些颜色很轻.我尝试了以下的东西,但它是非常有限的,它实际上仅限于白色,它不会捕获像#ddd,#eea …等

这是我的循环:

foreach($colors as $color) {
                $color = trim($color);
                if (!empty($color)) {
                    if (in_array($color,array('white','White','#fff','#FFF','#FFFFFF','#ffffff'))) {
                        $bordercolor = '#bbb';
                    } else {
                        $bordercolor = $color;
                    }
                }
    }

颜色是后端的数组,如:White,#000,#cc0000等.在if / else条件中添加所有异常也是不实际的,任何快速的想法?

将HTML颜色转换为RGB,然后将色彩饱和度Lightnes(HSV)
<?PHP

function HTMLToRGB($htmlCode)
  {
    if($htmlCode[0] == '#')
      $htmlCode = substr($htmlCode,1);

    if (strlen($htmlCode) == 3)
    {
      $htmlCode = $htmlCode[0] . $htmlCode[0] . $htmlCode[1] . $htmlCode[1] . $htmlCode[2] . $htmlCode[2];
    }

    $r = hexdec($htmlCode[0] . $htmlCode[1]);
    $g = hexdec($htmlCode[2] . $htmlCode[3]);
    $b = hexdec($htmlCode[4] . $htmlCode[5]);

    return $b + ($g << 0x8) + ($r << 0x10);
  }

function RGBToHSL($RGB) {
    $r = 0xFF & ($RGB >> 0x10);
    $g = 0xFF & ($RGB >> 0x8);
    $b = 0xFF & $RGB;

    $r = ((float)$r) / 255.0;
    $g = ((float)$g) / 255.0;
    $b = ((float)$b) / 255.0;

    $maxC = max($r,$g,$b);
    $minC = min($r,$b);

    $l = ($maxC + $minC) / 2.0;

    if($maxC == $minC)
    {
      $s = 0;
      $h = 0;
    }
    else
    {
      if($l < .5)
      {
        $s = ($maxC - $minC) / ($maxC + $minC);
      }
      else
      {
        $s = ($maxC - $minC) / (2.0 - $maxC - $minC);
      }
      if($r == $maxC)
        $h = ($g - $b) / ($maxC - $minC);
      if($g == $maxC)
        $h = 2.0 + ($b - $r) / ($maxC - $minC);
      if($b == $maxC)
        $h = 4.0 + ($r - $g) / ($maxC - $minC);

      $h = $h / 6.0; 
    }

    $h = (int)round(255.0 * $h);
    $s = (int)round(255.0 * $s);
    $l = (int)round(255.0 * $l);

    return (object) Array('hue' => $h,'saturation' => $s,'lightness' => $l);
  }

$colour = '#F12346';
$rgb = HTMLToRGB($colour);
$hsl = RGBToHSL($rgb);

var_dump($hsl);

用法

$colour = '#F12346';
$rgb = HTMLToRGB($colour);
$hsl = RGBToHSL($rgb);
if($hsl->lightness > 200) {
  // this is light colour!
}

资源:

> http://www.caperna.org/computing/repository/hsl-rgb-color-conversion-php

演示:

> http://codepad.org/X7KV4n4n

猜你在找的PHP相关文章