在Centos Linux上使用ImageMagick创建半透明PNG

use*_*835 7 png transparency image imagemagick imagemagick-convert

我有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.
Run Code Online (Sandbox Code Playgroud)

第二个建议的方法是这样的:

convert filename.png -fill '#00000080' -draw 'matte 100,100 reset' output.png
Run Code Online (Sandbox Code Playgroud)

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

ImageMagick版本是6.8.0-4.

use*_*835 13

已找到解决方案:

convert input.png -alpha set -channel A -evaluate set 50% output.png
Run Code Online (Sandbox Code Playgroud)

上面的命令使整个图像(所有颜色)半透明.

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

  • 如果你想让它独立于原始图像(也只是所有像素的透明度的两倍),你也可以使用`-evaluate Divide 2`. (9认同)
  • 这种方法的问题在于,如果图像中已经有完全透明的像素,它们的透明度似乎也会发生变化,使它们变成半透明的黑色:(任何想法? (6认同)

Tal*_*tle 5

convert input.png -alpha set -channel A -evaluate Divide 2 output.png
Run Code Online (Sandbox Code Playgroud)

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

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