生成随机颜色

时间:2012-05-22 19:40:58

标签: php

我正在使用此代码生成随机颜色(工作正常):

  {
       $r = rand(128,255); 
       $g = rand(128,255); 
       $b = rand(128,255); 
       $color = dechex($r) . dechex($g) . dechex($b);
       return "#".$color;
  }

我只是想知道是否有一种方法/组合只能生成明亮的颜色?

谢谢

4 个答案:

答案 0 :(得分:4)

您的原始代码无法正常工作 - 如果生成的数字较小,您可能会获得#1ffff(1为低红色值) - 这是无效的。使用它会更加稳定:

echo "rgb(".$r.",".$g.",".$b.")";

由于rgb(123,45,67)是完全有效的颜色规范。

沿着类似的方向,您可以为hsl生成随机数:

echo "hsl(".rand(0,359).",100%,50%)";

这将产生任何色调的完全饱和,正常的亮度颜色。但请注意,只有最近的浏览器才支持HSL,因此如果需要考虑浏览器支持,最好不要使用RGB。

答案 1 :(得分:3)

function getRandomColor() {
    $rand = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');
    $color = '#'.$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)];
    return $color;
}

答案 2 :(得分:2)

我使用此代码检测背景颜色是浅色还是暗色,然后选择正确的字体颜色,因此字体颜色在随机生成或用户输入的背景颜色上仍然可读/可见:

//$hex: #AB12CD
function ColorLuminanceHex($hex=0) {
  $hex = str_replace('#', '', $hex);
  $luminance = 0.3 * hexdec(substr($hex,0,2)) + 0.59 * hexdec(substr($hex,2,2)) + 0.11 * hexdec(substr($hex,4,2));
  return $luminance;
}


$background_color = '#AB12CD';
$luminance = ColorLuminanceHex($background_color);
if($luminance < 128) {
  $color = '#FFFFFF';
}
else {
  $color = '#000000';
}

答案 3 :(得分:0)

使用上面的chakroun yesser&#39; s answer,我创建了这个函数:

function generateRandomColor($count=1){
    if($count > 1){
        $color = array();
        for($i=0; $count > $i; $i++)
            $color[count($color)] = generateRandomColor();
    }else{
        $rand = array_merge(range(0, 9), range('a', 'f'));
        $color = '#'.$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)].$rand[rand(0,15)];
    }
    return $color;
}