解决gif 透明度问题
背景:
高清gif本身小影已经可以正常导出,随着app需求的迭代,需要支持导出带透明度的gif,支持gif导出透明度过程遇到了一些问题,本文档就详细介绍解决的过程。
实现过程:
我们gif使用调色盘的方式的,所以刚开始我就看下调色盘的内容,发现256色的alpha 都是0xff,这里我就尝试把alpha 改成0,但是这样出现的现象是
显然这种方式不对的,然后我就开始调查下这个黑色边的原因
通过对ffmpeg gif.c相关源码阅读,以及 gif文件格式的分析,发现我上述做法是存在问题的,其实我应该比较原图的alpha位置,然后在调色盘中预留一个颜色表明是背景的,当原图的alpha 小于128表示完全透明的,其位置索引就是调色盘的透明度的索引,代码如下:
C++ |
这样出来的gif图就是带透明度的了
不仅清晰度可以,而且透明度也能很好的保留