Imagemagick:将剪切区域应用于其他图像

Imagemagick:将剪切区域应用于其他图像,imagemagick,Imagemagick,我有一个背景透明的PNG图像,但内容不透明。透明部分是我想应用于另一个PNG图像的遮罩,因此它们具有相同的透明部分,但不透明部分可能不同 我试过了 convert mask.png image.png -composite mask.png -compose copyopacity -composite image.png 但这似乎改变了image.png中的不透明部分。在Imagemagick中,假设两个图像大小相同,然后再试一次 (Unix语法) (Windows语法) 您的透明图像可能

我有一个背景透明的PNG图像,但内容不透明。透明部分是我想应用于另一个PNG图像的遮罩,因此它们具有相同的透明部分,但不透明部分可能不同

我试过了

convert mask.png image.png -composite mask.png -compose copyopacity -composite image.png

但这似乎改变了image.png中的不透明部分。

在Imagemagick中,假设两个图像大小相同,然后再试一次

(Unix语法)


(Windows语法)


您的透明图像可能没有二进制alpha通道。例如,在要放弃的区域中,alpha值可能为0(完全透明),但在要保留的区域中,alpha值可能仅为80%。在这种情况下,它将修改要保留的不透明区域。一种解决方案是在将遮罩应用于不透明图像之前设置遮罩的阈值。

谢谢您的回复!这个答案使我得到了进一步的发现。你是对的,我需要使用一个阈值,因为透明图像有一个非二进制alpha通道。然而,我注意到不透明的_图像也有一个非二进制alpha通道(错误的命名)。我希望将alpha通道保留在白色遮罩区域内,而在黑色区域将alpha设置为0。您需要提取两个alpha通道,将它们相乘,然后将结果作为新的alpha通道添加到不透明图像中。如果你不知道如何做到这一点,然后张贴你的两个图像,我会告诉你的命令。要将两个图像相乘,可以使用
-compose multiply-composite
-evaluate sequence multiply
convert \
opaque_image.png \
\( transparent_image.png -alpha extract \) \
-alpha off -compose copy_opacity -composite \
result.png
convert ^
opaque_image.png ^
( transparent_image.png -alpha extract ) ^
-alpha off -compose copy_opacity -composite ^
result.png