我正在寻找一种算法,以从给定的背景颜色中获得最佳的文本颜色(最令人愉悦)。
有什么想法吗?
答案 0 :(得分:12)
“最佳颜色”非常主观且依赖于背景。这取决于你想要的效果:如果你想要尽可能高的对比度,寻找互补色(绿色为红色,蓝色为黄色等)。如果你想要“相似”的颜色,寻找类似的和声。如果你只想在黑白之间做出决定,测量亮度(hamstergene为它发布了一个很好的公式)。
无论您走到哪里,HSV颜色模型都是关键。
获得互补或类似的颜色是微不足道的(例如hue_text = (hue_bg + 180) % 360
或hue_text = (hue_bg + 30) % 360
)。
您还可以尝试使用值(亮度)和饱和度来获得更好的对比度。例如,v_text = 1 - v_bg
可以在明亮的背景上为您提供深色文本,反之亦然(注意中间色调!)。它不一定是线性的 - 你也可以选择一个步骤函数:if v_bg < 0.5 then v_text = 1 else v_text = 0
或if 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
答案 1 :(得分:6)
每个人都没有最好的选择。
如果您需要确保文本易于阅读,请使用以下简单公式:
textColor = brightness(backColor) > 0.5 ? black : white;
其中亮度定义为
brightness(R,G,B) = 0.299*R + 0.587*G + 0.114*B
(“亮度”有几个定义,我使用过这个,但我认为任何一个都可以工作)。