3

我尝试将所有像素设置为黑色。但它不起作用。我得到与原始图像相同的图像。

这是我的代码:

$image = new Imagick(__DIR__."/image_new.jpg");

$i=0;
$j=0;

while ($i < 100)
{
    $j=0;
    while($j < 100)
    {
         $pixel = $image->getImagePixelColor($i, $j); 
         $pixel->setColor("#000000");
         $j++;
    }

    $i++;
}

header("content-type:image/jpeg");
echo $image;

图像尺寸为 100x100。

有任何想法吗?

4

1 回答 1

2

Imagick ::getImagePixelColor将返回一个ImagickPixel对象;这会从原始 Imagick 对象复制数据。更改像素的数据/状态后,您需要将像素“同步”回图像。为了帮助完成这个过程,我们提供了一个ImagickPixelIterator对象——参见Imagick::getPixelIterator。这是一个简单的例子

$image = new Imagick(__DIR__."/image_new.jpg");
$pixel_iterator = $image->getPixelIterator();
foreach($pixel_iterator as $i => $pixels)
{
 if( $i < 100 )
 {
  foreach($pixels as $j => $pixel)
  {
   if( $j < 100 )
   {
    $pixel->setColor("#000000");
   }
  }
 }
 $pixel_iterator->syncIterator();
}

header("content-type:image/jpeg");
echo $image;
于 2013-07-10T16:33:10.917 回答