如何计算随机背景颜色的最佳类型颜色?

平面设计 排版 颜色理论 对比
2022-01-06 05:23:47

根据观察者与显示器的距离,我可能需要在多个层次上呈现内容。比方说,用户从远处感知到一种平面颜色,但从近距离用户需要能够阅读一些文本。棘手的部分是给定的平面背景颜色/可以更改/我无法控制。

到目前为止,我已经制作了一个非常基本的原型,以从背景颜色中计算出文本颜色(单击以选择随机背景)。这是一种非常简单的方法:我采用色调并将其偏移 90 度(因此它足够不同)并反转 HSB 颜色空间中的亮度,因此我得到的颜色足够不同以便于阅读/与背景有良好的对比.

这有时有效:

好 1 好 2 好 3

有时不会:

坏 1 坏 2 坏 3

这种方法是好的/朝着好的方向吗?如果是这样,我怎样才能使它变得更好?如果不是,我应该遵循哪个方向?

不幸的是,我对类型和颜色理论知之甚少,因此有经验的人提供的任何提示/提示都非常有帮助。这将显示在屏幕上,而不是打印出来。

我在寻找背景色和前景色之间的什么关系?

3个回答

可读性就是对比。我会尝试确定每种背景颜色的灰度有多深,如果它高于 50% 的灰色(比光更暗),则使用白色文本,低于 50% 使用黑色文本。这将确保您至少有 50% 的对比度(色调差异)以使您的文本可读。

这种方法比尝试使用互补色或反转要容易得多,并且可以保证任何颜色的最大色调对比度。

这是我之前在 Game Development Stack Exchange 上对基本相同问题的回答。

总而言之,就像这里建议的其他答案一样,您通常应该使用blackwhite,具体取决于哪一个与背景形成更好的对比。(当然,如果你愿意,给任何一种颜色加上轻微的色调不会对对比度产生太大影响。)

请注意,为了正确确定颜色对用户的显示程度,仅平均 RGB 颜色值(或取 HSL / HSV 颜色的亮度/值)是不够的。相反,您需要考虑(至少)两个影响:

  1. 显示颜色的设备的非线性,这(至少对于计算机屏幕上的 RGB 颜色)往往会使中间色调变暗,并且

  2. 人眼的光谱敏感性,粗略地说,这会导致可见光谱中间附近的颜色(绿色、黄色、青色)看起来比边缘附近的颜色(蓝色、红色、紫色)更亮。

第一个问题可以通过伽马扩展来解决,而第二个问题只需要对 R/G/B 颜色通道进行非均匀加权。综上所述,以下是如何近似计算 RGB 颜色的感知亮度,并确定黑色或白色是否会更好地与之形成对比:

const float gamma = 2.2;
float L = 0.2126 * pow( R, gamma )
        + 0.7152 * pow( G, gamma )
        + 0.0722 * pow( B, gamma );

boolean use_black = ( L > 0.5 );

假设R和是 0.0 到 1.0G之间B的浮点数。如果您有例如 0 到 255 的整数,请将它们转换为浮点数并除以 255。

上面代码中的常量(大约)对于sRGB输入是正确的;如果您在其他颜色空间中工作,则可以调整它们,尽管确切的值并不那么重要:对于足够深或足够浅的颜色,答案无论如何都是一样的,而落在边界线附近的颜色会形成对比无论如何,黑色或白色都差不多。

我同意约翰的观点,为了确保文本尽可能保持黑色/白色,您也可以在文本中添加少量饱和度,这样您就安全了。这是一个小测试:

在此处输入图像描述

在此处查看 100% :http: //flavius.clickgarden.net/random-hsb-bg-readable-text/test-01.png在此处 下载 .ai(源)文件以玩转: http://flavius。 clickgarden.net/random-hsb-bg-readable-text/test.ai