Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Colors 给定一个灰度值,什么颜色提供最高的视觉对比度?_Colors_Rgb_Complement - Fatal编程技术网

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

Colors 给定一个灰度值,什么颜色提供最高的视觉对比度?,colors,rgb,complement,Colors,Rgb,Complement,假设我有一个灰色图像,我想在上面画一些文字。现在图像有一些暗区域和一些亮区域。所以,如果我为每个字符选择一种单独的颜色,我该如何计算这种颜色以获得文本的最高对比度 一种实用的方法是使用黄色。(我不知道为什么,但它经常在电影和纪录片中用作字幕) 此外,我可以在明亮背景的区域将黄色调暗,并在黑暗背景的区域将其高亮显示。但这可能会提供一些图层效果 我知道颜色空间可能很重要。我从RGB灰度值开始,但LAB、HSV或HSL可能更适合计算最佳颜色 编辑: 因为有一个有用用例的问题:我真的不想用不同的颜色绘制

假设我有一个灰色图像,我想在上面画一些文字。现在图像有一些暗区域和一些亮区域。所以,如果我为每个字符选择一种单独的颜色,我该如何计算这种颜色以获得文本的最高对比度

一种实用的方法是使用黄色。(我不知道为什么,但它经常在电影和纪录片中用作字幕) 此外,我可以在明亮背景的区域将黄色调暗,并在黑暗背景的区域将其高亮显示。但这可能会提供一些图层效果

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

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

对您的问题最简单的回答是最大化背景和文本颜色之间的距离

如果您转换为HSL,可以通过最大化L之间的距离(HSV中的V)来实现这一点。当背景亮度小于50%时,只需选择白色,否则选择黑色。以下是一个例子:

if(亮度<50){
color=“白色”;
}否则{
color=“黑色”;
}
我认为这基本上解决了问题,但还有其他几点:

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

黄色的饱和度使它在黑白图像中显得格外突出。此外(我不知道如何准确地用词来表达),与其他亮度相似的颜色相比,黄色的色度真的很高。最好在页面上进行演示;顺便说一下,HUSL是一个创建可读颜色的伟大库

黄色很容易与深色形成对比,因为它很亮。它也不会与浅色形成对比,但通常通过在字幕中添加阴影/轮廓来解决。另一个例子:

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


最后,与HSL/RGB之间的转换应该很简单。有很多库可以这样做。

不确定是否有帮助,但请查看此帖子,谢谢,但它使用的是HSV型号,需要适当的颜色值才能将其切换为相反的颜色。但是,当处理灰色时,饱和度为0,因此该值可能会被忽略。WCAG有一个公式,用于使用两种颜色的“相对亮度”(颜色空间内的亮度)确定两种颜色的对比度:-它不会告诉您最佳颜色是什么,但您可以使用它“搜索”所需颜色。也就是说,根据该链接中的注释,最好使用阴影或与字母填充形成对比的边框。填充颜色将与背景形成对比,或者边框将与背景形成对比,或者填充将与阴影形成对比,这在大多数情况下使内容可读,而不会使文本多色。(iOS 7为了跳板而放弃了这一点,最终结果是你几乎不得不使用非繁忙的墙纸。)
HSL中的
L
HSV中的
V
是感知亮度的可怕度量。例如,
#0000FF
(最轻的饱和蓝色)和
#FFFF00
(最轻的饱和黄色)具有相同的“亮度”,但显然黄色看起来更轻。是的。。。我试着这么说,并链接到一个详细解释的页面。我不知道这是多么必要的考虑,虽然因为所陈述的问题需要与灰色对比,至少对我来说,似乎相当微不足道。谢谢,我已经编辑了这个问题来给出一个更好的用例(这正是我真正感兴趣的)。此外,黄色字母的轮廓将使它们在图像中突出或位于顶部。这是我不想要的字形。我希望它们与背景处于相同的位置。谢谢你对黄色的解释。这真的很有帮助。你能说说如何用黄色而不是白色和黑色来实现对比度最大化吗?如果图像有纹理,你可能需要先计算周围灰色像素的平均亮度。剩下的将涉及到使用这样的颜色空间来解释感知亮度,并找到与平均背景颜色的最大距离。这要复杂得多。如果坚持使用黄色色调,会有点简化,但我相当确定,最终的最大对比度仍然可以是白色或黑色(当然还有棕色)。
if(bgLightness < 50){
    color = "white";
}else{
    color = "black";   
}