2013-07-08 3 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; 

Размер изображения 100x100.

Любые идеи?

+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; 
Смежные вопросы