使用 ImageMagick/convert 创建半透明 PNG

Posted

技术标签:

【中文标题】使用 ImageMagick/convert 创建半透明 PNG【英文标题】:Creating a semi-transparent PNG with ImageMagick/convert 【发布时间】:2012-11-02 05:00:00 【问题描述】:

我有 PNG 文件,我想将整个图像转换为半透明。

图像将在 KML 文件中作为图标叠加层引用,以便在 Google 地球/地图中使用。

使用 ImageMagick convert 命令向我建议了以下示例,但似乎都不起作用。

第一个例子导致错误,

$ /usr/local/bin/convert 121112142121.png -channel Alpha -evaluate Set 50% 2121112142121.png
convert: no decode delegate for this image format '121112142121.png' @ error/constitute.c/ReadImage/550.
convert: option requires an argument '-evaluate' @ error/convert.c/ConvertImageCommand/1400.

第二个未能对图像进行任何可观察到的更改:

convert filename.png -fill '#00000080' -draw 'matte 100,100 reset' output.png

虽然我可以在网上找到许多使用特定颜色或 alpha 蒙版创建完全透明图像的示例,但我似乎找不到任何可用于创建半透明图像或更改不透明度的示例。我想找到一种使用 convert 命令或 ImageMagick Perl 的方法。

(ImageMagick 版本为 6.8.0-4)

【问题讨论】:

【参考方案1】:

已找到解决方法:

convert input.png -alpha set -channel A -evaluate set 50% output.png

上述命令使整个图像(所有颜色)半透明。

我遇到的另一个问题是,最新版本的 ImageMagick 是从源代码编译的,没有安装所有最新的图像库(特别是 libpng)。如果从源代码编译,请密切注意 configure 的输出以确保找到 libpng。看起来早于 6.6 的 ImageMagick 版本和/或更早版本的 libpng 可能不支持透明 png 生成。

【讨论】:

如果你想让它独立于原始图像,也可以使用-evaluate Divide 2(只需将所有像素的透明度加倍)。 这种方法的问题是,如果图像中已经有完全透明的像素,它们的透明度似乎也会发生变化,使它们变成半透明的黑色:(有什么想法吗?【参考方案2】:
convert input.png -alpha set -channel A -evaluate Divide 2 output.png

感谢@caw 在您的评论中指出这一点。这有助于图像已经具有一些透明像素的情况。 -evaluate set 50% 破坏了 alpha 为 0 的已透明像素,将其 alpha 设置为 50%,这通常是不可取的。

-evaluate Divide 2 保留 alpha,因为完全透明的像素是 alpha 0,而 0 除以 2 仍然是 0。

【讨论】:

我发现除非我添加-matte标志,否则图像会像素化。【参考方案3】:

跟进 Tony Bogdanov 的评论。如果您已经拥有完全透明的像素,您可能需要使用以下策略:

1.) 将透明像素转换为遮罩

convert -alpha extract input.png mask.png

2.) 执行上面答案中列出的命令:

convert input.png -alpha on -channel a -evaluate set 65% output.png

3.) 创建一个与原始图像大小相同的空白画布

示例:convert -size 700x800 xc:none blankcanvas.png

4.) 使用透明像素蒙版将半透明图像和空白画布合成在一起

composite output.png blankcanvas.png mask.png -compose Src final_output.png

【讨论】:

以上是关于使用 ImageMagick/convert 创建半透明 PNG的主要内容,如果未能解决你的问题,请参考以下文章

ImageMagick convert 中的 sample/resample/scale/resize/adaptive-resize/thumbnail 运算符有啥区别?

Imagemagick 与 Meteor 集成

使用 imagemagick 无损旋转 PDF 文件

ImageMagick:转换、裁剪、调整大图像

使用alpha将8位PNG转换为32位

在 linux 上修复几千个文件名