首页 > 解决方案 > 从 gif / 视频中保存位图

问题描述

我想保存 GIF 文件和视频文件的单个图像(位图)。我想要每个文件的 5 张图片。根据文件的长度(秒),图片要定时拍照,这样就有5张图片。我希望有人可以帮助我,谢谢!

标签: androidvideobitmapsavegif

解决方案


我用 Glide 找到了一个很好的解决方案(对于 gif 文件):

 Glide.with(Activity.this)
                                .asGif()
                                .load(picturePath)
                                .into(new SimpleTarget<GifDrawable>() {
                                    @Override
                                    public void onResourceReady(@NonNull GifDrawable resource, @Nullable Transition<? super GifDrawable> transition) {
                                        try {
                                            Object GifState = resource.getConstantState();
                                            Field frameLoader = GifState.getClass().getDeclaredField("frameLoader");
                                            frameLoader.setAccessible(true);
                                            Object gifFrameLoader = frameLoader.get(GifState);

                                            Field gifDecoder = gifFrameLoader.getClass().getDeclaredField("gifDecoder");
                                            gifDecoder.setAccessible(true);
                                            StandardGifDecoder standardGifDecoder = (StandardGifDecoder) gifDecoder.get(gifFrameLoader);
                                            for (int i = 0; i < standardGifDecoder.getFrameCount(); i++) {

                                                standardGifDecoder.advance();

                                                if (i == 4) {
                                                    bitmap1 = standardGifDecoder.getNextFrame();
                                                } else if (i == standardGifDecoder.getFrameCount() / 3) {
                                                    bitmap2 = standardGifDecoder.getNextFrame();
                                                } else if (i == standardGifDecoder.getFrameCount() / 2) {
                                                    bitmap3 = standardGifDecoder.getNextFrame();
                                                } else if (i == standardGifDecoder.getFrameCount() - 4) {
                                                    bitmap4 = standardGifDecoder.getNextFrame();
                                                }

                                            }

                                        } catch (Exception ex) {
                                            ex.printStackTrace();
                                        }

                                    }
                                });

推荐阅读