以编程方式选择高对比度颜色

Jef*_*eff 27 random rgb colors

这应该是一个简单的问题,但我还没有找到一种方法使它工作.

基本上,我有一个愚蠢的localhost页面,我在我的webdevelopment中使用.当我在我们的开发服务器和本地版本的C#代码(通过主机文件从dev url重定向)之间浏览时,我知道有时会忘记'dev.foo.com'指向的内容 - 本地或服务器.

所以我创建了一个页面,它将作为我的默认网页的默认页面在本地运行,因此我可以从服务器轻松识别我的localhost.

这个页面随机地做了很多事情(包括为D&D生成角色的起始统计数据),包括设置随机背景颜色.我这样做是通过生成0到255之间的3个随机数,并将它们设置为CSS中身体背景颜色的RGB值.

给定3个R,G和B,我如何确定R2,G2和B2,使第二种颜色与第一种颜色形成高对比度?我喜欢让页面具有随机的背景颜色(它让我不习惯着陆页的外观)但我也希望能够阅读文本.

sta*_*lue 24

由于色彩视觉本身的分辨率太低,因此需要亮度差异才能使文本可读.

所以作为算法,我建议如下:

  • 选择随机背景颜色.

  • 然后决定它是浅色还是深色.例如,您可以检查三原色的平均值是大于等于128.

  • 对于浅色使用黑色文本,对于黑暗的一个白色文本.

  • 这里的解决方案很简洁:http://24ways.org/2010/calculating-color-contrast/ (2认同)

Tim*_*her 7

"对比度"是一个加载的单词.如果您只关心能够阅读文本,那么一种简单的方法是在基于亮度的色彩空间(如HSL)中工作,并选择亮度差异较大的前景色和背景色.

HSL和RGB之间的转换是众所周知的 - 详见维基百科.

如果你在谈论实际的色彩对比度,那就不像切割和干燥了(据我所知,有许多感知因素没有被缩减为单一颜色空间),但我怀疑你不需要那种复杂程度.


mar*_*kus 5

查看此 PHP 解决方案:Andreas Gohr使用 PHP 计算颜色对比度。当然,它可以移植到任何语言。

他还对他的对比度分析仪进行了非常好的演示,您可以在其中找到一些最小的对比度级别。


Mar*_*čič 5

您可以GetBrightness()Color课堂上使用方法。它返回一个从 0.0(黑色亮度)到 1.0(白色)的浮点值。一个简单的解决方案是:

var color1 = new Color.FromArgb(r1, g1, b1);
var brightness = color1.GetBrightness();

var color2 = brightness > 0.5 ? Color.Black : Color.White;
Run Code Online (Sandbox Code Playgroud)