给定一个系统(例如网站),该系统可让用户自定义某个部分的背景颜色,但不能自定义字体颜色(将选项的数量保持在最低限度),因此可以通过编程方式确定“浅色”还是“深色”字体颜色是必要的吗?
我确定有一些算法,但是我对颜色,亮度等知识还不够了解,无法靠自己解决。
我遇到了类似的问题。我必须找到一种选择对比字体颜色的好方法,以便在色标/热图上显示文本标签。它必须是通用方法,并且生成的颜色必须是“好看的”,这意味着简单生成互补色并不是一个好的解决方案- 有时它生成奇怪,非常密集的颜色,难以观看和阅读。
经过长时间的测试并尝试解决此问题,我发现最好的解决方案是为“深色”颜色选择白色字体,为“明亮”颜色选择黑色字体。
这是我在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为“感知亮度”-看起来更好!已经在我的软件中实现了它,看起来很棒。
a
编辑2 @WebSeed提供了该算法的一个很好的工作示例:http ://codepen.io/WebSeed/full/pvgqEq/