Php函数十六进制或rgb颜色到颜色名称


Php function hex or rgb color to color name

是否有一个php函数通过给出rgb或十六进制颜色作为参数返回最接近的颜色名称?我已经烧了很多,但找不到一个功能,做这项工作。

请帮

请参阅下面的代码。我用它来复制徽标颜色,以在运行时自动更改网站主题。希望它有效!

只需将图像URL作为函数的参数传递。

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;
}

没有这样的函数,

你需要编写自己的函数来分别获取R, G和B的值,并将它们循环到每个值,并找出最接近的值(R和G的总和和B的偏移量最小)

你可以在这里找到所有的HTML颜色名:http://www.w3.org/TR/SVG/types.html#ColorKeywords


,

user gives in[250,1,2](最红)。你有一个数组:

$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]); 
}

red的差值为:5 + 1 + 2绿色有:250 + 254 + 2蓝色为:250 + 1 + 253

红色的和最小,所以它一定最接近红色。蓝色是下一个,然后是绿色