小编典典

根据背景色确定字体颜色

algorithm

给定一个系统(例如网站),该系统可让用户自定义某个部分的背景颜色,但不能自定义字体颜色(将选项的数量保持在最低限度),因此可以通过编程方式确定“浅色”还是“深色”字体颜色是必要的吗?

我确定有一些算法,但是我对颜色,亮度等知识还不够了解,无法靠自己解决。


阅读 365

收藏
2020-07-28

共1个答案

小编典典

我遇到了类似的问题。我必须找到一种选择对比字体颜色的好方法,以便在色标/热图上显示文本标签。它必须是通用方法,并且生成的颜色必须是“好看的”,这意味着简单生成互补色并不是一个好的解决方案-
有时它生成奇怪,非常密集的颜色,难以观看和阅读。

经过长时间的测试并尝试解决此问题,我发现最好的解决方案是为“深色”颜色选择白色字体,为“明亮”颜色选择黑色字体。

这是我在C#中使用的函数示例:

Color ContrastColor(Color color)
{
    int d = 0;

    // Counting the perceptive luminance - human eye favors green color... 
    double luminance = ( 0.299 * color.R + 0.587 * color.G + 0.114 * color.B)/255;

    if (luminance > 0.5)
       d = 0; // bright colors - black font
    else
       d = 255; // dark colors - white font

    return  Color.FromArgb(d, d, d);
}

已针对多种色阶(彩虹,灰度,热,冰和许多其他色阶)测试了此方法,这是我发现的唯一“通用”方法。

编辑
将计数公式更改a为“感知亮度”-看起来更好!已经在我的软件中实现了它,看起来很棒。

编辑2
@WebSeed提供了该算法的一个很好的工作示例:http
://codepen.io/WebSeed/full/pvgqEq/

2020-07-28