ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

这会导致错误。

谢谢!

在我的具体情况下,PNG 中的透明层在通过(Apache)FO 处理器创建 PDF/A 时发生冲突。 PDF/A 不允许透明度。我使用的技巧是改用JPG。
“这会导致错误。”错误信息是什么?
该命令应该可以正常工作。如果没有,那么您可能安装了错误的 Imagemagick 或 libpng,或者您的版本太旧。你的 Imagemagick 和 libpng 是什么版本?

R
Rok Kralj
-background white -alpha remove -alpha off

例子:

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

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

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


似乎不需要 -background white (虽然它可能是其他颜色)。
@SkippyleGrandGourou:这是必需的,因为 PNG 的透明度后备颜色并不总是白色。
比公认的答案更好(如果不止一层,则不会做正确的事情)
生成的图像仍将具有 Alpha 通道。它会是空的,但它仍然会在那里。要完全删除频道,请添加 -alpha off
不工作。我制作了一个新的PNG,背景透明,中间有一个红点。无论我指定什么颜色,总是产生黑色背景。 convert image.png -background white -alpha off white.png 生成了一张黑色背景的图片。 convert image.png -background "#00ff33" -alpha off 00ff33.png 产生黑色背景
F
Flimm

这对我有用:

convert -flatten img1.png img1-white.png

文档参考:

-flatten 命令行选项

-layers 命令行选项(-flatten 等效于 -layers flatten)


不知何故,这对我不起作用......我尝试了“-transparent-color white”,但得到了异常/警告。
事实证明,我还需要将 -background 设置为白色。我还必须下载缺少的 colors.xml。
在下面查看我的答案。它是在此之后 2 年添加的。
请勿尝试使用 -flatten 转换多页文档。它将页面拼合为一页。
如果您想对文件夹中的所有文件执行此操作,您可以这样做:mogrify -flatten *.png 以防万一,不要忘记进行备份。更多信息:imagemagick.org/script/mogrify.php
a
acpmasquerade

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

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

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

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

无论出于何种原因,这对我来说都很好。不知道为什么你最初的尝试没有奏效。
d
db0

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

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

酷,这工作。我实际上需要白色以外的另一种颜色,您可以使用 ... -background "#010203" ... 而不是白色。
以下是如何替换目录中所有文件夹中的相同图像 mogrify -background white -flatten */*.png
-alpha remove 为我做了什么
J
Julian

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

mogrify -background white -flatten */*.png


T
Tjarko Rikkerink

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

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

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


那么怎么会变成命令呢?这在这里不起作用:convert imgWithTranspBkg.png -alpha remove -alpha off bkg.jpg resultImg.png
我只想删除 alpha。转换为JPG就可以了,又好又简单。谢谢你的提示。
这是上述唯一对我有用的解决方案。现在 iTunes 商店对我的形象很满意。
G
Gary

ImageMagick Usage GuideAlpha 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

Removing Transparency from Images 部分中介绍了其他常用的消除透明度技术的更多详细信息。

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

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

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


A
Alastair

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

sudo yum install libpng libpng-devel

对了谢谢;这个(旧)问题是“graphicks magick”中的一个错误,它是“image magick”的一个分叉/重写/任何东西。
@Pointy 我明白了!出于好奇,问题的实际原因是什么(仅在一个版本中)?
好吧,我真的不知道。这只是一个错误。我不是 Graphicks Magick 的维护者,所以我对他们的代码一无所知。我想我需要在某个时候再试一次。
ubuntu 没有吗?这是 libpng12-0 但仍然无法正常工作:(
我正在使用安装了 libpng12-0 的 Ubuntu 13.04 并且可以正常工作。如果你运行它,你能看到 png 吗? convert -list configure | grep \png
F
FreeNickname

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

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

mogrify -alpha off ./*.png

P
Pointy

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

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


M
McNulty

我需要:-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 将透明像素替换为正确的绿色。


当前 ImageMagick 的正确命令是 convert image.png -background green -alpha background -alpha off green.pngconvert image.png -background green -alpha background -alpha remove green.pngconvert image.png -background green -flatten green.png
t
talsibony

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

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

A
Aquarius Power

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

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

最初在 this post 上找到提示


N
Nick Dowell

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

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

实际上,您提供的链接说:“它实际上并没有删除或破坏附加到图像的 alpha 通道,它只是关闭了通道对图像的任何影响。”要真正删除 alpha 通道,请参阅我的答案。
A
Alex

都试过了,都没有用。这个做了:

convert input.png -channel rgba -alpha set \
            -fill none -opaque white \
            -fill white -opaque black \
            -fill white -opaque none \
            -alpha off output.png

r
railsfanatic

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

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


h
hbere

这对我有用:

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

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

https://i.stack.imgur.com/Ftndd.png

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅