hi,大家好:
好久沒有和大家見面了,因爲各方面原因好久沒有更新blog,不過接下來我可能會有更多的時間來寫blog,希望可以給 大家帶來一些有用的知識點,可以幫助大家。
今天要介紹的是我們經常使用到的gif圖片的每幀解析,即給一個gif文件,可以在android代碼種獲取gif的總幀數信息及每幀圖片。
下面就實現一個解析一張gif圖片,獲取每張圖片的bitmap
因爲gif如果要自身實現解析可能稍微困難一些,而且穩定性等也不一定好,所以我們採用github評分最高的一個開源庫android-gif-drawable實現
使用開源庫:android-gif-drawable
網上介紹這個開源庫的文章其實大部分都停留在怎麼使用它來直接在ImageView這控件進行動畫顯示就ok,幾乎沒有寫怎麼使用android-gif-drawable來解析出gif文件的每一幀圖片的文章。那如果我們真的有這個想獲取每幀圖片獲取其中的若干幀呢?
1、首先在我們的gradle文件種引入這個第三方庫:
'pl.droidsonroids.gif:android-gif-drawable:1.2.12'
2、寫一個GifUtil類
主要分爲2步,
第一步獲取gif文件含有的總幀數 :使用GifDrawable 的getNumberOfFrames();既可以獲取gif的總幀數
第二步在獲取gif總幀數後,如果我們要獲取gif某一幀的Bitmap:使用GifDrawble 的seekToFrameAndGet(index)方法,index就是
需要獲取的第多少幀的index
有了以上2個方法,我們是不是就可以很快的獲取gif具體某一幀的Bitmap了啊
貼代碼:
package com.android.unokiwi.util; import android.content.Context; import android.graphics.Bitmap; import android.util.Log; import java.util.ArrayList; import java.util.HashMap; import pl.droidsonroids.gif.GifDrawable; /** * Created by Administrator on 2018/7/8. */
public static Bitmap getBitmapArrayByGif(Context context, String assertPath, int index) { try { ArrayList<Bitmap> list = new ArrayList<>(); GifDrawable gifFromAssets = new GifDrawable(context.getAssets(), assertPath);//代表android中assert的gif文件名 int totalCount = gifFromAssets.getNumberOfFrames(); if (totalCount < index) { index = totalCount - 1; } return gifFromAssets.seekToFrameAndGet(index); } catch (Exception e) { return null; }
好了大概就是上面寫的,很簡單代碼,希望對有這個業務需求的人一點幫助
歡迎大家轉載,你的鼓勵,纔會讓我給大家越來越多的乾貨內容