HSL到RGB转换数学

时间:2015-07-24 14:53:25

标签: php colors rgb hsl

当从HSL转换为RGB时,所涉及的数学似乎相对简单,尤其是在转换灰度时,因为RGB值是亮度乘以255.

但请使用此十六进制#eeeeee。它的RGB值为rgb(238,238,238),并且它的HSL表示为hsl(0.00, 0.00, 0.93)

我发现的对转换的每次引用都是这样做的:

// Hard coded values for brevity
$hue = 0.00;
$saturation = 0.00;
$lightness = 0.00;

if ($saturation == 0)
{
    $red = $green = $blue = $lightness;
}
else
{
    // Or run the math
}

$rgb = [round($red * 255), round($green * 255), round($blue * 255)];

#eeeeee的情况下,我们知道以下内容

$red = $green = $blue = 0.93;

所有RGB值=== 238。

我看到的所有转化中的数学都没有叠加。

0.93 * 255 = 237.15

(作为备注rgb(237,237,237)生成十六进制#ededed

在舍入后,我们留下237.所以我们将结果更改为使用ciel。这适用于这种情况,但打破了很多其他转换。

我失去了这个转换中的一个步骤(所以看起来是世界其他地方)。有没有人知道如何准确从HSL计算RGB值?

1 个答案:

答案 0 :(得分:2)

基于@Lithis的评论,很明显问题在于HSL值的准确性。正如评论中指出的那样:

238 / 255 = 0.9333333 recurring

在转换中增加浮点精度会创建预期的十六进制代码。所以而不是:

0.93 * 255 = 237.15

我们与

合作
0.93333 * 255 = 237.99915

结果比237.15

更容易接受