php无法获得最接近的匹配颜色

php无法获得最接近的匹配颜色,php,colors,rgb,distance,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'), //b

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

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; } 
color=array('124'、'197'、'118');//浅绿色
$match=数组(
数组('255','000','000','FF0000'),//红色
数组('000','255','000','00FF00'),//绿色
数组('000','000','255','0000FF'),//蓝色
数组('0','255','255','00ffff'),//青色
数组('117','076','036','754c24'),//棕色
数组('000','000','000','000000'),//黑色
数组('149','149','149','959595'),//灰色
数组('242','101','034','f26522'),//橙色
数组('245','152','157','f5989d'),//粉红色
数组('255','255','000','FFFF00'),//黄色
数组('102','045','145','662d91'),//紫色
数组('255','255','255','FFFFFF')//白色
回声“颜色:”//颜色
foreach($co匹配)$temp[]=数组(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'匹配颜色:';break;}

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

这里有一个链接,指向匹配的问题和答案:

但是,如果您已经有索引图像,我建议您使用以下方法:

我把你的颜色放进我的表格来分析你的问题。我想你可以看到灰色在视觉上也是最匹配的

我认为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


您可能需要考虑计算颜色的
HSL
(色调、饱和度、光照)值,因为这将比
RGB
更准确地找到接近匹配的颜色。我没有一个例子(这就是为什么这是一个注释,而不是答案),但应该不难找到一些东西。第一个链接使用与我的脚本中相同的公式,我还尝试使用ImageColorCloser php函数,创建一个包含所有预定义颜色的图像,然而,它产生了相同的结果。我已经尝试忽略灰色,现在橙色显示为匹配的颜色,而不是绿色。尝试:棕色(150,75,0)|橙色(255127,0)|[明亮]粉色(255,0127)|紫色(127,0255)。。。但是请注意,棕色只是一个深橙色!您可能希望查看我的网站上的颜色选择器,并在纯颜色之间移动30°距离,以获得预定义的颜色。
2, define a threshold for returning gray
-> If result is gray but distance > threshold x,
then take the second colosest match