如何使用imagick for php(imagemagick)设置像素的颜色?

时间:2013-06-28 14:31:18

标签: php imagemagick imagick

我使用getImagePixelColor在特定点获取图像的图像像素。

$pixel = $image -> getImagePixelColor($x,$y);

现在我已经使用某种方法修改了该像素的颜色,现在我想设置该像素的新颜色。

我该怎么办?

有一个setColor函数。但我得到了Imagick课程的像素。但是setColor函数在ImagickPixel类中。那我怎么能这样做呢?

2 个答案:

答案 0 :(得分:5)

ImagickPixel::setColor()是正确的函数,但也需要同步像素迭代器,以便将操作写回图像。

这是一个简短但几乎完整的示例,它读取图像文件,操纵每个像素,并将其转储到浏览器:

$img = new Imagick('your_image.png');

$iterator = $img->getPixelIterator();
foreach ($iterator as $row=>$pixels) {
  foreach ( $pixels as $col=>$pixel ){
    $color = $pixel->getColor();      // values are 0-255
    $alpha = $pixel->getColor(true);  // values are 0.0-1.0

    $r = $color['r'];
    $g = $color['g'];
    $b = $color['b'];
    $a = $alpha['a'];

    // manipulate r, g, b and a as necessary
    //
    // you could also read arbitrary pixels from 
    // another image with similar dimensions like so:
    // $otherimg_pixel = $other_img->getImagePixelColor($col,$row);
    // $other_color = $otherimg_pixel->getColor();
    //
    // then write them back into the iterator
    // and sync it

    $pixel->setColor("rgba($r,$g,$b,$a)");
  }
  $iterator->syncIterator();
}

header('Content-type: '.$img->getFormat());
echo $img->getimageblob();

答案 1 :(得分:0)

无论如何,

->getImagePixelColor()会返回一个ImagickPixel对象,因此您需要$pixel->setColor(...);

参考:http://php.net/manual/en/imagick.getimagepixelcolor.php