假设您有任何图像(PNG 或 JPG)。 这个图像有一个白色的背景,我需要使这个背景透明。
我尝试过这些例子:
convert original.png -background none transparent.png
convert original.png -background white -flatten -alpha off transparent.png
却没有任何令人满意的结果。
我该怎么做?
重要: 使用 convert命令行。
convert
我在 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
convert input.jpg input.png
2) convert input.png -fuzz 2% -transparent white output.png
convert input.png -fuzz 2% -transparent white output.png
您可以使用这个来使背景透明
convert test.png -background rgba(0,0,0,0) test1.png
上图给出了完美的透明背景
这对我有用:
convert original.png -fuzz 10% -transparent white transparent.png
模糊的百分比越小,越接近真正的白色,或者相反,百分比越大,从白色变成透明的可能性就越大
如果希望控制透明度级别,可以使用 rgba。A 代表阿尔法狼。0表示透明,1表示不透明。确保最终输出文件必须具有。透明的 png 扩展。
convert test.png -channel rgba -matte -fuzz 40% -fill "rgba(255,255,255,0.5)" -opaque "rgb(255,255,255)" semi_transparent.png
是的。也有同样的问题。下面是我运行的命令,它运行得很好: convert transparent-img1.png transparent-img2.png transparent-img3.png -channel Alpha favicon.ico
convert transparent-img1.png transparent-img2.png transparent-img3.png -channel Alpha favicon.ico
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)质量优良 (2) 只有的背景删除为 反对单一的颜色。(“背景”定义为大约 颜色与左上角的像素相同,使用来自 图片边缘。)
此外,阿尔法通道也被侵蚀了半个像素,以避免光晕。当然,ImageMagick 的形态学操作(还没有?)工作在亚像素级别,所以你可以看到,我把阿尔法通道放大到200% ,在侵蚀之前。
下面是一个简单方法(“-fuzz2%-透明”)的比较 白色”)与我的解决方案,当运行在 ImageMagick 标志 。我已经扁平化了 这两个透明的图像到一个马鞍棕色的背景,使 差异明显(点击原件)。
注意,在这个简单的方法中,向导的胡子是如何消失的。 比较向导的边缘,看看反锯齿 alpha 如何帮助 图案平滑地融入背景中。
当然,我完全承认有时候你可能会想要 更简单的解决方案。(例如: 请记住,如果要转换为 GIF,则限制为1位 阿尔法。)
由于您不太可能希望重复输入此命令,因此我 你可以下载一个 BASH shell 来自 github 的脚本 执行我建议的解决方案 目录,并包含有用的注释,以备不时之需 调整一下。
顺便说一下,ImageMagick 实际上提供了一个名为 “清除大气污染物” 其使用的方式与我的解决方案类似。然而, 结果不是很好,因为它仍然使用1位 alpha Bg _ delete 脚本运行速度较慢,使用起来有点棘手(它 需要指定两个不同的模糊值)。
使用 ImageMagick,这与 hackerb9代码和结果非常相似,但是命令行稍微简单一些。它确实假设左上角的像素是背景颜色。我只是填充透明的背景,然后选择阿尔法通道和模糊它和消除一半的模糊区域使用-级别50x100% 。然后打开所有的通道,把它和棕色的颜色对比。模糊0x1-级别50x100% 可以防止 alpha 通道透明度的边界出现别名。您可以调整模糊值,模糊量和级别50% 的值,以改变反走样的程度。
convert logo: -fuzz 25% -fill none -draw "matte 0,0 floodfill" -channel alpha -blur 0x1 -level 50x100% +channel -background saddlebrown -flatten result.jpg