Я пытаюсь воссоздать сценарий, который использует команду 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);
Результат:
Ожидаемое:
Я хотел бы добиться того же результата, используя только Imagick PHP.
Задача ещё не решена.
Других решений пока нет …