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

问题描述 投票:250回答:15

我有一些透明的PNG图像,我需要创建版本,图像层组成一个白色背景。我已尝试使用Image Magick“转换”操作进行各种操作,但要么根本没有发生任何事情,要么我收到错误。我不想转到中间JPG表单,因为我不想要这些工件。当然,在Gimp或Photoshop或其他任何地方都很容易做到这一点,但我真的宁愿从命令行编写它,因为有很多这样的东西。

非工作Image Magick命令的示例是:

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

这会导致错误。

谢谢!

png imagemagick alpha-transparency
15个回答
221
投票

这对我有用:

convert -flatten img1.png img1-white.png

Documentation references:


3
投票

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

编辑,很久以后 - 其中一天我会检查“图形魔法”是否已修复此问题。


2
投票

我需要:mogrify -alpha off ./*.png -alpha background,或-flatten

我制作了一个新的PNG,背景为透明,中间有一个红点。

-fill失败了:它产生了一个黑色背景的图像

convert image.png -background green -alpha off green.png制作了具有正确绿色背景的图像。

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

image.png用正确的绿色替换了透明像素。


0
投票

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

convert image.png  -fill green -opaque "#d5d5d5" green.png

最初在composite -gravity center ImgWithTransp.png BackgroundSameSizeOfImg.png ResultImg.png 找到了小费


0
投票

要从文件中实际删除Alpha通道,请使用this post选项:

alpha off

0
投票

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

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

-1
投票

它是-alpha off,NOT -alpha删除!当任何图标中都有Alpha通道时,iOS应用商店上传失败!

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


315
投票
-background white -alpha remove -alpha off

例:

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

随意用你想要的任何其他颜色替换white。 Imagemagick文档说明了-alpha remove操作:

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


44
投票

在ImageMagick中,展平图像和应用背景图像是直截了当的

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

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

$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png

23
投票

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

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

10
投票

使用-flatten让我完全疯了,因为 - 与mogrify作物结合使用并且调整大小根本不起作用。官方和我唯一正确的方法是“删除”alpha通道。

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

参见文档:qazxsw poi


10
投票

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

http://www.imagemagick.org/Usage/masking/#remove


6
投票

mogrify -background white -flatten */*.pngAlpha Remove部分建议使用ImageMagick Usage Guide选项,例如:

-alpha remove

...使用您选择的convert in.png -background white -alpha remove out.png 颜色。

该指南指出:

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

它另外添加了注释:

请注意,虽然透明度已被“移除”,但Alpha通道仍将保持打开状态,但现在将完全不透明。如果您不再需要Alpha通道,则可以使用Alpha Off禁用它。

因此,如果您不需要Alpha通道,可以通过添加-background选项使输出图像大小更小,例如:

-alpha off

有关删除convert in.png -background white -alpha remove -alpha off out.png 部分中描述的透明度的其他常用技术的更多详细信息。

该部分中提到了使用Removing Transparency from Images作为消除透明度的技术的一个重要警告:

然而,这不适用于“mogrify”或一系列多个图像,主要是因为“-flatten”运算符实际上是为了将多个图像合并为单个图像而设计的。

因此,如果您要同时转换多个图像,例如从PDF文件生成缩略图,-flatten将无法执行您想要的操作(它会将所有页面的所有图像展平为一个图像)。另一方面,使用-flatten技术仍将产生多个图像,每个图像都具有透明度。


5
投票

您的命令似乎是正确的,因此问题可能是由于缺少对PNG()的支持。您可以查看-alpha remove或尝试以下内容:

convert -list configure

5
投票

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

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

sudo yum install libpng libpng-devel
© www.soinside.com 2019 - 2024. All rights reserved.