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

Yan*_*ang 5 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,但这不起作用.

abh*_*nbr 11

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

首先运行它来获取边缘:

convert aa.png -bordercolor white -border 1x1 \
      -alpha set -channel RGBA -fuzz 20% \
      -fill none -floodfill +0+0 white \
      -shave 1x1    aa.png
Run Code Online (Sandbox Code Playgroud)

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

convert aa.png -background blue -flatten bb.png
Run Code Online (Sandbox Code Playgroud)

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

输出最终图像

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


fmw*_*w42 7

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

convert 20170916180007_833.png.jpeg -fuzz 25% -fill red -opaque white -flatten result1.png
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

或者你可以做一个洪水填充来改变外部区域:

convert 20170916180007_833.png.jpeg -fuzz 25% -fill none -draw "matte 0,0 floodfill" -background red -flatten result2.jpg
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


emc*_*lle 5

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

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

convert 20170916180007_833.png \
        -fill '#0e0e0e' -fuzz 20% \
        -draw 'color 0,0 floodfill' \
        output_color.png
Run Code Online (Sandbox Code Playgroud)

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

convert 20170916180007_833.png \
        -fill 'transparent' -fuzz 20% \
        -draw 'color 0,0 floodfill' \
        output_transparent.png
Run Code Online (Sandbox Code Playgroud)

output_transparent.png