我有这样的代码:
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));