php dechex仅具有深色

时间:2019-02-15 09:16:05

标签: php

我正在使用php的dechex函数根据要求生成随机颜色。这是我的工作代码。

dechex(rand(0x000000, 0xFFFFFF));

但是,我只想使用深色。到目前为止,我已经找到了这段代码,只感谢thisthis的文章,所以只能生成浅色。

但是,我还没有找到合适的解决方案以仅生成深色。我已经尝试了以下几种方法。

'#' . substr(str_shuffle('AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899'), 0, 6); 

还有

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

但是这些有时会随机产生浅色。

修改

我想使用 hex rgb 的解决方案。

我该如何实现?

4 个答案:

答案 0 :(得分:2)

如何在Hex和RGB上获得深色

$hexMin = 0;
$hexMax = 9;
$rgbMin = 0;
$rgbMax = 153; // Hex 99 = 153 Decimal
$hex = '#' . mt_rand($hexMin,$hexMax) . mt_rand($hexMin, $hexMax) . mt_rand($hexMin, $hexMax) . mt_rand($hexMin,$hexMax) . mt_rand($hexMin, $hexMax) . mt_rand($hexMin, $hexMax);
$rgb = 'rgb(' . mt_rand($rgbMin,$rgbMax). ',' . mt_rand($rgbMin,$rgbMax).  ',' . mt_rand($rgbMin,$rgbMax).  ')';

答案 1 :(得分:1)

通过限制最大值,使十六进制仅包含深色:

$max = 9;

'#' . mt_rand(0. $max) . mt_rand(0. $max) . mt_rand(0. $max);

答案 2 :(得分:1)

生成随机颜色:

function darker_color($rgb, $darker=2) {

    $hash = (strpos($rgb, '#') !== false) ? '#' : '';
    $rgb = (strlen($rgb) == 7) ? str_replace('#', '', $rgb) : ((strlen($rgb) == 6) ? $rgb : false);
    if(strlen($rgb) != 6) return $hash.'000000';
    $darker = ($darker > 1) ? $darker : 1;

    list($R16,$G16,$B16) = str_split($rgb,2);

    $R = sprintf("%02X", floor(hexdec($R16)/$darker));
    $G = sprintf("%02X", floor(hexdec($G16)/$darker));
    $B = sprintf("%02X", floor(hexdec($B16)/$darker));

    return $hash.$R.$G.$B;
}

$color = '#'.dechex(rand(0x000000, 0xFFFFFF));
$dark = darker_color($color);

echo "$color => $dark";

即使随机生成的颜色是深色,该函数也会选择深色。通常是黑色。

答案 3 :(得分:1)

您似乎想要的主要事情是,一旦生成随机数,就确保每对十六进制数字都低于某个特定水平。由于rand()会产生任何值,直到上限,所以我的方法是保持原来的限制0xffffff,但是一旦生成数字,请按位和(&)清除高位每个字节...

echo '#'.dechex(rand(0x000000, 0xFFFFFF) & 0x3f3f3f);

您可以将0x3f3f3f调整为要设置为限制最大值的限制。