如何使用ImageMagick更改图片背景颜色?

时间:2017-09-28 11:00:34

标签: linux shell imagemagick

我想改变我的图片背景颜色,这是我的来源http://cdn.mayike.com/emotion/img/attached/1/image/dt/20170916/18/20170916180007_833.png

如果我想将背景颜色更改为其他颜色,我该怎么办?

如果我想将背景颜色更改为透明,我该怎么办?

我尝试使用convert aa.png -background '#0e0e0e' bb.png,但这不起作用。

3 个答案:

答案 0 :(得分:2)

通常需要-opaque-transparent。但因为图像是黑色的&白色,我们需要隔离ROI才能生效。我建议使用MVG绘图命令。

  

如果换成另一种颜色,我该怎么办?

convert 20170916180007_833.png \
        -fill '#0e0e0e' -fuzz 20% \
        -draw 'color 0,0 floodfill' \
        output_color.png
  

如果改为透明,我该怎么办?

convert 20170916180007_833.png \
        -fill 'transparent' -fuzz 20% \
        -draw 'color 0,0 floodfill' \
        output_transparent.png

output_transparent.png

答案 1 :(得分:2)

由于你的图像不是二进制的,我认为你不会得到完美的结果。然而在Imagemagick中你有两个选择。首先,您可以将所有白色更改为红色:

convert 20170916180007_833.png.jpeg -fuzz 25% -fill red -opaque white -flatten result1.png

enter image description here

或者你可以进行洪水填充来改变外部区域:

convert 20170916180007_833.png.jpeg -fuzz 25% -fill none -draw "matte 0,0 floodfill" -background red -flatten result2.jpg

enter image description here

答案 2 :(得分:1)

要应用任何背景颜色,首先程序应该知道边缘和背景。 您使用的图像不会这样做。 虽然您的命令是正确的,但由于不区分边和背景,因此它不起作用。所以我们先使用Masking

首先运行此以获得边缘:

convert aa.png -bordercolor white -border 1x1 \
      -alpha set -channel RGBA -fuzz 20% \
      -fill none -floodfill +0+0 white \
      -shave 1x1    aa.png

现在你将把边缘保存在aa.png中。此时您的背景是透明的。接下来运行背景颜色更改命令:

convert aa.png -background blue -flatten bb.png

现在你将获得预期的结果。

Output Final Image

来源:http://www.imagemagick.org/Usage/masking/#bg_remove