php dechex仅适用于深色

php dechex仅适用于深色,php,Php,我正在使用php函数根据需要生成随机颜色。这是我的工作代码 dechex(rand(0x000000, 0xFFFFFF)); 但是,我只想用深色。到目前为止,我已经找到了这段代码,它只生成浅色,谢谢你的文章 然而,我还没有找到一个适当的解决方案,只生成深色。我试过以下几种方法 '#' . substr(str_shuffle('AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF0011223

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

dechex(rand(0x000000, 0xFFFFFF));
但是,我只想用深色。到目前为止,我已经找到了这段代码,它只生成浅色,谢谢你的文章

然而,我还没有找到一个适当的解决方案,只生成深色。我试过以下几种方法

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

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

编辑

我想要一个带有hexrgb的解决方案


我怎样才能做到这一点

通过限制最大值,将十六进制设置为仅包含深色:

$max = 9;

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

在这里如何获得黑色的十六进制和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).  ')';

生成随机颜色:

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

即使随机生成的颜色是暗的,函数也会拾取较暗的颜色。通常它会变成黑色

生成随机数后,您需要确保每对十六进制数字都低于某个级别。由于
rand()
将生成任何上限值,因此我的方法是保持原始上限值
0xffffff
,但生成数字后,应用按位and(&)清除每个字节的高位

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

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

如何定义“深色”?使用术语
dark
可能会重复,我指的是一种可以设置文本颜色(如白色或浅色)的颜色。因此,将深色范围放入您的代码
sprintf('#%06X',mt u rand(0x000000,0x555555));
echo '#'.dechex(rand(0x000000, 0xFFFFFF) & 0x3f3f3f);