我应该如何防止无法看到的颜色?

时间:2011-10-28 11:33:15

标签: php colors

我有这段代码:

function rand_colorCode(){
  $r = dechex(mt_rand(0,255));
  $g = dechex(mt_rand(0,255));
  $b = dechex(mt_rand(0,255));
  $rgb = $r.$g.$b;
  if($r == $g && $g == $b){
    $rgb = substr($rgb,0,3);
  }
  return '#'.$rgb;
}

$code = rand_colorCode();

这会生成一个随机颜色,稍后会插入到mysql数据库中。但有时它会产生太浅的颜色。 (这是一个问题,因为稍后会显示这些颜色,我的背景颜色为白色)

我的简单问题是:如何防止颜色太浅或太暗?我应该如何自定义代码?

3 个答案:

答案 0 :(得分:2)

使用较短的颜色范围:

mt_rand(80,200)

下边界可防止近黑色,而较高边界可防止近白色。您可以根据需要调整此范围。

答案 1 :(得分:2)

您可以计算当前颜色组的亮度,并根据某些预定义的限制进行验证:

while ( true )
{
  $r = dechex(mt_rand(0,255));
  $g = dechex(mt_rand(0,255));
  $b = dechex(mt_rand(0,255));
  $brightness = ( 0.2126 * $r ) + ( 0.7152 * $g ) + ( 0.0722 * $b )
  if ( $brightness > $lower_limit || $brightness < $upper_limit )
     break;
}

公式取自Formula to determine brightness of RGB color

答案 2 :(得分:0)

(例如)白色的RGB代码是255,255,255。 你可以定义一个规则如果所有三个值(R,G&amp; B)高于某个阈值,颜色将太亮,因此无法正确显示。尝试通过查看颜色窗口来自定义阈值。也许200,200,200是你想要的最大值,最低50,50,50。

然后,您可以将颜色从50到200随机化(如果将其定义为阈值)。而不是

 $r = dechex(mt_rand(0,255)); 

你做

 $r = dechex(mt_rand(50,200)); 

这可能是解决问题的简单方法。