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

Poi*_*nty 273 png imagemagick alpha-transparency

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

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

convert img1.png -background white -flatten img1-white.png
Run Code Online (Sandbox Code Playgroud)

这会导致错误.

谢谢!

Rok*_*alj 341

-background white -alpha remove -alpha off
Run Code Online (Sandbox Code Playgroud)

例:

convert image.png -background white -alpha remove -alpha off white.png
Run Code Online (Sandbox Code Playgroud)

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

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

  • @SkippyleGrandGourou:这是必要的,因为PNG的透明度后备颜色并不总是白色. (5认同)
  • 生成的图像仍将具有Alpha通道.它将是空的,但它仍将存在.要完全删除通道,请添加`-alpha off`. (4认同)
  • 似乎不需要`-background white(尽管可能是其他颜色). (3认同)
  • 比接受的答案更好(如果多于一层不能做正确的事情) (3认同)
  • @nuttyaboutnatty试试这个: find /your/path -name "*.png" -exec Convert {} -background White -alpha remove {}.white.png \; (2认同)
  • 不起作用 我制作了一个新的PNG,透明背景,中间有一个红点。无论我指定什么颜色,始终产生黑色背景。`convert image.png -background white -alpha off white.png`产生的图像带有黑色背景。`convert image.png -background“#00ff33” -alpha off 00ff33.png`产生黑色背景 (2认同)
  • 作为附加步骤,我对结果运行了“pngcrush”程序。这将最终文件大小缩小到与原始文件大小相同。 (2认同)

rem*_*osu 236

这对我有用:

convert -flatten img1.png img1-white.png
Run Code Online (Sandbox Code Playgroud)

文档参考:

  • **请勿**尝试使用`-flatten`转换多页文档.它会将页面压缩成一页. (38认同)
  • 看看我的答案如下.它是在这个之后两年加入的. (9认同)
  • 如果你想对文件夹中的所有文件进行操作,你可以这样做:`mogrify -flatten*.png`以防万一,不要忘记做备份.更多信息:https://www.imagemagick.org/script/mogrify.php (8认同)
  • 不知怎的,这对我不起作用......我尝试了"-transparent-color white",但得到了异常/警告. (3认同)

acp*_*ade 44

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

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

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

$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png
Run Code Online (Sandbox Code Playgroud)


db0*_*db0 23

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

convert in.png -background white -alpha remove -flatten -alpha off out.png
Run Code Online (Sandbox Code Playgroud)

  • 很酷,这很有效.我实际上需要另一种颜色而不是白色,你可以使用`... -groundground"#010203"......而不是使用白色. (4认同)

Jul*_*ian 11

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

mogrify -background white -flatten */*.png


小智 10

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

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

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


Gar*_*ary 6

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

convert in.png  -background white  -alpha remove  out.png
Run Code Online (Sandbox Code Playgroud)

...使用-background您选择的颜色.

该指南指出:

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

它另外添加了注释:

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

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

convert in.png  -background white  -alpha remove  -alpha off  out.png
Run Code Online (Sandbox Code Playgroud)

有关删除透明度从图像部分中描述的其他常用技术的详细信息.

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

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

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


Ala*_*air 5

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

sudo yum install libpng libpng-devel
Run Code Online (Sandbox Code Playgroud)


Fre*_*ame 5

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

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

mogrify -alpha off ./*.png
Run Code Online (Sandbox Code Playgroud)