Image的RGB颜色平均值

时间:2011-08-05 21:25:07

标签: php image-processing gd

我试图在php中获得Image的RGB颜色的平均值。

通过gd lib我编程

    $x = imagesx($im);
    $y = imagesy($im);
    for ($i = 0;$i < $x;$i++)
        for ($j = 0;$j < $y;$j++){
            $rgb = imagecolorat($im,$i,$j);
            $sum['R'] += ($rgb >> 16) & 0xFF;
            $sum['G'] += ($rgb >> 8) & 0xFF;
            $sum['B'] += $rgb & 0xFF; 
        }

但我认为这不是好方法。它需要大量的ram来处理。还有其他办法吗?

2 个答案:

答案 0 :(得分:5)

我会选择重新取样:

$tmp_img = ImageCreateTrueColor(1,1);
ImageCopyResampled($tmp_img,$im,0,0,0,0,1,1,$x,$y); // or ImageCopyResized
$rgb = ImageColorAt($tmp_img,0,0);

答案 1 :(得分:3)

一种方法是将图片缩放到一个像素,然后使用该像素的颜色作为参考。

<?php
$image = new Imagick('800x480.jpg');
$image->scaleImage(1, 1, true);
$pixel = $image->getImagePixelColor(0,0);

$red   = ($rgb >> 16) & 0xFF;
$green = ($rgb >> 8) & 0xFF;
$blue  =  $rgb & 0xFF; 
?>

这样你就不需要处理凌乱的细节了。并且您可以使用更智能的缩放算法来实现更高的精度。

编辑:如果您需要更复杂的算法,则可以使用Imagick::resizeImage。它可以使用不同的算法,如插值滤波器。