如何基于字符串生成浅色柔和的颜色?

时间:2016-12-21 09:17:28

标签: php colors

我使用以下功能生成柔和的色彩。但有时会产生深色调(如#B69C97)。如何确保仅生成浅色调?

function get_color($name) {
    $hash = md5($name);

    $color1 = hexdec(substr($hash, 8, 2));
    $color2 = hexdec(substr($hash, 4, 2));
    $color3 = hexdec(substr($hash, 0, 2));
    if($color1 < 128) $color1 += 128;
    if($color2 < 128) $color2 += 128;
    if($color3 < 128) $color3 += 128;

    return "#" . dechex($color1) . dechex($color2) . dechex($color3);
}

2 个答案:

答案 0 :(得分:0)

RGB中的{p> #B69C97(182,156,151)。你对&#34; dark&#34;的定义根据你的代码小于128,这被证明是错误的,因为(182, 156, 151)仍然是&#34;黑暗&#34;为了你。我会尝试更改此默认值&#34; dark&#34;从128到更高的值,比如160.就这个例子而言,你将消除包含小于160的值的颜色,如你的情况,并减轻平均输出。

答案 1 :(得分:0)

晚了几年就可以了,但这可能会对某人有所帮助

is_some()

这将返回rgb值。

这应该生成一种随机的柔和颜色,该颜色使用红色,绿色或蓝色作为其最主要的直白颜色。

编辑:

    $baseColors = [
        1 => 'r',
        2 => 'g',
        3 => 'b'
    ];
    $colorMap = [];
    $minValue = 155;
    $maxValue = 200;

    $primaryColorIndex = rand(1, 3);

    $primaryColor = $baseColors[$primaryColorIndex];
    unset($baseColors[$primaryColorIndex]);

    $colorMap[$primaryColor] = 255;

    foreach($baseColors as $baseColor) {
        $colorMap[$baseColor] = rand($minValue, $maxValue);
    }

    krsort($colorMap);

    $color = '';
    foreach($colorMap as $value) {
        $color .= $value;
        if($value !== end($colorMap)) {
            $color .= ',';
        }
    }

    return 'rgb(' . $color . ')';

这将返回一个十六进制值。