android使用多張圖片合成gif文件

以前有遇到過一個要用多張圖片合成gif圖的場景,當時是搜索了很久,也沒有發現有相關的使用記錄。後來找到了實現方式,特此記錄。
使用了Github上該project:android-gif-encoder,代碼連接見頁尾。java

主要代碼以下:android

/**
 * 生成gif圖
 *
 * @param file_name 保存文件名
 * @param delay     幀之間間隔的時間
 */
private void createGif(String file_name, int delay) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    AnimatedGifEncoder localAnimatedGifEncoder = new AnimatedGifEncoder();
    localAnimatedGifEncoder.start(baos);//start
    localAnimatedGifEncoder.setRepeat(0);//設置生成gif的開始播放時間。0爲當即開始播放
    localAnimatedGifEncoder.setDelay(delay);
    if (pics.isEmpty()) {
        localAnimatedGifEncoder.addFrame(BitmapFactory.decodeResource(getResources(), R.drawable.pic_1));
        localAnimatedGifEncoder.addFrame(BitmapFactory.decodeResource(getResources(), R.drawable.pic_2));
        localAnimatedGifEncoder.addFrame(BitmapFactory.decodeResource(getResources(), R.drawable.pic_3));
    } else {
        for (int i = 0; i < pics.size(); i++) {
            // Bitmap localBitmap = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(pics.get(i)), 512, 512);
            localAnimatedGifEncoder.addFrame(BitmapFactory.decodeFile(pics.get(i)));
        }
    }
    localAnimatedGifEncoder.finish();//finish

    File file = new File(Environment.getExternalStorageDirectory().getPath() + "/GIFMakerDemo");
    if (!file.exists()) file.mkdir();
    String path = Environment.getExternalStorageDirectory().getPath() + "/GIFMakerDemo/" + file_name + ".gif";
    Log.d(TAG, "createGif: ---->" + path);

    try {
        FileOutputStream fos = new FileOutputStream(path);
        baos.writeTo(fos);
        baos.flush();
        fos.flush();
        baos.close();
        fos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

    gif_image.setImageURI(Uri.parse(path));
    Toast.makeText(MainActivity.this, "Gif已生成。保存路徑:\n" + path, Toast.LENGTH_LONG).show();
}

須要源碼的同窗看這裏git

相關文章
相關標籤/搜索