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

时间:2010-02-24 00:04:35

标签: png imagemagick alpha-transparency

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

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

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

导致错误。

谢谢!

16 个答案:

答案 0 :(得分:305)

-background white -alpha remove -alpha off

示例:

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

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

  

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

答案 1 :(得分:216)

这对我有用:

convert -flatten img1.png img1-white.png

文档参考:

答案 2 :(得分:44)

在ImageMagick中直接展平图像和应用背景图像

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

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

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

答案 3 :(得分:23)

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

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

答案 4 :(得分:10)

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

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

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

答案 5 :(得分:10)

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

mogrify -background white -flatten */*.png

答案 6 :(得分:6)

Alpha RemoveImageMagick Usage Guide部分建议使用-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

有关删除Removing Transparency from Images部分中描述的透明度的其他经常使用的技术的详细信息。

该部分提到了使用-flatten作为消除透明度的技术的一个重要警告:

  

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

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

答案 7 :(得分:5)

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

sudo yum install libpng libpng-devel

答案 8 :(得分:5)

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

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

mogrify -alpha off ./*.png

答案 9 :(得分:3)

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

编辑,很久以后 - 其中一天我会检查“图形魔法”是否解决了这个问题。

答案 10 :(得分: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将透明像素替换为正确的绿色。

答案 11 :(得分:0)

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

的顶部
composite -gravity center ImgWithTransp.png BackgroundSameSizeOfImg.png ResultImg.png

最初在this post

上找到了提示

答案 12 :(得分:0)

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

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

答案 13 :(得分:0)

我看到了确实对我有帮助的这个问题和答案,但是后来我需要对许多文件进行处理,因此,如果您在一个文件夹中有多个图像(PNG图像),并且想对所有文件都这样做:

{{1}}

答案 14 :(得分:-1)

关闭-alpha,不删除-alpha!任何图标中都有Alpha通道时,iOS应用商店上传都会失败!

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

答案 15 :(得分:-2)

非命令行选项:在Windows Paint中打开PNG文件,然后单击“保存”。