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 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

相關文章
相關標籤/搜索