如何将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吗?
如何将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吗?
9条答案
按热度按时间uemypmqf1#
我认为这是最精确的:
krcsximq2#
简短但精确
试试这个(s,v,l in [0,1],more:hsv2rgbrgb2hsv和hsl2rgbrgb2hsl)
这段代码基于我在维基上发现和编写的公式
qhhrdooz3#
斯蒂芬·莫利似乎已经把它钉死了here。
具体而言:
他使用[0-360]表示色调,使用[0-100]表示其他值。
2w3rbyxf4#
首先,您的操作顺序将导致:
因为除法运算符的优先级比减法运算符高。如果您期望的是25,则需要执行
(b - s) / 2
。但是我不确定这个结果是否是你想要的,因为B(V)和L的定义都是基于RGB颜色空间的,你至少需要一种方法来恢复 M 和 m 的值来计算转换。
有关详细信息,请参阅Wikipedia文章。
rekjcdws5#
Wikipedia不再显示Kamil Kiełczewski显示的公式。它们现在看起来像这样:
htzpubme6#
您可以尝试使用Tinycolor库。要从HSV转换为HSL,您可以这样做
tinycolor("hsv(34, 56%, 100%)").toHslString()
你应该得到这样的结果:“hsl(34,100%,72%)”
34gzjxbg7#
我得到了错误的结果与功能在其他答案.现在得到这些似乎工作得很好:
bmp9r5qi8#
不同颜色空间之间有很多转换公式:http://www.easyrgb.com/?X=MATH
aamkag619#
恐怕我的Javascript知识不足,但您应该能够从http://ariya.blogspot.com/2008/07/converting-between-hsl-and-hsv.html推断出转换