Imagemagick 仅替换PNG的背景色
这是我的密码:Imagemagick 仅替换PNG的背景色,imagemagick,imagemagick-convert,Imagemagick,Imagemagick Convert,这是我的密码: #! /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 fl
#! /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
它基于以下代码段:
从这一点开始:
我想得到这个:
不是这个:
我可以用一个convert
命令而不是convert
后跟mogrify
来实现这一点吗
我使用的是ImageMagick 6.8.9-9。本质上,您是在寻找一种“泛洪填充”,如下所示:
convert in.png -fill green -draw 'color 0,0 floodfill' result.png
convert -size 100x60 xc:blue -fill blue -stroke black -draw "circle 50,30 50,0" in.png
这将查看左上角的像素(0,0
),并用绿色填充与之相连的所有颜色相似的像素。如果你的背景有轻微的变化,例如JPEG,添加一些模糊因子
请注意,如果您的圆接触了上边缘和下边缘,它将防止填充向图表右侧溢出。那么,假设您创建了这样的圆:
convert in.png -fill green -draw 'color 0,0 floodfill' result.png
convert -size 100x60 xc:blue -fill blue -stroke black -draw "circle 50,30 50,0" in.png
然后运行上述命令,您将得到:
如果出现这种情况,您可以添加一个像素宽的边框,让颜色先“流动”,然后进行泛光填充,最后再将其删除:
convert in.png -bordercolor blue -border 1 -fill green -draw 'color 0,0 floodfill' -shave 1x1 result.png
要使用透明度而不是颜色填充,请使用:
convert in.png-fill none-draw'color 0,0 floodfill'result.png
。