Преобразование RGB в HTML именованные цвета с помощью php


У меня есть тысячи цветов в значениях RGB, сохраненных в моей базе данных, и я хотел бы отобразить их в одной цветовой диаграмме. Но тысячи цветов в одной диаграмме не очень полезны.

Поэтому я хотел бы уменьшить количество цветов, преобразовав значения RGB в 147HTML с именем colors . Я должен найти наиболее подходящий цвет HTML для значения RGB, то есть вычислить, если значение RGB похоже на малиновый или голубой или фуксия или ... Например, группировать их по наиболее подходящему HTML названному цвету. Это должно быть сделано в PHP.

Выполнимо?

1 2

1 ответ:

Вы можете создать массивы, подобные этому, для всех цветов:

$color=array(100);
$hex=array(100);
$hex[0]=hexdec( "00FFFF" );
$color[0]="Aqua";
$hex[1]=hexdec("F0FFFF");
$color[1]="Azura";
.
.

И затем используйте этот код, чтобы найти ближайшее значение:

function findBestColorMatch($r,$g,$b){
    $toSearch=rgb2html($r,$g,$b);
    $i=getClosest($toSearch,$hex);
    echo $color[$i];
}
function rgb2html($r, $g=-1, $b=-1)
{
    if (is_array($r) && sizeof($r) == 3)
        list($r, $g, $b) = $r;

    $r = intval($r); $g = intval($g);
    $b = intval($b);

    $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 hexdec($color);
}

function getClosest($search, $hex)
{
 $closest = null;
 foreach($hex as $item)
 {
  if($closest == null || abs($search - $closest) > abs($item - $search))
  {
     $closest = $item;
  }
  }
   return $closest;
}

отсюда & здесь