Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php RGB至HSL功能中的饱和度计算不正确_Php_Colors_Rgb_Hsl_Color Palette - Fatal编程技术网

Php RGB至HSL功能中的饱和度计算不正确

Php RGB至HSL功能中的饱和度计算不正确,php,colors,rgb,hsl,color-palette,Php,Colors,Rgb,Hsl,Color Palette,有人知道从RGB颜色获得饱和度的正确公式吗 我已经有了一个函数来实现它。我试过在互联网上发布很多,但只有这一个似乎对我起作用(第一次),除了饱和度偶尔有点低之外 rgb(204153,51)应该等于hsl(40,60,50),而不是hsl(40,75,50)。正如你所看到的,我的色调和亮度是正确的,事实上,饱和度也基本上是正确的,但有时不是,如果可以的话,我需要纠正 这是我到目前为止建立的,所以我可以检查我的图像的所有颜色值是否正确,然后再将它们存储到搜索引擎的数据库中 这就是我认为饱和度计算

有人知道从RGB颜色获得饱和度的正确公式吗

我已经有了一个函数来实现它。我试过在互联网上发布很多,但只有这一个似乎对我起作用(第一次),除了饱和度偶尔有点低之外

rgb(204153,51)
应该等于
hsl(40,60,50)
,而不是
hsl(40,75,50)
。正如你所看到的,我的色调和亮度是正确的,事实上,饱和度也基本上是正确的,但有时不是,如果可以的话,我需要纠正

这是我到目前为止建立的,所以我可以检查我的图像的所有颜色值是否正确,然后再将它们存储到搜索引擎的数据库中

这就是我认为饱和度计算不正确的函数:

function RGBtoHSL($red, $green, $blue)
{
    $r = $red / 255.0;
    $g = $green / 255.0;
    $b = $blue / 255.0;
    $H = 0;
    $S = 0;
    $V = 0;

    $min = min($r,$g,$b);
    $max = max($r,$g,$b);
    $delta = ($max - $min);

    $L = ($max + $min) / 2.0;

    if($delta == 0) {
        $H = 0;
        $S = 0;
    } else {
        $S = $delta / $max;

        $dR = ((($max - $r) / 6) + ($delta / 2)) / $delta;
        $dG = ((($max - $g) / 6) + ($delta / 2)) / $delta;
        $dB = ((($max - $b) / 6) + ($delta / 2)) / $delta;

        if ($r == $max)
            $H = $dB - $dG;
        else if($g == $max)
            $H = (1/3) + $dR - $dB;
        else
            $H = (2/3) + $dG - $dR;

        if ($H < 0)
            $H += 1;
        if ($H > 1)
            $H -= 1;
    }
    $HSL = ($H*360).', '.($S*100).', '.round(($L*100),0);
    return $HSL;
}
致:

现在生成100%正确的结果

友好提示


如果有人想让代码生成这个颜色表,只要问一下。

如果你的亮度大于0.5,看起来你缺少了一部分饱和度计算

var q=l<0.5?l*(1+s):l+s-l*s;

太棒了,非常感谢。我在PHP中添加了这一重要行,现在它工作得非常完美。我从一个流行的博客中获得了该函数,迫不及待地想回来留言!:)
$S = $delta / $max;
$S = $L > 0.5 ? $delta / (2 - $max - $min) : $delta / ($max + $min);
var q = l < 0.5 ? l * (1 + s) : l + s - l * s;