这是我的代码:
#! /usr/bin/env sh
# Generate test image.
convert -size 100x60 xc:blue -fill blue -stroke black -draw "circle 50,30 55,55" in.png
# Make background transparent.
convert in.png -fill none -draw 'matte 0,0 floodfill' -flop -draw 'matte 0,0 floodfill' -flop out.png
# Replace transparent background with green.
mogrify -background green -flatten out.png
# The wrong way.
convert in.png -transparent blue oops.png
mogrify -background green -flatten oops.png
它基于此代码段:https://snippets.aktagon.com/snippets/558-how-to-remove-a-background-with-imagemagick
从这开始:
我想得到这个:
不是这个:
我可以使用单个convert
命令而不是convert
后跟mogrify
来实现此目的吗?
我正在使用ImageMagick 6.8.9-9。
答案 0 :(得分:3)
基本上,您正在寻找“floodfill”,如下所示:
convert in.png -fill green -draw 'color 0,0 floodfill' result.png
这将查看左上角的像素(0,0
),并用绿色填充与其连接的所有类似颜色的像素 。如果您的背景略有不同,例如它是一个JPEG,添加一些模糊因子
convert in.jpg -fuzz 25% ...
请注意,如果您的圆圈触及了顶部和底部边缘,则会阻止填充物溢出到图表的右侧。所以,假设你创建了这样的圈子:
convert -size 100x60 xc:blue -fill blue -stroke black -draw "circle 50,30 50,0" in.png
然后你运行上面的命令,你会得到:
如果发生这种情况,你可以一直添加一个像素宽的边框,以便将颜色添加到“flow”,然后进行泛洪填充,最后将其删除:
convert in.png -bordercolor blue -border 1 -fill green -draw 'color 0,0 floodfill' -shave 1x1 result.png