多张图片生成gif图

之前项目要求把png图片合成gif的,在网上找的方法。仅当笔记记录,没备注,大佬勿喷。
private IdentityHashMap pics = new IdentityHashMap();

/**
     * 生成gif图
     *
     * @param file_name 保存文件名
     * @param delay     帧之间间隔的时间
     */
    private void createGif(String file_name, int delay) {
        Bitmap b1 = BitmapUtils.getBitmap(this, "15/1");
        Bitmap b2 = BitmapUtils.getBitmap(this, "15/2");
        Bitmap b3 = BitmapUtils.getBitmap(this, "15/3");
        Bitmap b4 = BitmapUtils.getBitmap(this, "15/4");
        Bitmap b5 = BitmapUtils.getBitmap(this, "15/5");
        Bitmap b6 = BitmapUtils.getBitmap(this, "15/6");
        Bitmap b7 = BitmapUtils.getBitmap(this, "33/7");
        Bitmap b8 = BitmapUtils.getBitmap(this, "33/8");
        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(b1);
            localAnimatedGifEncoder.addFrame(b2);
            localAnimatedGifEncoder.addFrame(b3);
            localAnimatedGifEncoder.addFrame(b4);
            localAnimatedGifEncoder.addFrame(b5);
            localAnimatedGifEncoder.addFrame(b6);
//            localAnimatedGifEncoder.addFrame(b7);
//            localAnimatedGifEncoder.addFrame(b8);
        } else {
            for (int i = 0; i < pics.size(); i++) {
                // Bitmap localBitmap = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(pics.get(i)), 512, 512);
                localAnimatedGifEncoder.addFrame(BitmapFactory.decodeFile((String) 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();
            LogUtils.e("Gif已保存:");
        } catch (IOException e) {
            e.printStackTrace();
            LogUtils.e("Gif保存失败" + e);
        }

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

猜你喜欢

转载自blog.csdn.net/weixin_41771564/article/details/82691852
今日推荐