我有一些透明的 PNG 图像,我需要创建将图像层组合到白色背景上的版本。我用 Image Magick“转换”操作尝试了各种方法,但要么什么都没有发生,要么我得到一个错误。我不想使用中间 JPG 表格,因为我不想要这些工件。当然,在 Gimp 或 Photoshop 或其他任何东西中很容易做到这一点,但我真的更愿意从命令行编写脚本,因为有很多这样的东西。
一个不工作的 Image Magick 命令的例子是:
convert img1.png -background white -flatten img1-white.png
这会导致错误。
谢谢!
-background white -alpha remove -alpha off
例子:
convert image.png -background white -alpha remove -alpha off white.png
随意将 white
替换为您想要的任何其他颜色。 Imagemagick 文档说明了 -alpha remove
操作:
此操作简单快速,无需任何额外的内存使用或其他可能与替代透明度去除技术相关的副作用即可完成这项工作。因此,它是去除图像透明度的首选方式。
这对我有用:
convert -flatten img1.png img1-white.png
文档参考:
-flatten 命令行选项
-layers 命令行选项(-flatten 等效于 -layers flatten)
-flatten
转换多页文档。它将页面拼合为一页。
mogrify -flatten *.png
以防万一,不要忘记进行备份。更多信息:imagemagick.org/script/mogrify.php
在 ImageMagick 中展平图像和应用背景图像非常简单
但是,命令的顺序非常重要
要在透明图像上应用任何背景并将其展平,请先应用背景而不是展平它。反过来不行。
$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png
唯一对我有用的是所有答案的混合:
convert in.png -background white -alpha remove -flatten -alpha off out.png
... -background "#010203" ...
而不是白色。
mogrify -background white -flatten */*.png
-alpha remove
为我做了什么
以下是如何用白色而不是透明替换目录中所有文件夹中的相同图像:
mogrify -background white -flatten */*.png
使用 -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
ImageMagick Usage Guide 的 Alpha 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
技术仍会生成多个图像,每个图像都已移除透明度。
看来您的命令是正确的,因此问题可能是由于缺少对 PNG () 的支持。您可以使用 convert -list configure
检查或尝试以下操作:
sudo yum install libpng libpng-devel
libpng12-0
的 Ubuntu 13.04 并且可以正常工作。如果你运行它,你能看到 png 吗? convert -list configure | grep \png
这不完全是您问题的答案,但我在试图弄清楚如何删除 alpha 通道时发现了您的问题,所以我决定在这里添加这个答案:
如果要使用 imagemagick 删除 alpha 通道,可以使用以下命令:
mogrify -alpha off ./*.png
看起来我决定在“图像魔法”上安装“图形魔法”有一些粗糙的边缘 - 当我重新安装真正的粗糙的旧“图像魔法”时,上面的命令工作得很好。
编辑,很久以后 - 这些天我会检查“图形魔术师”是否解决了这个问题。
我需要:-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
将透明像素替换为正确的绿色。
convert image.png -background green -alpha background -alpha off green.png
或 convert image.png -background green -alpha background -alpha remove green.png
或 convert image.png -background green -flatten green.png
我看到这个问题和答案确实对我有帮助,但后来我需要为很多文件做这件事,所以如果你在一个文件夹中有多个图像(PNG图像)并且你想为所有人做这件事:
find ./ -name "*.png" -exec convert {} -flatten {} \;
这会创建一个图像,只是将第一个透明的图像放在第二个的顶部
composite -gravity center ImgWithTransp.png BackgroundSameSizeOfImg.png ResultImg.png
最初在 this post 上找到提示
要实际从文件中删除 Alpha 通道,请使用 alpha off 选项:
convert in.png -background white -alpha off out.png
都试过了,都没有用。这个做了:
convert input.png -channel rgba -alpha set \
-fill none -opaque white \
-fill white -opaque black \
-fill white -opaque none \
-alpha off output.png
它是 -alpha 关闭,而不是 -alpha 删除!当任何图标中有 alpha 通道时,iOS 应用商店上传失败!!
操作方法如下: mogrify -alpha off *.png
这对我有用:
magick convert OLD.png -background white -alpha remove NEW.png
这是一个带有透明背景的初始图像,以防它有助于测试:
https://i.stack.imgur.com/Ftndd.png
此外,对于 PC 上的一次性,您始终可以在 Windows Paint 中打开 PNG 文件,然后单击保存。这将自动将透明度变为不透明的白色。
不定期副业成功案例分享
-background white
(虽然它可能是其他颜色)。-alpha off
。convert image.png -background white -alpha off white.png
生成了一张黑色背景的图片。convert image.png -background "#00ff33" -alpha off 00ff33.png
产生黑色背景