Я получаю пиксель изображения изображения в определенном месте, используя getImagePixelColor.
$pixel = $image -> getImagePixelColor($x,$y);
Теперь я изменил цвет этого пикселя с помощью некоторого метода, и теперь я хочу установить новый цвет этого пикселя.
Как я могу сделать ?
Существует функция setColor. Но я получил пиксель из класса Imagick. Но функция setColor находится в классе ImagickPixel. Итак, как я могу это сделать?
->getImagePixelColor()
всегда возвращает объект ImagickPixel, поэтому $pixel->setColor(...);
это все, что тебе нужно:
Ссылка: http://php.net/manual/en/imagick.getimagepixelcolor.php
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();
Вы не можете просто изменить цвет пикселя одного пикселя, вам придется перебирать его, находить нужный пиксель и сохранять файл.
прочитайте http://www.php.net/manual/en/imagick.getpixeliterator.php