使用PHP生成随机十六进制颜色代码

时间:2011-04-10 20:35:16

标签: php hex

我正在开发一个项目,我需要生成一个未定义数量的随机十六进制颜色代码......我将如何在PHP中构建这样的函数?

14 个答案:

答案 0 :(得分:115)

RGB十六进制字符串只是一个从0x0到0xFFFFFF的数字,所以只需在该范围内生成一个数字并将其转换为十六进制:

function rand_color() {
    return '#' . str_pad(dechex(mt_rand(0, 0xFFFFFF)), 6, '0', STR_PAD_LEFT);
}

或:

function rand_color() {
    return sprintf('#%06X', mt_rand(0, 0xFFFFFF));
}

答案 1 :(得分:85)

从0到255获取一个随机数,然后将其转换为十六进制:

function random_color_part() {
    return str_pad( dechex( mt_rand( 0, 255 ) ), 2, '0', STR_PAD_LEFT);
}

function random_color() {
    return random_color_part() . random_color_part() . random_color_part();
}

echo random_color();

答案 2 :(得分:44)

你可以将md5用于此目的,非常简短

$color = substr(md5(rand()), 0, 6);

答案 3 :(得分:29)

$rand = str_pad(dechex(rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT);
echo('#' . $rand);

如果需要,您可以更改rand() mt_rand()strtoupper() str_pad() {{1}}可以使随机数看起来更好(尽管不是必需的) )。

它完美地工作,并且比这里描述的所有其他方法更简单:)

答案 4 :(得分:13)

有效的十六进制颜色可以包含0到9和A到F所以如果我们创建一个包含这些字符的字符串然后随机播放,我们可以抓取前6个字符来创建随机的十六进制颜色代码。下面是一个例子!

<强>码

echo '#' . substr(str_shuffle('ABCDEF0123456789'), 0, 6);

我在while循环中对此进行了测试,并生成了10,000种独特颜色。

代码我曾经生成10,000种独特颜色:

$colors = array();
while (true) {
   $color          = substr(str_shuffle('ABCDEF0123456789'), 0, 6);
   $colors[$color] = '#' . $color;
   if ( count($colors) == 10000 ) {
      echo implode(PHP_EOL, $colors);
      break;
   }
}

结果给了我these random colors

outis指出我的第一个例子无法生成十六进制数,例如'4488CC',所以我创建了一个能够生成类似十六进制的函数。

<强>码

function randomHex() {
   $chars = 'ABCDEF0123456789';
   $color = '#';
   for ( $i = 0; $i < 6; $i++ ) {
      $color .= $chars[rand(0, strlen($chars) - 1)];
   }
   return $color;
}

echo randomHex();

第二个例子会更好用,因为它可以返回比第一个例子更多不同的结果,但是如果你不打算生成很多颜色代码,那么第一个例子就可以了。

答案 5 :(得分:9)

$color = sprintf("#%06x",rand(0,16777215));

答案 6 :(得分:7)

最短路:

echo substr(uniqid(),-6); // result: 5ebf06

答案 7 :(得分:3)

从PHP 5.3开始,您可以使用openssl_random_pseudo_bytes()

$hex_string = bin2hex(openssl_random_pseudo_bytes(3));

答案 8 :(得分:1)

我就是这样做的。

<?php echo 'rgba('.rand(0,255).', '.rand(0,255).', '.rand(0,255).', 0.73)'; ?>

答案 9 :(得分:1)

我认为这样可以获得任何颜色

$color= substr(str_shuffle('AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899'), 0, 6);

答案 10 :(得分:1)

Code 2

答案 11 :(得分:1)

这很大程度上基于上面的@Galen 版本,但是,我想添加范围控制,可以将生成的颜色限制为红色、绿色、蓝色、更亮或更暗。它可能对其他人有用。

function random_colour_part($lower, $upper)
{
    //randomly select colour in range and convert to hexidecimal
    return str_pad(dechex(mt_rand($lower, $upper)), 2, '0', STR_PAD_LEFT);
}

function random_colour($colour)
{
    //loop through colour
    foreach ($colour as $key => $value)
    {
        //retrieve each r,g,b colour range and generate random hexidecimal colour
        if ($key == "r") $r = random_colour_part($value[0], $value[1]);
        if ($key == "g") $g = random_colour_part($value[0], $value[1]);
        if ($key == "b") $b = random_colour_part($value[0], $value[1]);
    }

    //return hexidecimal colour
    return "#" . $r . $g . $b;
}

//generate a random red-based colour
echo random_colour(["r"=>[0,255], "g"=>[0,0], "b"=>[0,0]]);

//generate a random light green-based colour (use only half of the 255 range)
echo random_colour(["r"=>[0,0], "g"=>[127,255], "b"=>[0,0]]);

//generate a random colour of any sort
echo random_colour(["r"=>[0,255], "g"=>[0,255], "b"=>[0,255]]);

答案 12 :(得分:0)

不再需要网络安全的颜色(甚至也不是有效的概念),因为即使移动设备最近也有16位以上的颜色。

有关详细信息,请参阅Wikipedia

换句话说,使用#000000到#FFFFFF的任何颜色。

编辑:亲爱的downvoters。首先检查问题的编辑历史记录。

答案 13 :(得分:0)

如果有人想产生浅色

sprintf('#%06X', mt_rand(0xFF9999, 0xFFFF00));