Secack / ppx

皮皮虾助手
GNU General Public License v3.0
219 stars 32 forks source link

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

Open tangrun opened 1 year ago

tangrun commented 1 year ago

代码里获取的几个图片地址包括拼接的那个地址有时候均是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();
XFiendd commented 1 year ago

能打包发一下安装包嘛?

601958483 commented 10 months ago

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