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

我有一些透明的PNG图像,我需要创建版本的图像层组合到一个白色的背景。我已经尝试了各种各样的图像Magick“转换”操作,但要么什么都没有发生,要么我得到一个错误。我不想转到中间的JPG表单,因为我不想要工件。当然,在Gimp或Photoshop或其他工具中很容易做到这一点,但我更愿意从命令行中编写脚本,因为有很多这样的东西。

一个无效的Image Magick命令的例子是:

convert img1.png -background white -flatten img1-white.png

这将导致一个错误。

谢谢!

238973 次浏览

Welp看起来我决定安装“图形魔法”而不是“图像魔法”有一些粗糙的边缘-当我重新安装真正复杂的旧“图像魔法”时,上面的命令工作得很好。

编辑, a long time later —总有一天我会去看看“图像魔法”是否已经解决了这个问题。

这对我来说很管用:

convert -flatten img1.png img1-white.png

文档引用:

扁平化图像和应用背景图像是直接的ImageMagick

然而,命令的顺序非常重要

要在透明图像上应用任何背景并将其压平,首先应用背景然后将其压平。反过来就不管用了。

$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png
-background white -alpha remove -alpha off

例子:

convert image.png -background white -alpha remove -alpha off white.png

你可以随意用你想要的任何颜色替换white。Imagemagick文档是这样描述-alpha remove操作的:

这个操作简单快捷,不需要 任何额外的内存使用,或其他可能相关的副作用 与替代透明去除技术。因此

看起来你的命令是正确的,所以问题可能是由于缺少对PNG()的支持。你可以用convert -list configure检查,或者试试下面的方法:

sudo yum install libpng libpng-devel

使用-flatten让我完全抓狂,因为-flatten与mogrify crop和resizing结合在一起根本不起作用。官方和对我来说唯一正确的方法是“删除”alpha通道。

-alpha remove -alpha off (JPG不需要)

参见文档:http://www.imagemagick.org/Usage/masking/#remove

这就创建了一个图像,只是将第一个透明的图像放在第二个上面

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

最初在这篇文章上找到了这个提示

要真正从文件中删除alpha通道,使用α下选项:

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

唯一对我有效的答案是所有答案的混合:

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

这不是你问题的确切答案,但我在试图弄清楚如何删除alpha通道时发现了你的问题,所以我决定在这里添加这个答案:

如果你想使用imagemagick删除alpha通道,你可以使用这个命令:

mogrify -alpha off ./*.png

ImageMagick使用指南α删除部分建议使用-alpha remove选项,例如:

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

...使用你选择的-background颜色。

指南指出:

这个操作简单快速,并且不需要任何额外的内存使用,也不需要其他可能与其他透明去除技术相关的副作用。因此,它是去除图像透明度的首选方法。

它还添加了注释:

注意,当透明度被“移除”时,alpha通道将继续打开,但现在将完全不透明。如果你不再需要alpha通道,你可以使用alpha Off禁用它。

因此,如果你不需要alpha通道,你可以通过添加-alpha off选项来减小输出图像的大小,例如:

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

还有更多关于从图像中移除透明度部分中描述的其他常用的删除透明性的技术的详细信息。

在这一节中提到了使用-flatten作为删除透明性的技术的一个重要警告:

然而,这将不适用于“mogrify”或多个图像序列,基本上是因为“-flatten”操作符实际上是设计用于将多个图像合并为单个图像。

因此,如果你一次转换几张图片,例如从PDF文件生成缩略图,-flatten将不会做你想要的(它会将所有页面的所有图片平放成一张图片)。另一方面,使用-alpha remove技术仍然会生成多个图像,每个图像都删除了透明度。

下面是如何将一个目录中所有文件夹中的相同图像替换为白色而不是透明的:

mogrify -background white -flatten */*.png

我看到了这个问题和答案,这真的帮助了我,但后来我需要为很多文件这样做,所以如果你有多个图像(PNG图像)在一个文件夹,你想为所有:

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

是-alpha off,不是-alpha remove!iOS应用商店上传失败时,有一个alpha频道在任何图标!!

以下是如何做到这一点: Mogrify -alpha off *.png

我需要:既-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将透明像素替换为正确的绿色。

这是我的工作:

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

下面是一个带有透明背景的初始图像,以防它有助于测试:

透明背景图像

此外,对于PC上的一次性,你可以在Windows Paint中打开PNG文件,然后单击保存。这将自动将透明变成不透明的白色。

都试过了,没有一个成功。这一个做到了:

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