假设您有任何图片(PNG或JPG)。此图像有白色背景,我需要使该背景透明。
我尝试了以下示例:
convert original.png -background none transparent.png
convert original.png -background white -flatten -alpha off transparent.png
但没有令人满意的结果。
我该怎么做?
重要说明:使用convert
命令行。
假设您有任何图片(PNG或JPG)。此图像有白色背景,我需要使该背景透明。
我尝试了以下示例:
convert original.png -background none transparent.png
convert original.png -background white -flatten -alpha off transparent.png
但没有令人满意的结果。
我该怎么做?
重要说明:使用convert
命令行。
Answers:
我在Ubuntu 12.04上使用ImageMagick 6.6.9-7。
对我有用的是:
convert test.png -transparent white transparent.png
这将test.png中的所有白色更改为透明。
我有同样的问题。在这种情况下,我必须使用ImageMagick从jpg / png图像格式中删除白色背景。
对我有用的是:
1)将图像格式转换为png: convert input.jpg input.png
2) convert input.png -fuzz 2% -transparent white output.png
mogrify -format png -median 2 -fuzz 5% -transparent white ico_*.jpg
color=$( convert filename.png -format "%[pixel:p{0,0}]" info:- )
convert filename.png -alpha off -bordercolor $color -border 1 \
\( +clone -fuzz 30% -fill none -floodfill +0+0 $color \
-alpha extract -geometry 200% -blur 0x0.5 \
-morphology erode square:1 -geometry 50% \) \
-compose CopyOpacity -composite -shave 1 outputfilename.png
这比以前给出的简单答案要长一些,但是它给出了更好的结果:(1)由于抗锯齿的alpha效果,质量更好,并且(2)仅去除了背景,而不是单色。(“背景”使用图片边缘的泛洪定义为与左上像素大致相同的颜色。)
此外,alpha通道也被侵蚀了半个像素,以避免出现光晕。当然,ImageMagick的形态学操作在亚像素级别上还不能工作,所以您可以看到在侵蚀之前我将alpha通道放大到200%。
这是在ImageMagick徽标上运行时,简单方法(“-模糊2%-透明白色”)与我的解决方案的比较 。我已将两个透明图像展平到鞍形棕色背景上,以使差异显而易见(单击原始图片)。
请注意,通过简单的方法,向导的胡须是如何消失的。比较向导的边缘,看看抗锯齿Alpha如何帮助图形平滑融合到背景中。
当然,我完全承认有时您可能希望使用更简单的解决方案。(例如:要记住它要容易得多,如果要转换为GIF,则无论如何都只能使用1位alpha。)
由于不太可能需要重复键入此命令,因此建议将其包装在脚本中。您可以从github下载BASH shell脚本,该脚本执行我建议的解决方案。它可以在目录中的多个文件上运行,并包含有用的注释,以备您调整时使用。
顺便说一句,ImageMagick实际上带有一个名为“ bg_removal”的脚本,该脚本 以与我的解决方案类似的方式使用Floodfill。但是,结果仍然不理想,因为它仍使用1位alpha。另外,bg_removal脚本运行速度较慢,使用起来有些棘手(它要求您指定两个不同的模糊值)。这是bg_removal输出的示例。
gimp
操作。:)
这对我有用:
convert original.png -fuzz 10% -transparent white transparent.png
绒毛百分比越小,则接近真实白色;反之,%越大,则允许与白色的差异越大,则变得透明
您可以使用它使背景透明
convert test.png -background rgba(0,0,0,0) test1.png
上面给出了完美的透明背景
()
: convert more-icon.png -gravity center -background 'rgba(0,0,0,0)' -extent 27x27 new-more-icon.png
使用ImageMagick,这与hackerb9代码和结果非常相似,但命令行更简单。它确实假设左上方的像素是背景色。我只用透明度填充背景,然后选择Alpha通道并对其进行模糊处理,并使用-level 50x100%移除一半的模糊区域。然后重新打开所有通道并将其展平为棕色。-blur 0x1 -level 50x100%用于对Alpha通道透明度的边界进行抗锯齿。您可以调整模糊值,模糊量和-level 50%值来更改抗锯齿度。
convert logo: -fuzz 25% -fill none -draw "matte 0,0 floodfill" -channel alpha -blur 0x1 -level 50x100% +channel -background saddlebrown -flatten result.jpg
convert original.png -transparent white new.png
但是一旦尝试,就无法使其起作用。顺便说一句,您确定您的背景实际上是白色(#FFFFFF),还是几乎是白色(例如#FEFEFE)?