Imagick-通过PHP的复合图像掩码

Imagick-通过PHP的复合图像掩码,php,imagick,composite,Php,Imagick,Composite,我正在尝试重新创建一个脚本,该脚本使用ImageMagick命令“convert”来合成图像。但我想在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.

我正在尝试重新创建一个脚本,该脚本使用ImageMagick命令“convert”来合成图像。但我想在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、 巴布亚新几内亚

b、 巴布亚新几内亚

c、 巴布亚新几内亚

结果:

其中,
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实现同样的结果。

我不熟悉置换贴图功能,因此我没有办法让PHP提供所需的输出,但我可以告诉您,在这种情况下,这行代码实际上是不可用的:
$a->compositeImage($c,Imagick::COMPOSITE_DSTIN,0,Imagick::CHANNEL_ALPHA);-我不知道这是否有帮助。我认为这是的一个副本--我也在那里添加了解决方案(我猜你也是这样做的,根据)的可能副本