2012-09-04 66 views
1

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

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

你是什么人的强度,什么是你想达到什么目的?你想要随机生成的颜色的逆? – jurgemaister

+0

我认为OP正在尝试自动选择一种颜色,以便根据背景的BGcolor在背景上轻松读取颜色。 – Fluffeh

回答

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); 
+0

谢谢,现在该代码如何使用它:echo“ salam”; –

+0

见编辑答案 –

-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" 
?>