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

14
3个回答

13

我认为由于您的图像不是二进制的,您可能无法得到完美的结果。但在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


谢谢你提供有关绘图选项中的泛洪填充的提示!非常有用。 - kursus
1
对于带有透明背景的PNG图像,convert original.png -background COLOR -flatten -alpha off transparent.png 对我来说很有效:https://dev59.com/J2ox5IYBdhLWcg3whUkV - Mario

11

为了应用任何背景颜色,首先程序需要知道边缘和背景。

您使用的图像没有做到这一点。

虽然您的命令是正确的,但由于没有区分边缘和背景,因此它不起作用。所以我们先使用遮罩。

首先运行以下命令获取边缘:

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
现在您将获得预期结果。 输出最终图像 来源:http://www.imagemagick.org/Usage/masking/#bg_remove

7

通常只需要使用-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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接