如何下载并保存动画webp的位图?

How to download and save Bitmap of animated webp?

当我将 webp 文件用于动画贴纸包时,它会被拒绝,但如果将相同的文件用于静态贴纸包,则会被排除。查看所有代码后,我才知道这是这些文件出现问题的最后一点。但不知道如何识别 webp 文件在保存后是否保持为动画 webp。请分享您的想法。

ps:我将这些 webp 文件用于 whatsapp 贴纸包。有标志“animated_sticker_pack”。我们必须告诉 whatsapp 这个包只包含具有适当格式的动画 webp。如果我将其设置为 false,则会添加贴纸包(让它成为静态或动画 webp)。但是,如果我将该标志设置为 true,那么那些动画 webp 将因包显示错误而被拒绝 此包有问题...。因此,帧可能比所需的要少。它被接受为静态意味着它可能只有单帧。 为了避免有关文件类型、格式、大小等问题,我使用的是 WhatsApp 示例应用程序中的示例文件

代码:

public static void SaveImage(Bitmap finalBitmap, String name, String identifier) {

        String root = path + "/" + identifier;
        File myDir = new File(root);
        myDir.mkdirs();

        String fname = name;
        File file = new File(myDir, fname);
        
        if (file.exists()){
            file.delete();
        }
        
        try {

            // FileOutputStream 
            FileOutputStream out = new FileOutputStream(file);

            // Bitmap.compress
            finalBitmap.compress(Bitmap.CompressFormat.WEBP, 100, out); 
            
            // close
            out.flush();
            out.close();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
 }

////////////////////Other methods before saving images

private Bitmap downloadImageBitmap(String sUrl, String sIdentifier, String sName) {
    imageFileName = getLastBitFromUrl(sUrl).replace(".png", ".webp");
    identifier = sIdentifier;
    name = sName;
    Bitmap bitmap = null;
    try {
        InputStream inputStream = new URL(sUrl).openStream(); // Download Image from URL
        bitmap = BitmapFactory.decodeStream(inputStream); // Decode Bitmap
        inputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
     return bitmap;
}

@Override
protected Bitmap doInBackground(String... params) {
    return downloadImageBitmap(params[0], params[1], params[2]);
}

protected void onPostExecute(Bitmap result) {
    SaveImage(result, imageFileName, identifier);
}

可以在doInBackground()中下载保存

    InputStream inputStream = new URL(sUrl).openStream(); // Download Image from URL

    FileOutputStream out = new FileOutputStream(file);

然后创建一个循环,从输入流中读取缓冲区中的字节并写入输出流。

完成后不要忘记关闭所有流。