首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ImageMagick和命令行提示符设置透明背景

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

Stack Overflow用户
提问于 2012-02-06 11:48:41
回答 8查看 132.8K关注 0票数 139

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

我已经尝试过这些例子:

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

但没有得到理想的结果。

我怎么才能做到呢?

重要提示:使用convert命令行。

EN

回答 8

Stack Overflow用户

发布于 2012-06-20 16:15:44

我在Ubuntu12.04上使用的是ImageMagick 6.6.9-7。

对我来说起作用的是:

代码语言:javascript
运行
复制
convert test.png -transparent white transparent.png

这使得test.png中所有的白色都变成了透明。

票数 152
EN

Stack Overflow用户

发布于 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

票数 90
EN

Stack Overflow用户

发布于 2017-06-14 18:57:33

解决方案

代码语言:javascript
运行
复制
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的输出示例。

票数 59
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9155377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档