编辑:
根据给出的答案,我创建了这个函数。
function grabclosestcolor($r, $g, $b){
$colors = array(array(124,12,12),array(7,7,11),array(110,224,219),array(123,123,123),array(124,177,74),array(130,86,53),array(77,77,77),array(164,124,68),array(204,196,132),array(164,148,147),array(163,123,67),array(26,122,26), array(195,195,50),array(193,193,193),array(255,248,73),array(243,243,243));
$differencearray = array();
foreach ($colors as $value) {
$difference = sqrt(pow($r-$value[0],2)+pow($g-$value[1],2)+pow($b-$value[2],2));
array_push($differencearray, $difference);
$smallest = min($differencearray);
$key = array_search($smallest, $differencearray);
return $colors[$key];
}
}
我的目标是这样的:我获取一张图片,然后循环遍历每个像素,在抓取其x、y和rgb值的同时,不仅仅只获取rgb值。我有一个预定义数组,并且我正在寻找与我所抓取颜色最接近的颜色,以达到只使用预定义数组中的颜色的目的。以下是我的颜色数组。$colors = array(array(124,12,12),array(7,7,11),array(110,224,219),array(123,123,123),array(124,177,74),array(130,86,53),array(77,77,77),array(164,124,68),array(204,196,132),array(164,148,147),array(163,123,67),array(26,122,26), array(195,195,50),array(193,193,193),array(255,248,73),array(243,243,243));
这是我现有的循环代码。
$int = imagesx($im) - 1;
$int2 = imagesy($im) - 1;
$start2 = 0;
do{
$start = 0;
do{
$rgb = imagecolorat($im, $start, $start2);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$value = rgb2hex($r,$g,$b).":$start:$start2";
array_push($colorsofimage, $value);
} while($int > $start++);
} while($int2 > $start2++);
rgb2hex是一个用户自定义函数,但我想要实现的是将该函数更改为获取最接近颜色的函数。
$colorsofimage 包含每个像素信息的数组,具有 hex:x:y 的格式,我想要的是 rgb2hex(NEWFUNCTION($r,$g,$b))。以便新的十六进制颜色与预定义数组中的一项相匹配。
希望你理解我的意思,因为我不知道颜色算法该怎么做。