当前位置: 首页 > 知识库问答 >
问题:

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

戚育
2023-03-14

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

ps:我正在使用这些webp文件制作whatsapp贴纸包。有“动画贴纸包”的标志。我们必须告诉whatsapp,这个包只包含带有适当fomrat的动画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);
}

共有1个答案

郭彬郁
2023-03-14

您可以下载并保存在doInBackground()中

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

    FileOutputStream out = new FileOutputStream(file);

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

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

 类似资料:
  • 图片下载和存取的简单demo。实现同步和异步两种下载方式。并且将下载好的图片保存在Document,然后进行读取显示。 [Code4App.com]

  • 那么,有没有办法导出所有贴纸或者解密文件呢?

  • 问题内容: http://www.example.com/information.asp我需要获取一个在线文件(例如),并将其保存到目录中。我知道有几种方法可以逐行捕获和读取在线文件(URL),但是有没有一种方法可以使用Java下载和保存文件? 问题答案: 可以使用 Java NIO : 使用是可能不是一个简单的循环从源信道的读取和写入这个频道有效得多。许多操作系统可以直接将字节从源通道传输到文件

  • 有一个联机文件(如)我需要抓取并保存到目录中。我知道有几种方法来抓取和读取在线文件(URL),逐行,但有没有一种方法只是下载和保存文件使用Java?

  • 抱歉,我的英语很差。 我想要确切的位置。并且在活动/片段被销毁后(不管是我销毁它还是系统销毁它),我重新打开活动/片段,< code > recycle view 也可以在它被销毁的相同位置。 “相同”并不意味着“项目位置”,因为项目可能只是上次显示的一部分。 我想恢复完全相同的位置。 我尝试了下面的一些方法,但没有人是完美的。 有人可以帮忙吗? 1.First方式。 我使用< code>onSc

  • 我创建了一个简单的应用程序,裁剪图像。现在我想保存这个图像到消防基地。 如何将此图像保存到Firebase。我尝试了很多教程,但都没有成功。请用简单的代码验证。