颜色 – 如何决定字体颜色在白色或黑色取决于背景颜色?

我想显示一些像这个例子的图像

填充颜​​色由数据库中的字段决定,颜色为十六进制(例如:ClassX – >颜色:#66FFFF)。
现在,我想显示数据上面的填充用选定的颜色(如上图),但我需要知道,如果颜色是黑暗或光,所以我知道这些词应该是白色还是黑色。
有办法吗? tks

建立在我的answer to a similar question

你需要将十六进制代码分成3部分,以获得单独的红色,绿色和蓝色强度。代码的每2位代表十六进制(base-16)符号的值。我不会在这里看到转换的细节,他们很容易查找。

一旦你有各种颜色的强度,你可以确定颜色的总体强度,并选择相应的文字。

if (red*0.299 + green*0.587 + blue*0.114) > 186 use #000000 else use #ffffff

编辑:上面是简单的,工作相当不错,似乎在StackOverflow这里有良好的接受。但是,下面的一个注释表明,在某些情况下,它可能导致不符合W3C指南。因此,我得出一个修改后的形式,总是根据指南选择最高的对比度。

W3C Recommendations中给出的对比公式是(L1×0.05)/(L2×0.05),其中L1是最亮颜色的亮度,L2是0.0-1.0的标度上最暗的亮度。黑色的亮度为0.0,白色为1.0,因此替换这些值可以确定具有最高对比度的值。如果黑色的对比度大于白色的对比度,请使用黑色,否则使用白色。给定您测试的颜色的亮度为L,测试变为:

if (L + 0.05) / (0.0 + 0.05) > (1.0 + 0.05) / (L + 0.05) use #000000 else use #ffffff

这简化了代数:

if L > sqrt(1.05 * 0.05) - 0.05

或约:

if L > 0.179 use #000000 else use #ffffff

唯一剩下的就是计算L.该公式也是given in the guidelines,它看起来像从sRGB到线性RGB的转换,然后是ITU-R recommendation BT.709的亮度。

for each c in r,g,b:
    c = c / 255.0
    if c <= 0.03928 then c = c/12.92 else c = ((c+0.055)/1.055) ^ 2.4
L = 0.2126 * r + 0.7152 * g + 0.0722 * b
翻译自:https://stackoverflow.com/questions/3942878/how-to-decide-font-color-in-white-or-black-depending-on-background-color

转载注明原文:颜色 – 如何决定字体颜色在白色或黑色取决于背景颜色?