2

データベースに保存されている RGB 値に何千もの色があり、それらを 1 つのカラー チャートに表示したいと考えています。しかし、1 つのグラフに何千もの色が含まれているのはあまり役に立ちません。

したがって、RGB 値を 147 個のHTML 名前の色に変換して、色の数を減らしたいと考えています。RGB 値に最適な HTML カラーを見つける必要があります。つまり、RGB 値がクリムゾン、シアン、フクシアなどに似ているかどうかを計算することを意味します。最も一致する HTML の名前付きカラーでグループ化するのと同じです。これは PHP で行う必要があります。

実現可能?

4

1 に答える 1

2

すべての色に対して、次のような配列を作成できます。

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

ここここから

于 2013-05-05T14:54:17.347 に答える