Bar*_*ski 6 php rgb comparison pixel
我的目标是找到最接近的匹配RGB相比RGB从阵列中.我已经创建了一个循环通过图片中每个像素的函数.我现在唯一需要的是找到图片中每个像素的最接近颜色与数组中的颜色.
$colors = array(
array(221,221,221),
array(219,125,62),
array(179,80,188),
array(107,138,201),
array(177,166,39),
array(65,174,56),
array(208,132,153),
array(64,64,64),
array(154,161,161),
array(46,110,137),
array(126,61,181),
array(46,56,141),
array(79,50,31),
array(53,70,27),
array(150,52,48),
array(25,22,22)
);
Run Code Online (Sandbox Code Playgroud)
我尝试将图片转换为8位以减少颜色数量,并在数据库中稍后进行比较,但这似乎不是一个好主意.
试试这样:
$inputColor = array(20,40,80);
function compareColors($colorA, $colorB) {
return abs($colorA[0] - $colorB[0]) + abs($colorA[1] - $colorB[1]) + abs($colorA[2] - $colorB[2]);
}
$selectedColor = $colors[0];
$deviation = PHP_INT_MAX;
foreach ($colors as $color) {
$curDev = compareColors($inputColor, $color);
if ($curDev < $deviation) {
$deviation = $curDev;
$selectedColor = $color;
}
}
var_dump($selectedColor);
Run Code Online (Sandbox Code Playgroud)
此解决方案的优点是您可以轻松替换比较功能.它也可以使用
免责声明:可能有更优雅的实施方式,也许可以利用map.