用白色背景替换PNG图像中的透明度

403

我有一张带有alpha通道(即透明度)的PNG图像,我需要创建一个将图像层组合到白色背景上的版本。我想使用可编写命令的CLI工具(例如Image Magick)直接将PNG转换为无损PNG。

以下是一个不起作用的Image Magick命令示例,它会导致错误:

convert input.png -background white -flatten output.png

在我的特定情况下,PNG 中的透明图层在通过 (Apache) FO 处理器创建 PDF/A 时会发生冲突。PDF/A 不允许使用透明效果。我使用的解决方法是改用 JPG 格式。 - Wivani
5
这导致出现错误。 请问这个错误信息是什么? - Aaron McDaid
那个命令应该可以正常工作。如果不能,那么你可能安装的Imagemagick或libpng有缺陷,或者它们的版本太旧了。你的Imagemagick和libpng版本是多少? - fmw42
17个回答

2

我需要使用以下方法之一:同时使用 -alpha background-flatten,或者使用 -fill

我创建了一个新的PNG图片,它有透明的背景和一个红色的圆点在中间。

convert image.png -background green -alpha off green.png 失败了:它生成了一个黑色背景的图片。

convert image.png -background green -alpha background -flatten green.png 生成了一个带有正确绿色背景的图片。

当然,对于另一个我重命名为image.png的文件,它无法做任何事情。对于那个文件,我发现透明像素的颜色是“#d5d5d5”,所以我用绿色填充了那个颜色:

convert image.png -fill green -opaque "#d5d5d5" green.png 用正确的绿色替换了透明像素。


正确的ImageMagick命令应该是convert image.png -background green -alpha background -alpha off green.png或者convert image.png -background green -alpha background -alpha remove green.png或者convert image.png -background green -flatten green.png - fmw42

2

我看到了这个问题和答案,它们真的帮助了我,但是后来我需要为很多文件做同样的操作。因此,如果你有一个文件夹里有多个PNG图像,并且你想对所有图像进行相同的操作:

find ./ -name "*.png" -exec convert {} -flatten {} \;

1

尝试了所有的方法,都没有用。只有这个有效:

convert input.png -channel rgba -alpha set \
            -fill none -opaque white \
            -fill white -opaque black \
            -fill white -opaque none \
            -alpha off output.png

0

这将创建一个图像,将带有透明度的第一个放在第二个上面

composite -gravity center ImgWithTransp.png BackgroundSameSizeOfImg.png ResultImg.png

我最初在这篇文章中发现了这个提示。


0

要从文件中实际删除 alpha 通道,请使用 alpha off 选项:

convert in.png -background white -alpha off out.png

1
实际上,您提供的链接说:“它实际上并没有删除或破坏附加到图像的 alpha 通道,它只是关闭该通道对图像的任何影响。” 要真正删除 alpha 通道,请参阅我的答案。 - Rok Kralj

-1

注意,应该使用-alpha off而不是-alpha remove!如果图标中包含Alpha通道,则iOS应用商店上传将失败!!

以下是如何操作: mogrify -alpha off *.png


-1

这对我来说做得到:

magick convert OLD.png -background white -alpha remove NEW.png

这里有一张带有透明背景的起始图像,以便于测试:

image with transparent background

此外,对于PC上的一次性操作,您可以在Windows画图中打开PNG文件并单击保存。这将自动将透明度转换为不透明白色。

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