改变颜色的亮度,以达到最小的对比度

时间:2019-08-21 11:26:13

标签: colors

提供以下输入:

  • 颜色:黑色(rgb(0,0,0))
  • contrastRatio :7.0

我想修改color的亮度,以使新变亮/变暗的颜色与原始颜色之间存在contrastRatio的对比度。

在上述情况下,应将黑色的明度设置为0.585,以满足7.0对比度。

帮助非常感谢!

1 个答案:

答案 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 else R =(((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与相同的因子相乘,以保持色相/饱和度恒定,并忘记伽玛上非常暗的异常(如果使用它,您会得到错误的颜色:这只是显示的一个技巧,但通常不应该使用它,在这种情况下,切勿再次应用逆变换。