提供以下输入:
我想修改color
的亮度,以使新变亮/变暗的颜色与原始颜色之间存在contrastRatio
的对比度。
在上述情况下,应将黑色的明度设置为0.585,以满足7.0
对比度。
帮助非常感谢!
答案 0 :(得分:0)
您使用https://w3.org/TR/WCAG20-TECHS/G18.html的公式1
L = 0.2126 * R + 0.7152 * G + 0.0722 * B其中R,G和B定义为:
如果R_sRGB <= 0.03928则R = R_sRGB /12.92 elseR =(((R_sRGB +0.055)/1.055)^ 2.4
如果G_sRGB <= 0.03928,则G = G_sRGB /12.92否则G =(((G_sRGB +0.055)/1.055)^ 2.4
如果B_sRGB <= 0.03928则B = B_sRGB /12.92否则B =(((B_sRGB +0.055)/1.055)^ 2.4以及R_sRGB,G_sRGB和B_sRGB定义为:
R_sRGB = R_8bit / 255
G_sRGB = G_8bit / 255
B_sRGB = B_8bit / 255
“ ^”字符是幂运算符。
所以您得到了R。不需要使用非常暗的颜色的特殊情况:对于我们的情况(对于大多数情况)来说是错误的。
然后将R,G,B除以7.0(确实可以使用(L1 + 0.05) / (L2 + 0.05)
公式(在第3点中的公式)做得更好。这是简单的数学。
现在,您可以应用逆公式来获得R_sRGB,G_sRGB和B_sRGB。然后将3个通道乘以255。您可以优化计算。
通过这种方式,您可以拥有具有更高对比度的新颜色,但是可以保持色相和饱和度。
我使用 divide ,假设您想要较深的颜色,但是您可以使用乘法来获得较亮的颜色,并且可能应该找到一个可以上下移动的阈值。
这是简单的数学运算,只是要记住您应该将线性R,G,B与相同的因子相乘,以保持色相/饱和度恒定,并忘记伽玛上非常暗的异常(如果使用它,您会得到错误的颜色:这只是显示的一个技巧,但通常不应该使用它,在这种情况下,切勿再次应用逆变换。