使用 ImageMagick 和命令行提示设置透明背景

假设您有任何图像(PNG 或 JPG)。 这个图像有一个白色的背景,我需要使这个背景透明。

我尝试过这些例子:

  • convert original.png -background none transparent.png
  • convert original.png -background white -flatten -alpha off transparent.png

却没有任何令人满意的结果。

我该怎么做?

重要: 使用 convert命令行。

148328 次浏览

我在 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

您可以使用这个来使背景透明

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

解决方案

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 标志 。我已经扁平化了 这两个透明的图像到一个马鞍棕色的背景,使 差异明显(点击原件)。

The simple replacement of white as transparent doesn't always work Antialiased alphachannel and floodfill looks much better

注意,在这个简单的方法中,向导的胡子是如何消失的。 比较向导的边缘,看看反锯齿 alpha 如何帮助 图案平滑地融入背景中。

当然,我完全承认有时候你可能会想要 更简单的解决方案。(例如: 请记住,如果要转换为 GIF,则限制为1位 阿尔法。)

Mktrans shell 脚本

由于您不太可能希望重复输入此命令,因此我 你可以下载一个 BASH shell 来自 github 的脚本 执行我建议的解决方案 目录,并包含有用的注释,以备不时之需 调整一下。

Bg _ delete 脚本

顺便说一下,ImageMagick 实际上提供了一个名为 “清除大气污染物” 其使用的方式与我的解决方案类似。然而, 结果不是很好,因为它仍然使用1位 alpha Bg _ delete 脚本运行速度较慢,使用起来有点棘手(它 需要指定两个不同的模糊值)。

The bg_removal script: has beard, but lacks antialiasing

使用 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

enter image description here