Как заменить определенный цвет картинки с помощью php imagick?

Пользователь

от jeromy_ruecker , в категории: PHP , год назад

Как заменить определенный цвет картинки с помощью php imagick?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от richie_mayert , год назад

@jeromy_ruecker 

Для замены определенного цвета на картинке с помощью Imagick в PHP необходимо выполнить следующие шаги:

  1. Загрузить изображение с помощью функции readImage():
1
2
$image = new Imagick();
$image->readImage('path/to/image.jpg');


  1. Определить цвет, который необходимо заменить, и цвет на который нужно его заменить. Например, заменим все зеленые пиксели на красные:
1
2
$greenColor = new ImagickPixel('#00ff00');
$redColor = new ImagickPixel('#ff0000');


  1. Создать новое изображение с помощью функции clone():
1
$newImage = clone $image;


  1. Используя цикл for, перебрать все пиксели изображения и заменить зеленый цвет на красный:
1
2
3
4
5
6
7
8
for ($x = 0; $x < $newImage->getImageWidth(); $x++) {
    for ($y = 0; $y < $newImage->getImageHeight(); $y++) {
        $pixel = $newImage->getImagePixelColor($x, $y);
        if ($pixel->isSimilar($greenColor, 1)) {
            $newImage->setImagePixelColor($redColor, $x, $y);
        }
    }
}


  1. Сохранить измененное изображение с помощью функции writeImage():
1
$newImage->writeImage('path/to/new_image.jpg');


Полный пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$image = new Imagick();
$image->readImage('path/to/image.jpg');

$greenColor = new ImagickPixel('#00ff00');
$redColor = new ImagickPixel('#ff0000');

$newImage = clone $image;

for ($x = 0; $x < $newImage->getImageWidth(); $x++) {
    for ($y = 0; $y < $newImage->getImageHeight(); $y++) {
        $pixel = $newImage->getImagePixelColor($x, $y);
        if ($pixel->isSimilar($greenColor, 1)) {
            $newImage->setImagePixelColor($redColor, $x, $y);
        }
    }
}

$newImage->writeImage('path/to/new_image.jpg');