是否有一个php函数通过给出rgb或hex颜色作为参数来返回最接近的颜色名?我已经烧了很多但找不到能完成这项工作的功能。
请帮忙
答案 0 :(得分:2)
请参阅下面的代码。我用它来复制徽标颜色,以便在运行时自动更改网站主题。希望它有效!
只需将图片网址作为参数传递给函数。
function CopyLogoColor($logo_path){
$i = imagecreatefromjpeg($logo_path);
$rTotal = 0;
$gTotal =0;
$bTotal = 0;
$total = 0;
for ( $x=0 ; $x<imagesx($i) ; $x++){
for ( $y=0 ; $y<imagesy($i) ; $y++ ) {
$rgb = imagecolorat($i,$x,$y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8)& 0xFF;
$b = $rgb & 0xFF;
$rTotal += $r;
$gTotal += $g;
$bTotal += $b;
$total++;
}
}
$rAverage = round($rTotal/$total);
$gAverage = round($gTotal/$total);
$bAverage = round($bTotal/$total);
$r = intval($rAverage);
$g = intval($gAverage);
$b = intval($bAverage);
$r = dechex($r<0?0:($r>255?255:$r));
$g = dechex($g<0?0:($g>255?255:$g));
$b = dechex($b<0?0:($b>255?255:$b));
$color = (strlen($r) < 2?'0':'').$r;
$color .= (strlen($g) < 2?'0':'').$g;
$color .= (strlen($b) < 2?'0':'').$b;
return '#'.$color;
}
答案 1 :(得分:1)
没有这样的功能,
你需要编写自己的函数来获取R,G和B值,如果 并将它们循环到每个值并找出最接近的是(R和G的总和最小的B)
您可以在此处找到所有HTML颜色名称:http://www.w3.org/TR/SVG/types.html#ColorKeywords
<强>例如:强>
用户给出[250,1,2](olwost红色)。你有一个数组:
$input = [255,1,2]
$colors = array("red" => [255,0,0],"green"=>[0,255,0]) // used JS array to be quiker
foreach( $ .. as .. $color){ // or a sort function?
// get diff, key 0 is red key 2 is blue
$diff = abs($input[0] - $color[0]) + ... + abs($input[2] - $color[2]);
}
红色的差异为:5 + 1 + 2 绿色将:250 + 254 + 2 蓝色是:250 + 1 + 253
红色的总和最低,所以它必须是最暗的红色。 蓝色是下一个,然后是绿色