假设您有任何图像(PNG或JPG)。这个图像有一个白色的背景,我需要使这个背景透明。
我已经尝试过这些例子:
convert original.png -background none transparent.png
convert original.png -background white -flatten -alpha off transparent.png
但没有得到理想的结果。
我怎么才能做到呢?
重要提示:使用convert
命令行。
发布于 2012-06-20 16:15:44
我在Ubuntu12.04上使用的是ImageMagick 6.6.9-7。
对我来说起作用的是:
convert test.png -transparent white transparent.png
这使得test.png中所有的白色都变成了透明。
发布于 2013-05-10 19:19:31
我也有同样的问题。其中我必须删除白色背景从jpg/png图像格式使用ImageMagick。
对我起作用的是:
1)图片格式转换为png:convert input.jpg input.png
2) convert input.png -fuzz 2% -transparent white output.png
发布于 2017-06-14 18:57:33
解决方案
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 logo上运行的简单方法("-fuzz 2% -transparent白色“)与我的解决方案的比较。我已经将两个透明的图像都压平到了马鞍状的棕色背景上,以使差异变得明显(单击查看原图)。
请注意,在简单方法中,向导的胡子是如何消失的。比较向导的边缘,看看消除锯齿的alpha如何帮助图形平滑地混合到背景中。
当然,我完全承认有时您可能希望使用更简单的解决方案。(例如:它更容易记住,如果你要转换成GIF,无论如何你只能使用1位的alpha。)
mktrans脚本
由于您不太可能希望重复键入此命令,因此我建议将其封装在脚本中。您可以使用download a BASH shell script from github,它执行我建议的解决方案。它可以在一个目录中的多个文件上运行,并包含有用的注释,以防您想要调整内容。
bg_removal脚本
顺便说一下,ImageMagick实际上附带了一个名为"bg_removal"的脚本,它以与我的解决方案类似的方式使用floodfill。然而,结果并不是很好,因为它仍然使用1位alpha。此外,bg_removal脚本运行较慢,并且使用起来有点麻烦(它需要您指定两个不同的fuzz值)。以下是bg_removal的输出示例。
https://stackoverflow.com/questions/9155377
复制相似问题