获取最佳文本颜色的算法

8
我正在寻找一种算法,可以从给定的背景色中获取最佳文本颜色(最符合视觉效果)。 有任何想法吗?

6
不会点踩因为这很有趣且有用,但你可能需要更清晰地解释“最佳颜色”以便让每个人都能理解。 - Widor
Widor提出了一个非常好的观点。请重新措辞以扩展您所说的“最佳颜色”的含义(最令人愉悦的颜色,最高对比度,适合色盲者等)。 - NPE
“ pleasingness to the eye ” 是否可以以某种客观的方式进行衡量?如果可以,那么如何衡量?如果不行,您是否明白为什么不存在这样的算法? - j_random_hacker
2个回答

12
“最好的颜色”是非常主观和依赖于上下文的。这取决于你想要什么效果:如果你想要最高的对比度,寻找互补颜色(红色与绿色,黄色与蓝色等)。如果你想要“相似”的颜色,寻找类似的和谐色。如果你只想在黑色和白色之间做决定,请测量亮度(hamstergene 发布了一个非常好的公式)。
无论您去哪里,HSV 色彩模型都是关键。
获取互补或类似的颜色很容易(例如,hue_text = (hue_bg + 180) % 360hue_text = (hue_bg + 30) % 360)。
您也可以尝试通过更改饱和度和明度来获得更好的对比度。例如,v_text = 1 - v_bg 可以给您明亮背景上深色文字或者反之(小心中间色调!)。它不一定是线性的——您还可以采用阶梯函数,如:if v_bg < 0.5 then v_text = 1 else v_text = 0if s_bg < 0.5 then s_text = 1 else s_text = 0(浅色背景上的艳丽颜色)。
这只是一些提示。总之:这取决于具体情况! 搜索颜色理论和色彩和谐。一些链接: http://www.tigercolor.com/color-lab/color-theory/color-harmonies.htm http://www.colormatters.com/color-and-design/basic-color-theory

6

并不存在一个适合所有人的最佳方案。

如果你想确保文本易于阅读,以下简单公式对我来说很有效:

textColor = brightness(backColor) > 0.5 ? black : white;

亮度定义为

brightness(R,G,B) = 0.299*R + 0.587*G + 0.114*B

“亮度”有几种定义,我选择了这个,但我认为任何一个都可以。


我回来找它,并记得有人给了一个更好的答案,而你就在这里。 :-) - Konrad Garus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接