php проблема с получением наиболее подходящего цвета - PullRequest
2 голосов
/ 07 января 2011

Мне нужна помощь в поиске наиболее близкого соответствия цветов из набора предопределенных цветов и одного случайного цвета, вот мой код:

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 ]

1 голос
/ 07 января 2011

Я поместил ваши цвета в свой конвертер цветов , чтобы проанализировать вашу проблему.Я думаю, вы можете видеть, что серый цвет также является самым ярким совпадением визуально.

Я думаю, что тройка 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
1 голос
/ 07 января 2011

вот ссылка на соответствующий вопрос с ответом:

RGB до ближайшего предопределенного цвета

, но, если у вас уже есть индексированное изображение, я предлагаю использоватьэто вместо:

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

...