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

Tsu*_*oku 1 php random hex

我有一个生成随机颜色的 php 函数,但我需要截断它,以便它只返回浅色(这样文本可以更容易地对比),我该怎么做?我很难用十六进制思考来进行比较。这是我的功能:

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();
Run Code Online (Sandbox Code Playgroud)

Dav*_*dom 5

浅色在十六进制中具有更高的值(#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);

}
Run Code Online (Sandbox Code Playgroud)

因此,您可以调用例如randomColor(150,255)获取更浅的颜色或 randomColor(0,100)获取更深的颜色。