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 { ArrayListlist = 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; }
好了大概就是上面写的,很简单代码,希望对有这个业务需求的人一点帮助