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

将PNG图像中的透明度替换为白色背景,png,imagemagick,alpha-transparency,Png,Imagemagick,Alpha Transparency,我有一些透明的PNG图像,我需要创建在白色背景上合成图像层的版本。我尝试过各种各样的ImageMagick“convert”操作,但要么什么都没发生,要么就是出错了。我不想使用中间的JPG表单,因为我不想要工件。当然,在Gimp、Photoshop或其他任何工具中都很容易做到这一点,但我更愿意从命令行编写脚本,因为有很多这样的东西 非工作图像Magick命令的示例如下: convert img1.png -background white -flatten img1-white.png 这会导

我有一些透明的PNG图像,我需要创建在白色背景上合成图像层的版本。我尝试过各种各样的ImageMagick“convert”操作,但要么什么都没发生,要么就是出错了。我不想使用中间的JPG表单,因为我不想要工件。当然,在Gimp、Photoshop或其他任何工具中都很容易做到这一点,但我更愿意从命令行编写脚本,因为有很多这样的东西

非工作图像Magick命令的示例如下:

convert img1.png -background white -flatten img1-white.png
这会导致一个错误


谢谢

好吧,看来我决定在“image magick”上安装“graphics magick”有一些不好的地方——当我重新安装真正粗糙的旧“image magick”时,上面的命令运行得非常好

编辑,很长一段时间后-总有一天我会检查“graphics magick”是否解决了这个问题

这对我很有用:

convert -flatten img1.png img1-white.png
文件参考:
  • -flatten
    相当于
    -layers flatten

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

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

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

$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png
示例:

convert image.png -background white -alpha remove -alpha off white.png
您可以随意将
白色
替换为您想要的任何其他颜色。Imagemagick文档说明了此操作:

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


您的命令似乎是正确的,因此问题可能是由于缺少对PNG()的支持。您可以使用
convert-list configure
进行检查,或者只需尝试以下操作:

sudo yum install libpng libpng-devel

使用-flatte让我彻底疯了,因为-flatte与mogrify裁剪和大小调整组合根本不起作用。官方的,对我来说唯一正确的方法是“移除”阿尔法通道

-alpha移除-alpha关闭(JPG不需要)


请参阅文档:

这将创建一个图像,仅将第一个透明放置在第二个上方

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

最初在

上找到提示要从文件中实际删除alpha通道,请使用以下选项:


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

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

这并不完全是您问题的答案,但我在试图找出如何删除alpha通道时发现了您的问题,因此我决定在此处添加此答案:

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

mogrify -alpha off ./*.png
本节建议使用
-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

本节介绍了用于消除透明度的其他常用技术的更多细节

该部分提到了使用
-flatte
作为去除透明度的技术的一个重要注意事项:

但是,这不适用于“mogrify”或多个图像序列,基本上是因为“-flatte”操作符的设计目的是将多个图像合并到单个图像中


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

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


mogrify-background white-flatte*/*.png

我看到了这个问题和答案,这些问题和答案对我很有帮助,但是我需要为很多文件做这些,所以如果你在一个文件夹中有多个图像(png图像),你想为所有人做这些:

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

是-alpha关闭,不是-alpha移除!当任何图标中有alpha频道时,iOS应用商店上载失败

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

我需要两个选项:一个是
-alpha背景
-flatte
,另一个是
-fill

我做了一个新的PNG,背景是透明的,中间有一个红点。

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

convert image.png-背景绿色-alpha背景-展平绿色。png
生成了具有正确绿色背景的图像。

当然,对于另一个我重命名为
image.png
的文件,它没有做任何事情。对于该文件,我发现透明像素的颜色为“#d5d5d5”,因此我用绿色填充该颜色:


转换image.png-填充绿色-不透明“#d5d5d5”绿色。png
将透明像素替换为正确的绿色。

这为我完成了以下工作:

magick convert OLD.png -background white -alpha remove NEW.png
这是一个在ca中具有透明背景的起始图像
find ./ -name "*.png" -exec convert {} -flatten {} \;
magick convert OLD.png -background white -alpha remove NEW.png