2013-07-08 25 views
3

我试过将所有像素设置为黑色。但它不起作用。我获得了与原始相同的图像。Imagick setColor不能使用php

这里是我的代码:

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

图像尺寸是100×100。

任何想法?

+0

我不知道Imagick库的所有,但它是确认正确的方式来更改图像的像素颜色?对由'getImagePixelColor()'返回的对象做的改变实际上是否被写回到图像?如果是的话,我会感到惊讶。 –

+0

我也对此感到困惑!并没有得到任何文件!我发现它返回了ImagickPixel对象。所以setColor方法是ImagickPixel类的方法。 – kirtan403

回答

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;