0.21
,白色为1.00
。我在想,也许workwithcolor所做的是先将颜色转换为灰度,并读取灰度的亮度。我试过了,但仍然没有得到相同的结果。
到目前为止,我已经尝试了:http://jsfiddle.net/HytZQ/
0.21
,白色为1.00
。在这里检查公式:计算RGB颜色亮度的公式
Luminance (standard, objective): (0.2126*R) + (0.7152*G) + (0.0722*B)
将R设为255,G和B设为0,你会得到54
编辑: 对于相对亮度,除以最大值(255) 你会得到21%
对于白色,你会得到100%
http://www.cambridgeincolour.com/forums/thread23366.htm
红色 (#FF0000) 在100%饱和度下的亮度为50%,但我们使用的软件程序会稍微调整值以考虑感知因素。
您需要做的是从纯色开始。纯色是指HSL颜色空间中亮度为50%,饱和度为100%的颜色,并且改变色相值可以得到纯色。通过HSL / RGB颜色空间,共有6 * 60种纯色可用。即,如果将以下组合生成的颜色相加,您将获得360种纯色。
R=255*(x/60), G=0, B=255; x从0变化到60 R=255*(x/60), G=255, B=0; x从0变化到60
R=255, G=255*(x/60), B=0; x从0变化到60 R=0, G=255*(x/60), B=255; x从0变化到60
R=255, G=0, B=255*(x/60); x从0变化到60 R=0, G=255, B=255*(x/60); x从0变化到60
我们所看到的所有颜色都是饱和度和亮度的操纵。
现在, 要获得灰度图像:
1 - 您可以使用Jerry建议的亮度公式(还有其他公式可获得更好的性能)。 2 - 您可以在HSL颜色空间中将饱和度更改为0%,这正是http://www.workwithcolor.com/hsl-color-schemer-01.htm所做的。
这些问题很相似, 所以我在两个帖子上发布了同样的答案。
获取它们所显示的值的方法是将颜色从sRGB转换为CIE-XYZ,然后从CIE-XYZ转换为L*a*b*(或CIELAB)。
在CIELAB中,L*被描述为感知亮度,这就是页面显示为亮度的值。
您可以使用以下方程式快速计算此值,请记住RGB值必须进行归一化(值从0到1):
这里是使用颜色亮度解释上的颜色,对比本算法(L*)和页面上的算法(Lum.)的比较。
颜色 | L* [%] | Lum. [%] |
---|---|---|
#FF0000 |
53.232881... | 54 (53.77) |
#FF8000 |
67.050096... | 65 (65.06) |
#FFFF00 |
97.138246... | 94 (93.63) |
#80FF00 |
89.910015... | 83 (82.96) |
#00FF00 |
87.737033... | 80 (79.52) |
#00FF80 |
88.485146... | 82 (81.63) |
#00FFFF |
91.116521... | 87 (87.44) |
#0080FF |
54.718662... | 57 (57.36) |
#0000FF |
32.302586... | 44 (43.95) |
#8000FF |
40.911243... | 52 (51.51) |
#FF00FF |
60.319933... | 70 (70.28) |
#FF0080 |
54.884906... | 60 (59.59) |
对于 #FF8080
,我得到了 %68.209498...(页面显示为 %69 (%68.60)),但你说该值为 %89,我猜这是打错字了。