Imagick — составное изображение маски через переполнение стека

Я пытаюсь воссоздать сценарий, который использует команду ImageMagick «конвертировать» для создания изображения. Но я хочу сделать то же самое в PHP, используя Imagick:

convert ./a.png ./b.png ./c.png  -virtual-pixel transparent -channel rgba -alpha on -background transparent -define compose:args=300x53.033 -compose displace -composite ./final.png

a.png

оригинал

b.png

оверлей

c.png

маскировать

Результат:

Результат получен через командную строку

куда a.png это базовое изображение, b.png это наложение и c.png это «маска» серой шкалы. Для достижения этого результата я должен выполнить все манипуляции, которые поддерживаются расширением, записать образ на диск и затем выполнить эту команду с помощью функции exec, что является ужасным обходным решением.

Следующий фрагмент не работает:

$a = new Imagick('../a.png');
$b = new Imagick('../b.png');
$c = new Imagick('../c.png');

$a->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$a->setImageBackgroundColor(new ImagickPixel('none'));
$a->setOption('compose:args', '300x53.033');
$a->compositeImage($c, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA);
$a->compositeImage($b, Imagick::COMPOSITE_DISPLACE, 0, 0);

Результат:

Результат получен через PHP

Ожидаемое:

Результат получен через командную строку

Я хотел бы добиться того же результата, используя только Imagick PHP.

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …