Imagick setColor在php中无效

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。

有什么想法吗?


我完全不了解Imagick库,但这是改变图像像素颜色的确认正确方法吗?通过getImagePixelColor()返回的对象更改是否实际上被写回到图像中?如果是这样的话,我会感到惊讶。 - Pekka
我也很困惑!并且没有找到任何文档!我发现它返回ImagickPixel对象。因此,setColor方法是ImagickPixel类的方法。 - kirtan403
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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接