Php 从其他Png中减去Png,保留透明度,ImageMagick

Php 从其他Png中减去Png,保留透明度,ImageMagick,php,image-processing,imagemagick,Php,Image Processing,Imagemagick,我想从main.png中减去pngmask.png,同时保持main.png中的透明度,如下所示 main.png mask.png mask.pngovermain.png output.png 我发现这个问题是关于所以,但这对JPEG图像效果很好,而不是png,因为它设置了黑色背景 到目前为止,我已经想出了这个代码,但我不能得到我想要的输出 exec('convert "main.png" "mask.png" -geometry (+230+40) -compose copyopa

我想从main.png中减去pngmask.png,同时保持main.png中的透明度,如下所示

main.png

mask.png

mask.pngovermain.png

output.png

我发现这个问题是关于所以,但这对JPEG图像效果很好,而不是png,因为它设置了黑色背景

到目前为止,我已经想出了这个代码,但我不能得到我想要的输出

exec('convert "main.png" "mask.png" -geometry (+230+40) -compose copyopacity -composite 
-fuzz 1% -trim "output.png"');
它给我的输出是

我希望黑色部分是透明的,因为它来自main.png

我也试过了,但没用

exec('convert "main.png" "mask.png" -geometry (+230+40) -fuzz 5% -transparent white 
"output.png"');
这是我的和

这是在@fmw42的帮助下最终运行的代码

 exec('convert "main.png" "mask.png" -background none -geometry (+230+40) -compose dstin -composite -fuzz 1% -trim "output.png"');

使用ImageMagick 6.9.8.5 Q16,我可以得到(取决于修剪):

以上是你想要的吗


注意:您的两张图像的大小不同。面具比较小。因此,您需要将其(-geometry)正确放置,以获得您想要的结果。

在没有说明原因的情况下投票否决或结束任何问题都是不礼貌的。遮罩图像在哪里?是提供的图像还是仅蓝色部分?@fmw42红色框上方的蓝色图像是遮罩图像。我想从主图像中剪切蓝色部分。请为这两幅图像提供实际的透明度,而不是用棋盘格区域替换透明度。好的,请稍候5分钟。可能是因为我不能说得足够清楚。请稍候,以便我测试您的答案。fmw42您的第一个答案正是我想要的,但我不希望图像周围有额外的空间。我只想要mask.png部分,而它是提供原始输出。请检查这张图片fmw42我刚刚通过像这样修剪空白得到了输出。请检查这段代码是否正确或可以改进MW42。请检查我更新的问题。我已经把工作代码贴在那里了。请检查代码是否正确,或者是否可以改进。我看到的唯一一件事是,据我所知,几何体不需要关于其参数的括号+X+Y就足够了。我不知道你为什么做(+X+Y)。我从来没有试过,也许也没关系。您还应该在-trim之后添加+repage。我不明白为什么在这种情况下你需要-fuzz 1%,因为无论在哪里使用它,透明度都是完全透明的。
convert main.png mask.png -background none -gravity center -geometry +0-17 -compose dstin -composite result1.png
convert main.png mask.png -background none -gravity center -geometry +0-17 -compose dstin -composite -trim +repage result2.png