2011-01-06 56 views
2

我需要帮助从一组预定义的色彩和单一颜色随机找到最接近的色彩匹配,这里是我的代码:PHP的麻烦最匹配的颜色

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

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

+1

你可能会想看看计算颜色的`HSL`(色调,饱和度,Light)的值,因为在发现比RGB更接近匹配的颜色时会更准确。我没有一个例子(这就是为什么这是一个评论,而不是一个答案),但它不应该很难找到一些东西。 – 2011-01-06 21:19:27

回答

1

我把你的颜色放入我的color converter来分析你的问题。我认为你可以看到灰色也是视觉上最冷的比赛。

我认为tripple 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 
+0

我试图忽略灰色,现在橙色显示为匹配的颜色,而不是绿色。 – John 2011-01-07 12:33:56