当从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值?
答案 0 :(得分:2)
基于@Lithis的评论,很明显问题在于HSL值的准确性。正如评论中指出的那样:
238 / 255 = 0.9333333 recurring
在转换中增加浮点精度会创建预期的十六进制代码。所以而不是:
0.93 * 255 = 237.15
我们与
合作0.93333 * 255 = 237.99915
结果比237.15