glide格式不完整(丢帧, 压缩出错)的GIF图片解码

https://www.jianshu.com/p/c3a0c64d6954java

 

使用glide显示gif动图时, 报错ios

http://pic.wenwen.soso.com/pqpic/wenwenpic/0/20171116143737-1895154083_gif_398_305_3740344/0git

在浏览器可以打开动图,  可是glide加载时只显示静态图片, 而且log有错误:github

 

Glide: Load failed for http://pic.wenwen.soso.com/pqpic/wenwenpic/0/20171116143738-1327109971_gif_405_293_3665345/0 with size [-2147483648x-2147483648]浏览器

class com.bumptech.glide.load.engine.GlideException: Failed to load resourceide

Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Failed LoadPath{ContentLengthInputStream->GifDrawable->GifDrawable}, REMOTE动画

Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{ContentLengthInputStream->GifDrawable->GifDrawable}code

 

发现这个问题的缘由是由于上面那个gif图片格式不够完整, 只有63帧,  而原始图有95帧, 原始图地址:对象

https://wx2.sinaimg.cn/large/866a67c7gy1fkaw7ewstng20b208hhdx.gif图片

而在浏览器 或者ios系统上都能支持这个图片的动画展现.  说明人家的解码库很健壮.

(同事说即刻的gif解码器是native层的,  听起来很高大上啊)

而glide的解码库  其实就是一个java文件了,  从名字看就好像是说要按照标准的gif格式来.:com.bumptech.glide.gifdecoder.StandardGifDecoder.java

最终解决方案:  只能比照这个解码器, 本身修改一下, 让其兼容格式不完整的gif图片,  而怎么把本身定制的而这个解码器对象, 赋值给glide, 达到替换原始解码器的效果.  为了后面这个事情, 折腾了一下午,  对glide的掌握仍是不够深刻啊.

最终搞定了, 已经放到github上, 目前仍是纯java层的实现, 听说当页面上gif动图显示太多时会有效率问题,后续考虑在native层重写一遍

https://github.com/shaopx/InCompleteGifDecoder

做者:vb12 连接:https://www.jianshu.com/p/c3a0c64d6954 来源:简书 著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。

相关文章
相关标签/搜索