我该如何防止看不到的颜色


How should I prevent colors that cannot be seen?

我有这样的代码:

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数据库中。但有时它会产生太浅的颜色。(这是一个问题,因为这些颜色稍后显示,我的背景色是白色)

我的问题很简单:我怎样才能避免颜色太亮或太暗?我应该如何定制我的代码?

使用更短的颜色范围:

mt_rand(80,200)

下边界阻止接近黑色的颜色,而上边界阻止接近白色的颜色。您可以根据需要调整此范围。

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

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;
}

RGB颜色亮度确定公式

例如,白色的RGB代码是255,255,255。你可以定义一个规则,如果所有三个值(R, G &B)超过一定的阈值,颜色会太浅,从而不能正确显示。试着通过查看调色板来定义一个阈值。也许200,200,200是你想要的最大值,50,50,50是最小值。

你可以随机选择一个从50到200的颜色(如果你将其定义为阈值)。所以不用

 $r = dechex(mt_rand(0,255)); 
你做了

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