如何在ImageMagick中将图像的白色背景颜色替换为透明?

54

我有一张以.jpg格式保存的图片,背景是白色。我想在Imagemagick中将白色背景变成透明。我尝试了很多方法,但是仍然无法去除白色背景。请问有谁可以帮我解决这个问题。


1
你尝试了什么?你可能需要先将其转换为“索引颜色”模式(例如PNG)。无论你如何操作,你都可以预期在图像和透明之间的边界处出现伪影。 - msw
透明转白色:https://dev59.com/1HE95IYBdhLWcg3wadKq - Ciro Santilli OurBigBook.com
类似问题:https://dev59.com/5aXja4cB1Zd3GeqPYu5G - Joshua Goldberg
5个回答

83

在JPEG图像中,无法使用透明背景颜色。JPEG文件格式不支持透明度。

如果需要透明的背景,您需要将JPEG转换为

  • PNG(高质量,文件大小可能大于JPEG)
  • 或GIF(如果您可以容忍较低的质量和最多255种颜色)。

示例命令:

convert  your.jpg  -transparent white  your.png

1
我必须读了你的帖子,而不是你的实际命令;我以为你是在建议“手动转换”,很抱歉弄错了,我投了你的答案。我对语法不是很熟悉,但我对它的能力很熟悉。 - Jim22150
这很有效...但如果你的图片中有任何白色,那么它也会将其转换为透明。你可以通过手动填充背景到另一种颜色,然后将该颜色设为透明来解决这个问题。我不认为这是 OP 寻找的,但我可能会使用像 https://www.remove.bg 这样的非 CLI 工具。 - Brady Dowling

73

首先,您需要将图像格式从.jpg转换为.png格式,因为JPEG不支持透明度。然后使用以下命令:

convert image1.png -fuzz 20% -transparent white result.png

-fuzz选项允许将指定百分比偏离纯白色的颜色也转换为透明。例如,当您的图像包含噪点或细微渐变时,这非常有用。


17
我的回答有什么问题吗?(你在问题中没有说明需要一定程度的模糊性,也没有提供示例文件 - 因此无法猜测……) - Kurt Pfeifle
9
不必先将文件从JPEG转换为PNG,然后再将白色转换为透明。我的命令一次性完成所有操作。 - Kurt Pfeifle
2
@KurtPfeifle 我理解他本可以帮助你改进你的答案,而不是回答自己的问题;但是没有 -fuzz 20% 在这里无法工作;我认为你的答案可以通过模糊选项进行改进,顺便说一下,我完全没有问题;此外,他的答案并不完全正确,因为我可以直接从 jpg 转换为 png 结果;最后,两个答案都带来了一个严重的问题;轮廓背景颜色(这里是黑色)变成透明;但实际上图像内部所有的黑色也变成了透明;这实际上搞乱了我的图像... :> - Aquarius Power

14
我刚发现了一个非常棒的东西!
magicwand 1,1 -t 20 -f image -r outside -m overlay -o 0 image.jpg imgOutput.png

这是一个Fred Weinhaus的bash脚本,可以从这里下载(仅限非商业用途)。此外还有大约250个脚本!!这个脚本非常棒!它完美地去除了所有背景,同时保留了内部图像点的不变性!
在他的页面上,有几个示例图像,所以您可以选择需要放在命令行上的内容!
初始位置1,1是一个普通的猜测器,表示所有轮廓都是背景。
请注意输出必须为“.png”。

4

自动获取并删除背景:

bg=$(convert input.png -format "%[pixel:p{0,0}]" info:)
convert input.png -fuzz 20% -transparent "$bg" output.png

3

这是我的解决方案,没有使用魔法棒(对于im < 7.0,请将magick替换为convert):

magick img.png -fuzz 20% -fill none -draw "alpha 1x1 floodfill" result.png

3
在Ubuntu的ImageMagick v8:6.7.7.10中出现错误convert.im6: non-conforming drawing primitive definition 'alpha' @ error/draw.c/DrawImage/3158.,有什么想法吗? - Aquarius Power
1
这是ImageMagick 6的正确命令:convert "./input.jpg" -fill none -draw 'color 1,1 floodfill' output.png - The Flying Dutchman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接