我有一个生成随机颜色的php函数,但是我需要截断它以便它只返回浅色(因此文本可以更容易对比),我该怎么做?我很难在Hex中进行比较。这是我的功能:
function randomColor() {
$str = '#';
for($i = 0 ; $i < 6 ; $i++) {
$randNum = rand(0 , 15);
switch ($randNum) {
case 10: $randNum = 'A'; break;
case 11: $randNum = 'B'; break;
case 12: $randNum = 'C'; break;
case 13: $randNum = 'D'; break;
case 14: $randNum = 'E'; break;
case 15: $randNum = 'F'; break;
}
$str .= $randNum;
}
return $str;
}
$color = randomColor();
答案 0 :(得分:4)
浅色的十六进制值较高(#FFFFFF =白色)。
您可以更好地生成三个颜色,而不是6个单独的部分,因此您生成红色,绿色和蓝色组件。此外,您可以使用dechex()
从十进制转换为十六进制,并摆脱那个丑陋的switch
结构。
对于较浅的颜色,您可以在rand()
中设置小于0的最小值,或者在较低的颜色中设置最小值以使其变暗以使其更暗。
function randomColor ($minVal = 0, $maxVal = 255)
{
// Make sure the parameters will result in valid colours
$minVal = $minVal < 0 || $minVal > 255 ? 0 : $minVal;
$maxVal = $maxVal < 0 || $maxVal > 255 ? 255 : $maxVal;
// Generate 3 values
$r = mt_rand($minVal, $maxVal);
$g = mt_rand($minVal, $maxVal);
$b = mt_rand($minVal, $maxVal);
// Return a hex colour ID string
return sprintf('#%02X%02X%02X', $r, $g, $b);
}
所以你可以打电话给randomColor(150,255)
获得较浅的颜色,randomColor(0,100)
获得较暗的颜色。
答案 1 :(得分:1)
0xAA == 170因此您可以选择170到255之间的随机数并将其转换为十六进制。
function randomColor() {
$str = '#';
for($i = 0 ; $i < 3 ; $i++) {
$str .= dechex( rand(170 , 255) );
}
return $str;
}