智能色彩检测

时间:2011-04-10 19:01:39

标签: colors hex

我们正在开发一种医疗调度系统,允许用户根据特定状态定义要在日历上显示的颜色。我们遇到的问题是,如果用户选择深色背景颜色并且我们使用深色字体,则字体不会显示。同样,如果他们选择浅色,我们使用的是浅色字体。出于各种原因,我们不希望用户设置两种颜色。

但是,我们想知道颜色的十六进制代码是否有特定的模式。也许如果它小于给定值,应该使用深色字体,否则使用浅色字体?

那么,是否有一种智能的方式以编程方式根据用户选择的背景颜色选择字体颜色?

艾米

4 个答案:

答案 0 :(得分:11)

您可以使用十六进制代码以数学方式计算两种颜色之间的对比度。有了这些信息,问题就是文本的颜色(白色或黑色)与所选背景颜色的对比度更高。该网站显示了如何用PHP或Javascript编写该代码,但它可以很容易地适应其他语言。

http://24ways.org/2010/calculating-color-contrast

答案 1 :(得分:0)

颜色亮度:http://www.webmasterworld.com/forum88/9769.htm

但是,实际上,为什么不反转背景并使用产生的颜色是前景呢?

答案 2 :(得分:0)

对于您的第一个问题,我相信颜色代码的十六进制值是RGB格式。这意味着第一个字节是颜色中的红色数量;第二个字节是颜色中的绿色量;第三个字节是颜色中的蓝色数量。

如果您想尝试猜测字体颜色,可以尝试查看它与#FFFFFF的接近程度,如果它小于#777777则使用深色。

我不是任何颜色方面的专家,所以我不保证这个答案的正确性。

答案 3 :(得分:0)

尝试此功能;

function wc_light_or_dark( $color, $dark = '#000000', $light = '#FFFFFF' ) {

    $hex = str_replace( '#', '', $color );

    $c_r = hexdec( substr( $hex, 0, 2 ) );
    $c_g = hexdec( substr( $hex, 2, 2 ) );
    $c_b = hexdec( substr( $hex, 4, 2 ) );

    $brightness = ( ( $c_r * 299 ) + ( $c_g * 587 ) + ( $c_b * 114 ) ) / 1000;

    return $brightness > 155 ? $dark : $light;
}

来源:http://woocommerce.wp-a2z.org/oik_api/wc_light_or_dark/