php麻烦得到最接近的匹配颜色

时间:2011-01-06 21:10:12

标签: php colors rgb distance

我需要帮助从一组预定义的颜色和一个随机颜色中找到最接近的颜色匹配,这是我的代码:

color = array('124','197','118'); // LIGHT GREEN

$match = array(
    array('255', '000', '000', 'FF0000'), //red
    array('000', '255', '000', '00FF00'), //green
    array('000', '000', '255', '0000FF'), //blue    
    array('0', '255', '255', '00ffff'), //cyan
    array('117', '076', '036', '754c24'), //brown
    array('000', '000', '000', '000000'), //black
    array('149', '149', '149', '959595'), //grey
    array('242', '101', '034', 'f26522'), //orange
    array('245', '152', '157', 'f5989d'), //pink
    array('255', '255', '000', 'FFFF00'), //yellow
    array('102', '045', '145', '662d91'), //purple
    array('255', '255', '255', 'FFFFFF')); //white

echo 'Color: <div style="background-color:#'.$color.';width:25px;height:25px"></div>';    //color

foreach($match as $co) $temp[] = array( sqrt(($color[0]-$co[0])^2+($color[1]-$co[1])^2+($color[2]-$co[2])^2) , $co[3]);

asort($temp);

foreach($temp as $ta) { echo 'Matched Color: <div style="background-color:#'.$ta[1].';width:25px;height:25px"></div>'; break; } 

它返回灰色而不是绿色?我该如何解决这个问题?比

2 个答案:

答案 0 :(得分:1)

这是一个带答案的匹配问题的链接:

RGB to closest predefined color

但是,如果你已经有索引图像,我建议改用:

http://php.net/manual/en/function.imagecolorclosest.php

答案 1 :(得分:1)

我将您的颜色放入我的color converter来分析您的问题。我认为你可以看到灰色也是最直观的匹配。

我认为三脚架124/197/118不是浅绿色,而是一个不饱和的绿色,它解释了结果。

我不确定你的一些颜色定义。对我来说

000 255 000 = Lime Green
000 128 000 = Green
128 128 128 = Gray (50%)

如果您仍然不喜欢结果:

1, leave out gray from your predefined colors

2, define a threshold for returning gray
-> If result is gray but distance > threshold x,
then take the second colosest match