Imagick: сочинять с маской

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

Команда выглядит следующим образом:

convert A1.mpc A3.mpc A4.mpc -channel rgba -alpha on -virtual-pixel background -background none -define compose:args=312x26.6776 -compose displace -composite out.mpc 

Я узнал, что параметры означают следующее:

 convert {background} {overlay} [{mask}] [-compose {method}] -composite {result} 

PHP Imagick дает мне метод компоновки, но без параметра маски: http://www.php.net/manual/en/imagick.compositeimage.php

Я нашел еще один вопрос и попробовал это (но не приводит к тому же изображению):

 // load images $a1 = new Imagick('a1.png'); $a3 = new Imagick('a3.png'); $a4 = new Imagick('a4.png'); // mask the overlay $a1->compositeImage($a4, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA); // compose overlay to background $a1->setImageVirtualPixelMethod(Imagick::VIRTUALPIXELMETHOD_BACKGROUND); $a1->setImageBackgroundColor(new ImagickPixel('none')); $a1->setOption('compose:args', '312x26.6776'); $a1->compositeImage($a3, Imagick::COMPOSITE_DISPLACE, 0, 0); 

Поэтому мой вопрос: правильно ли это создать изображение с помощью маски? Или что здесь не так?

Чтобы помочь визуализировать то, что я хочу сделать, вот несколько исходных изображений:

входное изображение a1 (фон):

a1

входное изображение a3 (наложение):

a3

входное изображение a4 (маска):

a4

Я хочу, чтобы результат был следующим:

правильный выход

Что создает мой PHP-код:

неправильный вывод

Заранее спасибо! Майкл

попробуйте использовать метод complexImage и Imagick :: COMPOSITE_COPYOPACITY

Попробуйте этот код:

 // x-displacement $a3->setImageArtifact('compose:args', "312x0"); $a1->compositeImage($a3, Imagick::COMPOSITE_DISPLACE, 0, 0); // y-displacement $a4->setImageArtifact('compose:args', "0x26.6776"); $a1->compositeImage($a4, Imagick::COMPOSITE_DISPLACE, 0, 0);