我有这段代码:
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数据库中。但有时它会产生太浅的颜色。 (这是一个问题,因为稍后会显示这些颜色,我的背景颜色为白色)
我的简单问题是:如何防止颜色太浅或太暗?我应该如何自定义代码?
答案 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;
}
答案 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));
这可能是解决问题的简单方法。