2

我的数据库中保存了数千种 RGB 值的颜色,我想将它们显示在一个颜色图表中。但是一张图表中的数千种颜色并不是很有用。

因此,我想通过将 RGB 值转换为 147 个名为 colors 的 HTML来减少颜色的数量。我必须为 RGB 值找到最匹配的 HTML 颜色,这意味着计算 RGB 值是否类似于 Crimson 或 Cyan 或 Fuchsia 或......就像通过最匹配的 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 回答