将 HSB/HSV 颜色转换为 HSL
如何将 HSB 颜色转换为 HSL?
Photoshop 在其颜色选择器中显示 HSB 颜色。 HSB 颜色不能在 CSS 中使用,但 HSL 可以。
我尝试了这个JS:
function hsb2hsl(h, s, b) { return { h: h, s: s, l: b-s/2 } }
但是 hsb2hsl(0, 100, 50).l == 0
而不是 25
更新: 我可以这样做吗?转换 HSB → RGB → HSL?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
简短但精确
试试这个([0,1] 中的 s,v,l,更多:hsv2rgb rgb2hsv 和 hsl2rgb rgb2hsl)
此代码基于我在 wiki 上发现并编写的公式
Short but precise
Try this (s,v,l in [0,1], more: hsv2rgb rgb2hsv and hsl2rgb rgb2hsl)
This code based on formulas which I discover and write on wiki
我认为这是最准确的:
I think this is the most precise:
Stephen Morley 似乎已经在这里解决了这个问题。
具体来说:
他使用 [0-360] 作为色调,使用 [0-100] 作为其他值。
Stephen Morley seems to have nailed it here.
Specifically:
He uses [0-360] for hue and [0-100] for the other values.
首先,您的运算顺序将导致:
因为除法运算符的优先级高于减法。如果您期望 25,则需要改为
(b - s) / 2
。不过,我不太确定这个结果是否是您想要的。由于 B (V) 和 L 的定义都是基于 RGB 色彩空间,因此您至少需要一种方法来恢复 M 和 m 的值来计算转换。
有关详细信息,请参阅维基百科文章。
First of all, your order of operations will result in:
because the division operator has higher precedence than subtraction. If you're expecting 25, you need to do
(b - s) / 2
instead.I'm not exactly sure that this result is what you want, however. Since the definitions of both B (V) and L are based on the RGB colorspace, you need at least a way to recover the values of M and m to calculate the conversion.
See the Wikipedia article for more information.
维基百科不再显示 Kamil Kiełczewski 所示的公式。它们现在看起来像这样:
Wikipedia no longer shows the formulas shown by Kamil Kiełczewski. They now look like this:
您可以尝试使用 Tinycolor 库。
要从 HSV 转换为 HSL,您可以执行此
tinycolor("hsv(34, 56%, 100%)").toHslString()
您应该得到如下结果:“hsl(34, 100) %, 72%)"
You can try using Tinycolor library.
To convert from HSV to HSL you could do this
tinycolor("hsv(34, 56%, 100%)").toHslString()
you should get result somethng like this : "hsl(34, 100%, 72%)"
我使用其他答案中的函数得到了错误的结果。现在得到了这些似乎运行良好的:
I got wrong results with the functions in other answers. Now got these that seem to work well:
不同颜色空间之间的转换公式有很多: http://www.easyrgb.com/?X =数学
There are a lot of conversion formulas between different color spaces: http://www.easyrgb.com/?X=MATH
恐怕我的 Javascript 知识缺乏,但你应该能够从 http://ariya.blogspot.com/2008/07/converting- Between-hsl-and-hsv.html
I'm afraid my Javascript knowledge is lacking, but you should be able to infer the conversion from http://ariya.blogspot.com/2008/07/converting-between-hsl-and-hsv.html