7

我的目标是找到与数组中的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)
);

我尝试将图片转换为 8 位以减少颜色数量并稍后在数据库中进行比较,但这似乎不是一个好主意。

4

1 回答 1

7

试试这样:

$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);

这种解决方案的优点是您可以轻松替换比较功能。也可以使用

免责声明:可能有更优雅的实现方式,也许是利用map.

于 2013-06-02T16:14:25.917 回答