上一篇LZW压缩算法解码器实现中,实现了lzw压缩算法的解码,如果完成那一步,其实gif的解码已经实现大一半了,可以说攻克了技术难点,本文给出gif图像文件的解码器实现,对算法和gif图像有兴趣的同学可以下载下去研究。注:算法需要静下来来慢慢研究,心急气躁,急功近利者就免了,以防走火入魔,:)
声明:jillzhang的gif图像解码器有如下的特点
1) 解码效率很高,高到什么地步,大体上就是说能高到顶尖水平,基本上再改善算法,也不会有数量级上的提升了。举例来说比codeproject上NGif项目的解码器效率至少高200倍以上
2) 解码完全,按照gif的文件格式,能解析出所有的数据段,包括注释扩展块,应用程序扩展块,图形文本扩展块,逻辑屏幕描述等。
3) 将gif文件解析的更加完全,如果你看不懂长达 几千行的其他解码算法,你可以看看这个,看完后,就知道我这个庖丁是如何解牛的了,:)
4) 完全开放源码,而且会在后面的篇幅中逐步说明算法设计原理和实现思路
特别声明:美国Unisys公司申请了此格式所用到核心压缩算法LZW的专利保护,在没有向该公司交纳版税而获得授权的前提下都不能使用GIF格式进行创作和发布.但此项专利已经在2003年6月20号过期了, 而Unisys也没有继续申请专利延期(估计是被骂得太狼狈, 自己也不好意思了)。所以本文研究的Gif图像解码是合法的,但作者仍郑重声明:此实现只用于技术研究,请勿用于商业,否则后果自负。下载使用或者修改必须保留原作者信息:jillzhang,我在实现过程中也参考了NGif中的部分实现,实现代码中也有足够的声明。
本解码器的一些应用:
1) 获取gif的每一帧图像
2) 获取gif图像中的隐藏注释信息
3) 获取gif文件中隐藏的应用程序扩展信息
4) 获取gif文件中隐藏的文本信息
5) 获取gif文件的背景色
6) 获取gif文件的文件头
7) 获取gif背景文件大小
8) 获取gif文件的全局颜色表
解码器项目源文件:
/Files/jillzhang/GifUtility.rar
目前可能出现的问题 :
1) Gif在编码中有两种数据排列方式,顺序方式和交织方式。顺序方式我已经有了比较多的测试,应该不会有问题,而交织方式的gif我一直没有找到,所以还没有来的急测试,可能会有异常,希望有人发现后,反馈给我。