編輯:RGB最接近預定義的顏色
隨着給出的答案我做了這個功能
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是一個用戶定義函數,但我想做到的是改變這種功能與功能搶最接近的顏色。 $ colorofimage包含每個像素的數組信息與十六進制:x:y 我想要的是rgb2hex(NEWFUNCTION($ r,$ g,$ b)); 因此,新的十六進制是預定義數組中的1。
我希望你能理解,因爲我不知道如何去做,因爲我不知道顏色的算法。
取決於如何努力了,你想去的地方,在我的(類似的)問題的答案可能是有用的 - http://stackoverflow.com/questions/4057475/rounding-colour-values-to-the-最近的一組顏色 – 2010-12-19 22:47:09
同樣,我不太瞭解PHP,但是作爲解決方案給出的函數看起來效率遠低於我之前建議的那種:http:// stackoverflow .com/questions/4485229/rgb-to-closest-predefined-color/4485327#4485327 – beldaz 2010-12-20 03:45:45
爲什麼在foreach循環中有返回? – Joeri 2015-09-20 13:47:17