Android utilsGlide学习

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

2017-11-17  本文已影响1698人  vb12

使用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

上一篇下一篇

猜你喜欢

热点阅读