随机函数只返回一些可能的颜色

时间:2011-08-16 14:54:15

标签: php random hex

我有一个生成随机颜色的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();

2 个答案:

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