Imagemagick 使用遮罩生成透明区域

Imagemagick 使用遮罩生成透明区域,imagemagick,imagemagick-convert,Imagemagick,Imagemagick Convert,我有一批需要透明背景的图像。我能够创建一个较亮和较暗区域的黑/白遮罩,并希望使用此遮罩保持遮罩中白色的像素不变,并将所有像素设置为透明的黑色。到目前为止,我得到了最好的结果 convert $FILE -rotate "-90<" $ROTATED convert $ROTATED \ +dither \ -colors 2 \ -fill black \ -draw 'color 0,0 floodfill' \ -flop \ -draw '

我有一批需要透明背景的图像。我能够创建一个较亮和较暗区域的黑/白遮罩,并希望使用此遮罩保持遮罩中白色的像素不变,并将所有像素设置为透明的黑色。到目前为止,我得到了最好的结果

convert $FILE -rotate "-90<" $ROTATED
convert $ROTATED \
  +dither \
  -colors 2 \
  -fill black \
  -draw 'color 0,0 floodfill' \
  -flop \
  -draw 'color 0,0 floodfill' \
  -flop \
  -white-threshold 0 \
  $MASK
convert $ROTATED -mask $MASK -compose copy-opacity -composite $OUT

convert$FILE-rotate“-90您只需从命令行中删除“-mask”,留下您的掩码图像(并添加-alpha off)

输入:

遮罩:

结果:

下载结果以查看背景是否完全透明

如果使用Imagemagick 7,则将
convert
更改为
magick

添加

这里有一种使用MPR的方法。请注意+交换

convert star.png \
-write mpr:star \
+dither \
-colors 2 \
-fill black \
-draw 'color 0,0 floodfill' \
-flop \
-draw 'color 0,0 floodfill' \
-flop \
-white-threshold 0 \
mpr:star \
+swap \
-alpha off \
-compose copy-opacity -composite \
out.png
您还可以使用克隆和括号来完成此操作

convert star.png \
\( +clone  \
+dither \
-colors 2 \
-fill black \
-draw 'color 0,0 floodfill' \
-flop \
-draw 'color 0,0 floodfill' \
-flop \
-white-threshold 0 \) \
-alpha off \
-compose copy-opacity -composite \
out.png

我得到了与上面相同的结果。

事实证明,当我对掩码图像使用MPR时,似乎出现了问题。通过使用其他格式,结果不是重影。好的,开始吧。如果掩码是png,它可以工作,掩码是MPR或HEIC,我得到了重影图像。你是如何使用MPR的。我对HEIC知之甚少,只是它还在开发中在ImageMagick中私奔。所以你的版本可能有bug。但是正确使用MPR应该可以。请展示你用于MPR的代码,我可能会更正它。MPR必须先保存在内存中,然后才能在命令行中使用。它不能从一个命令行运行到另一个命令行。我在回答中添加了一个说明如何使用MPR。啊好的,这使事情变得清晰。所以MPR在这里不是问题。我尝试了
convert image.HEIC image.MPR
,但正如你所说的,它不会以这种方式工作。
convert star.png \
\( +clone  \
+dither \
-colors 2 \
-fill black \
-draw 'color 0,0 floodfill' \
-flop \
-draw 'color 0,0 floodfill' \
-flop \
-white-threshold 0 \) \
-alpha off \
-compose copy-opacity -composite \
out.png