给定灰度值,什么颜色提供最高的视觉对比度?

时间:2013-10-22 14:25:37

标签: colors rgb complement

假设我有一张灰色的图像,我想画一个像文字就可以了。现在图像有一些黑暗和一些明亮的区域。因此,如果我为每个角色选择一个单独的颜色,我会以什么方式计算这样的颜色以获得最高的文本对比度?

务实的方法是使用黄色。 (我不知道为什么,但它常用于电影和纪录片中的字幕) 此外,我可以在明亮背景区域中使黄色变暗,并在深色背景区域突出显示。但这可能会产生一些层效应。

我知道色彩空间可能很重要。我从RGB灰度值开始,但LAB,HSV或HSL可能更适合计算最佳颜色。

修改 因为有一个有用的用例的问题:我真的不想绘制不同颜色的文字。它是关于灰色纹理背景上的特定字形的颜色选择。 (例如MR图像。)

1 个答案:

答案 0 :(得分:1)

您问题的最简单答案是最大化背景和文字颜色之间的距离。

如果您转换为HSL,您可以通过最大化L(V HS中的V)之间的距离来实现此目的。所需要的是在背景亮度小于50%时选择白色,否则选择黑色。以下是一个示例:http://jsfiddle.net/E2kU4/

if(bgLightness < 50){
    color = "white";
}else{
    color = "black";   
}

我认为这几乎解决了这个问题,但还有其他一些问题:

我不确定这个用例是什么。带有不同颜色字符的单词可能看起来很糟糕。通常,字幕选择单一颜色以保持一致性。

由于黄色饱和,黄色确实在黑白图像上脱颖而出。此外(并且我不确定如何准确地将其写入单词),与具有相似亮度的其他颜色相比,黄色具有非常高的色度。最好在HUSL页面上进行演示;顺便说一句,HUSL是一个很好的库,用于创建可读的颜色。

黄色很容易与深色对比,因为它非常轻。它也不与浅色对比,但通常通过在字幕中添加阴影/轮廓来解决。另一个例子:http://jsfiddle.net/E2kU4/1/

但是您可以将相同的技术(应用阴影或轮廓)应用于黑/白示例以获得最大对比度。现在,轮廓与文本具有最大对比度。轮廓也从背景中脱颖而出,除非那些颜色相似,在这种情况下对比度已经非常高(例如近黑色背景,黑色轮廓,白色文字)http://jsfiddle.net/E2kU4/2/

最后,转换为HSL / RGB和从HSL / RGB转换应该是微不足道的。有很多库可以做到。