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

发布于 2024-11-30 08:49:09 字数 602 浏览 4 评论 0原文

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

I have a php function that generates a random color, but I need to truncate it so it only returns the light colors (so text can contrast more easily), how can I do this? I have trouble thinking it in Hex to make the comparisons. Here's my function:

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();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

心如狂蝶 2024-12-07 08:49:09

浅色具有较高的十六进制值(#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) 来获得较深的颜色。

Light colors have higher values in hex (#FFFFFF = white).

You would be much better generating the colours in threes, rather than 6 individual parts so you generate a red, green and blue component. Also, you can use dechex() to convert from decimal to hex and get rid of that ugly switch structure.

You can just set a minimum value in your rand() higher than 0 for the lighter colors, or equally make the maximum lower to make it darker.

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);

}

So you can call e.g. randomColor(150,255) to get a lighter colour or randomColor(0,100) to get a darker colour.

缱绻入梦 2024-12-07 08:49:09

0xAA == 170 因此您可以选择 170 到 255 之间的随机数并将其转换为十六进制。

function randomColor() {
    $str = '#';
    for($i = 0 ; $i < 3 ; $i++) {
        $str .= dechex( rand(170 , 255) );
    }
    return $str;
}

0xAA == 170 so you can pick a random number between 170 and 255 and convert it to hexadecimal.

function randomColor() {
    $str = '#';
    for($i = 0 ; $i < 3 ; $i++) {
        $str .= dechex( rand(170 , 255) );
    }
    return $str;
}
不顾 2024-12-07 08:49:09
function rand_color() {
$string = '';
for($x = 1; $x <= 6; $x++){
$string .= substr(str_shuffle('89abcdef'),1,1);
}
return $string;
}
function rand_color() {
$string = '';
for($x = 1; $x <= 6; $x++){
$string .= substr(str_shuffle('89abcdef'),1,1);
}
return $string;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文