ppx icon indicating copy to clipboard operation
ppx copied to clipboard

部分图片无法保存问题及解决办法

Open tangrun opened this issue 3 years ago • 2 comments

代码里获取的几个图片地址包括拼接的那个地址有时候均是webp,导致下载后在本地是webp格式

解决方法也很简单,直接下载原图,是常见的格式直接保存,如果是webp静态图直接BitmapFactory就可以转png输出,webp动图可以用glide的一个webp扩展库解码成一帧一帧的Bitmap,再用glide的gif库生成gif文件输出

webp动图相关 依赖 //gifencoder implementation 'com.github.bumptech.glide:gifencoder-integration:4.9.0' // webpdecoder implementation "com.github.zjupure:webpdecoder:2.3.4.13.2" 代码 Glide glide = Glide.get(this); GifBitmapProvider gifBitmapProvider = new GifBitmapProvider(glide.getBitmapPool(), glide.getArrayPool());

        byte[] bytes = FileIOUtils.readFile2BytesByMap(webpImgFilePath);

        WebpHeaderParser.WebpImageType type = WebpHeaderParser.getType(bytes);
        boolean animatedWebpType = WebpHeaderParser.isAnimatedWebpType(type);

        WebpImage webp = WebpImage.create(bytes);
        ByteBuffer byteBuffer = ByteBuffer.wrap(bytes);
        WebpDecoder webpDecoder = new WebpDecoder(gifBitmapProvider, webp, byteBuffer, 1, WebpFrameCacheStrategy.AUTO);
        
        AnimatedGifEncoder animatedGifEncoder = new AnimatedGifEncoder();
        animatedGifEncoder.start(dir.getAbsolutePath() + File.separator + "test.gif");
        animatedGifEncoder.setRepeat(webpDecoder.getNetscapeLoopCount());

        for (int i = 0,i1 = webpDecoder.getFrameCount(); i < i1; i++) {
            webpDecoder.advance();
            Bitmap bitmap = webpDecoder.getNextFrame();
            int delay = webpDecoder.getNextDelay();
            animatedGifEncoder.setDelay(delay);
            animatedGifEncoder.addFrame(bitmap);
        }

        animatedGifEncoder.finish();
        byteBuffer.clear();
        webpDecoder.clear();

tangrun avatar Dec 24 '22 08:12 tangrun

能打包发一下安装包嘛?

XFiendd avatar Apr 04 '23 04:04 XFiendd

大佬 怎么用的呀?可以帮忙打包个安装包吗

601958483 avatar Nov 18 '23 06:11 601958483