使用ImageMagick /转换创建半透明的PNG

问题描述 投票:8回答:3

我有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)

image imagemagick png transparency imagemagick-convert
3个回答
13
投票

已找到解决方法:

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

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

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


6
投票
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。


0
投票

[对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

© www.soinside.com 2019 - 2024. All rights reserved.