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
由于您的图像不是二进制的,我认为您不会得到完美的结果。尽管如此,在 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)
通常-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)