350

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

一个不工作的 Image Magick 命令的例子是:

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

这会导致错误。

谢谢!

4

16 回答 16

457
-background white -alpha remove -alpha off

例子:

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

随意替换white为您想要的任何其他颜色。Imagemagick 文档对-alpha remove操作进行了说明:

此操作简单快速,无需任何额外的内存使用或其他可能与替代透明度去除技术相关的副作用即可完成这项工作。因此,它是去除图像透明度的首选方式。

于 2011-12-08T20:53:14.840 回答
300

这对我有用:

convert -flatten img1.png img1-white.png

文档参考:

于 2010-02-24T00:27:05.607 回答
45

在 ImageMagick 中展平图像和应用背景图像非常简单

但是,命令的顺序非常重要

要在透明图像上应用任何背景并将其展平,请先应用背景而不是展平它。反过来不行。

$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png
于 2011-06-06T15:13:09.787 回答
23

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

convert in.png -background white -alpha remove -flatten -alpha off out.png
于 2015-02-16T03:51:33.600 回答
16

以下是如何用白色而不是透明替换目录中所有文件夹中的相同图像:

mogrify -background white -flatten */*.png

于 2016-09-28T04:04:31.957 回答
10

使用 -flatten 让我非常生气,因为 -flatten 与 mogrify crop 和调整大小相结合根本不起作用。官方对我来说唯一正确的方法是“删除” alpha 通道。

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

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

于 2014-04-21T10:07:42.903 回答
7

ImageMagick 使用指南Alpha Remove部分建议使用该选项,例如:-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技术仍会产生多幅图像,每幅图像都去除了透明度。

于 2016-06-22T16:37:48.307 回答
5

看来您的命令是正确的,因此问题可能是由于缺少对 PNG () 的支持。您可以检查convert -list configure或尝试以下方法:

sudo yum install libpng libpng-devel
于 2013-07-01T11:10:04.753 回答
5

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

如果要使用 imagemagick 删除 alpha 通道,可以使用以下命令:

mogrify -alpha off ./*.png
于 2015-04-17T08:22:10.120 回答
3

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

编辑,很长一段时间后 - 这些天我会检查“图形魔术师”是否解决了这个问题。

于 2010-02-24T00:21:49.883 回答
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用正确的绿色替换透明像素。

于 2018-12-17T04:48:59.663 回答
1

我看到这个问题和答案确实对我有帮助,但后来我需要为很多文件做这件事,所以如果你在一个文件夹中有多个图像(PNG图像)并且你想为所有人做这件事:

find ./ -name "*.png" -exec convert {} -flatten {} \;
于 2018-09-12T15:52:19.020 回答
0

这会创建一个图像,只是将第一个透明的图像放在第二个的顶部

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

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

于 2014-06-30T18:46:27.157 回答
0

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

convert in.png -background white -alpha off out.png
于 2014-09-09T15:41:49.460 回答
-1

它是 -alpha 关闭,而不是 -alpha 删除!当任何图标中有 alpha 通道时,iOS 应用商店上传失败!!

操作方法如下: mogrify -alpha off *.png

于 2018-11-13T23:54:15.980 回答
-2

这对我有用:

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

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

具有透明背景的图像

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

于 2020-02-12T23:02:36.073 回答