【问题标题】:How to generate light pastel colors based on a string?如何根据字符串生成浅色?
【发布时间】:2017-05-06 15:46:23
【问题描述】:

我正在使用以下函数来生成柔和的颜色。但有时它会产生深色调(如#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);
}

【问题讨论】:

  • 你试过我的答案了吗?有帮助吗?

标签: php colors


【解决方案1】:

#B69C97 是 RGB 格式的 (182,156,151)。根据您的代码,您对“黑暗”的定义小于 128,这被证明是错误的,因为 (182, 156, 151) 对您来说仍然是“黑暗”。我会尝试将这个默认的“暗”值从 128 更改为更高的值,比如 160。就在这个例子中,您将消除包含小于 160 的值的颜色,就像您的情况一样,并减轻平均输出。

【讨论】:

    【解决方案2】:

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

        $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 . ')';
    

    这将返回 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);
    
        $rgbColor = [];
        foreach($colorMap as $key => $value) {
            $rgbColor[$key] = $value;
        }
    
        $color = sprintf('#%02x%02x%02x', $rgbColor['r'], $rgbColor['g'], $rgbColor['b']);
    

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

    【讨论】:

    猜你喜欢
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 2013-01-02
    相关资源
    最近更新 更多