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

我的未来我决定 提交于 2020-01-06 15:23:27

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

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

 

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

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

在浏览器能够打开动图,  但是glide加载时只显示静态图片, 并且log有错误:

 

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 resource

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}

 

发现这个问题的原因是因为上面那个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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!