根据背景颜色确定字体颜色

给定一个系统(例如网站),让用户自定义某个部分的背景颜色,但不是字体颜色(将选项的数量保持在最低限度),是否有方法通过编程来确定“光源”或“黑暗“的字体颜色是必要的?

我确定有一些算法,但我对颜色,光度等知之甚少,无法自行解决。


我遇到过类似的问题。 我不得不找到一种很好的方法来选择对比字体颜色来在colorscales / heatmaps上显示文本标签。 它必须是通用的方法,生成的颜色必须是“好看的”,这意味着简单的生成互补色并不是好的解决方案 - 有时它会产生难以观察和阅读的奇怪,非常密集的颜色。

经过长时间的测试并试图解决这个问题,我发现最好的解决方案是选择“黑色”颜色的白色字体,“鲜艳”颜色选择黑色字体。

以下是我在C#中使用的函数示例:

Color ContrastColor(Color color)
{
    int d = 0;

    // Counting the perceptive luminance - human eye favors green color... 
    double a = 1 - ( 0.299 * color.R + 0.587 * color.G + 0.114 * color.B)/255;

    if (a < 0.5)
       d = 0; // bright colors - black font
    else
       d = 255; // dark colors - white font

    return  Color.FromArgb(d, d, d);
}

这是测试许多不同的颜色(彩虹,灰度,热,冰,和许多其他),是唯一的“通用”的方法,我发现了。

编辑
将计数a的公式改为“感知亮度” - 它看起来更好! 已经在我的软件中实现了它,看起来不错。

编辑2 @WebSeed提供了这个算法的一个很好的工作示例:http://codepen.io/WebSeed/full/pvgqEq/


谢谢@Gacek。 这里有一个适用于Android的版本:

@ColorInt
public static int getContrastColor(@ColorInt int color) {
    // Counting the perceptive luminance - human eye favors green color...
    double a = 1 - (0.299 * Color.red(color) + 0.587 * Color.green(color) + 0.114 * Color.blue(color)) / 255;

    int d;
    if (a < 0.5) {
        d = 0; // bright colors - black font
    } else {
        d = 255; // dark colors - white font
    }

    return Color.rgb(d, d, d);
}

还有一个改进的(更短的)版本:

@ColorInt
public static int getContrastColor(@ColorInt int color) {
    // Counting the perceptive luminance - human eye favors green color...
    double a = 1 - (0.299 * Color.red(color) + 0.587 * Color.green(color) + 0.114 * Color.blue(color)) / 255;
    return a < 0.5 ? Color.BLACK : Color.WHITE;
}

这是一个很有用的答案。 谢谢!

我想分享一个SCSS版本:

@function is-color-light( $color ) {

  // Get the components of the specified color
  $red: red( $color );
  $green: green( $color );
  $blue: blue( $color );

  // Compute the perceptive luminance, keeping
  // in mind that the human eye favors green.
  $l: 1 - ( 0.299 * $red + 0.587 * $green + 0.114 * $blue ) / 255;
  @return ( $l < 0.5 );

}

现在弄清楚如何使用该算法为菜单链接自动创建悬停颜色。 灯头会变暗,而反之亦然。

链接地址: http://www.djcxy.com/p/2497.html

上一篇: Determine font color based on background color

下一篇: \d is less efficient than [0