ImageMagick - 设置透明带 AlphaChannel 的 png 图片的透明度

Posted 沙的空间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ImageMagick - 设置透明带 AlphaChannel 的 png 图片的透明度相关的知识,希望对你有一定的参考价值。

学习和使用ImageMagick也有几年时间了,其实对 ImageMagick 的了解还仅仅是皮毛吧。

最近在写代码的时候,遇到一个调整透明png图片透明度的问题:

当1张png图片,有些区域是透明的,我平时调整图片透明度使用的是:MagickSetImageOpacity(),可对透明背景的png,怎么调也没效果。

后来实在没办法,我找了两个替换方案:

方案1. 删除alpha通道: MagickSetImageAlphaChannel(mw_current, RemoveAlphaChannel); 然后再 MagickSetImageOpacity()

方案2. 给当前的png透明图片加一个白色背景,然后再 MagickSetImageOpacity()

可是很明显,这两个方案处理结果就是,虽然png透明度能调整了,但是生成的图片背景不透明了。

 

我今天用ps尝试了一下,可以正常的调整一个透明的png图片的透明度。

我想,ps能做到, imagemagick也能办到,继续网上搜索,终于找到一个函数: MagickEvaluateImage(mw_current, MultiplyEvaluateOperator, opacity);

根据网上的提示,在处理 png 透明图片的透明度时,必须使用 MagickEvaluateImage,用 MagickSetImageOpacity 没用!

不过,MagickEvaluateImage 第2个参数有很多选择,我花了几分钟时间才找到合适的参数:MultiplyEvaluateOperator,这个就是用来调整透明度的。

 

到此为止,终于找到答案。

以上是关于ImageMagick - 设置透明带 AlphaChannel 的 png 图片的透明度的主要内容,如果未能解决你的问题,请参考以下文章

Imagemagick:删除alpha分量(用实心像素替换所有中间alpha像素)

带alpha透明通道视频—网页播放带alpha通道视频叠加合成方案

win32: 制作带ALPHA通道的bmp,添加到静态文本控件上,达到背景透明效果

UE4带Alpha通道透明效果贴图的相关问题

在 Win32 中显示带 alpha 通道的 32 位图像

Premiere 2.0 alpha道的问题