PHP色彩强度检测

时间:2012-09-04 07:38:10

标签: php

如何检测此十六进制颜色的强度:#000000?我可以将此方法用于此代码。 例如,如果背景颜色为黑色,则文本颜色必须设置为#FFFFFF(白色)。我正在使用此代码段生成随机颜色:

$random_color = '#'.base_convert(rand(0, 16777215), 10, 16);

2 个答案:

答案 0 :(得分:1)

有几种有效的方法,但最简单的方法是将颜色转换为灰度,然后检查结果值是否在上半部分或更低。如果在鞋面,那么它是浅色,你应该使用黑色作为文字颜色,如果在较低,那么它是黑暗的,所以白色将是最好的。像这样:

function getReadableTextColor( $backgroundColor ) {
    $R = ($backgroundColor >> 16 ) & 0x000000ff;
    $G = ($backgroundColor >>  8 ) & 0x000000ff;
    $B = ($backgroundColor       ) & 0x000000ff;

    // grayscale: 0.3RED + 0.59GREEN + 0.11Blue
    $K = (($R * 0.3) + ($G * 0.59) + ($B * 0.11));

    // black fg color for light background, white for dark ones
    return ( $K > 128 ) ? 0x000000 : 0xffffff;
}    

然后像这样使用

$bgColor = rand(0, 16777215);
$bgcolorHTML = '#' . base_convert($bgColor, 10, 16);
$fgColor = getReadableTextColor( $bgColor );
$fgColorHtml = '#' . base_convert($fgColor, 10, 16);

答案 1 :(得分:-1)

我认为,您需要计算负色以获得良好的可读性。试试这个功能:

<?php 
    function NegativeColor($color)
    {
        $r = substr($color, 0, 2);
        $g = substr($color, 2, 2);
        $b = substr($color, 4, 2);

        //Invert colors, (255  - colVal)
        $r = 0xff-hexdec($r);
        $g = 0xff-hexdec($g);
        $b = 0xff-hexdec($b);

        return str_pad(dechex($r),2,0,STR_PAD_LEFT)
               .str_pad(dechex($g),2,0,STR_PAD_LEFT)
               .str_pad(dechex($b),2,0,STR_PAD_LEFT);
    }   
    var_dump(NegativeColor('000000'));
    //output : string(6) "ffffff" 
?>