2011-07-15 79 views
3

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

请帮

+3

当你说“最接近” - 你的意思是?考虑到R,G和B都在0x00和0xFF之间的标准RGB,您将获得超过1650万种颜色。他们中的大多数甚至没有分配给他们的专有名称。 –

+0

这可能不是最好的方法,因为你会有几个不同的颜色具有相同的名称。为什么不只显示颜色而不是列出其名称? – dqhendricks

回答

1

没有这样的功能,

你需要编写自己的功能,其获取的R,G和B值induvidualy, 并循环到每一个值,并找出笏最接近的是(总R和G和B的OFSET最小)

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


ex:

用户给出[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]); 
} 

红将具有一个diff:5 + 1 + 2 绿色将有:250 + 254 + 2 蓝色是:250 + 1 + 253

红色有最低的总和,所以它必须变红。 蓝色是未来,然后来绿色

+0

你能举个例子吗? –

+0

见上面编辑^ – beardhatcode

+0

对不起,我stil没有得到它: 现在我有这个: $ arr_input = array(255,1,2]); $ arr_colors =阵列( \t '红' \t => \t 255,0,0, \t '绿色' \t => \t 0,255,0 ); function returnColorNameByRgbcolor($ rgb_color); \t的foreach($ arr_colors为$颜色){ \t \t //获取DIFF,关键是0红键2是蓝色 \t \t回声$ arr_input [0]; \t \t \t \t // echo $ arr_input [0] - $ color [0]。 ' - '。 $ arr_input [1] - $ color [1]。 ' - '。 $ arr_input [2] - $ color [2]; \t \t $ diff = abs($ arr_input [0] - $ color [0])+ abs($ arr_input [1] - $ color [1])+ abs($ arr_input [2] - $ color [2]) ; \t \t echo $ diff。'
'; \t \t // echo $ diff。 '
'; \t \t \t} \t \t回$ COLOR_NAME; } –

2

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

只需传递图像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; 

} 
相关问题