我的数据库中保存了数千种 RGB 值的颜色,我想将它们显示在一个颜色图表中。但是一张图表中的数千种颜色并不是很有用。
因此,我想通过将 RGB 值转换为 147 个名为 colors 的 HTML来减少颜色的数量。我必须为 RGB 值找到最匹配的 HTML 颜色,这意味着计算 RGB 值是否类似于 Crimson 或 Cyan 或 Fuchsia 或......就像通过最匹配的 HTML 命名颜色对它们进行分组一样。这应该在 PHP 中完成。
可行的?
我的数据库中保存了数千种 RGB 值的颜色,我想将它们显示在一个颜色图表中。但是一张图表中的数千种颜色并不是很有用。
因此,我想通过将 RGB 值转换为 147 个名为 colors 的 HTML来减少颜色的数量。我必须为 RGB 值找到最匹配的 HTML 颜色,这意味着计算 RGB 值是否类似于 Crimson 或 Cyan 或 Fuchsia 或......就像通过最匹配的 HTML 命名颜色对它们进行分组一样。这应该在 PHP 中完成。
可行的?
您可以为所有颜色创建这样的数组:
$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;
}