使用 Fresco 时如何将图像保存到 SD 卡?

Posted

技术标签:

【中文标题】使用 Fresco 时如何将图像保存到 SD 卡?【英文标题】:How to save image to sdcard when using Fresco? 【发布时间】:2015-06-10 08:53:55 【问题描述】:

我正在使用Fresco 在我的应用程序中下载和显示 Gif。我想在单击时将图像保存到 sdcard,但我不知道该怎么做。

final View view = inflater.inflate(R.layout.fragment_gif_viewer, container, false);
SimpleDraweeView draweeView = (SimpleDraweeView) view.findViewById(R.id.image);
Uri uri = Uri.parse(imageUrl);
DraweeController controller = Fresco.newDraweeControllerBuilder()
        .setUri(uri)
        .setAutoPlayAnimations(true)
        .build();
draweeView.setController(controller);

draweeView.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View v) 
        // Save the gif to /sdcard/test.gif
    
);

我尝试按照How do I save an ImageView as an image?的指令从SimpleDraweeView中获取位图,但是getDrawingCache()返回null

【问题讨论】:

【参考方案1】:

你可以这样做

ImageRequest downloadRequest = ImageRequest.fromUri(uri);
CacheKey cacheKey = DefaultCacheKeyFactory.getInstance().getEncodedCacheKey(downloadRequest);
if (ImagePipelineFactory.getInstance().getMainDiskStorageCache().hasKey(cacheKey)) 
    BinaryResource resource = ImagePipelineFactory.getInstance().getMainDiskStorageCache().getResource(cacheKey);
    File cacheFile = ((FileBinaryResource) resource).getFile();
    FileInputStream fis = new FileInputStream(cacheFile);
    ImageFormat imageFormat = ImageFormatChecker.getImageFormat(fis);
    switch (imageFormat) 
        case GIF:
        //copy cacheFile to sdcard
        break;
    

【讨论】:

你测试过这个答案吗?它因空指针异常而失败 它适用于我的项目。确保在磁盘缓存中获取此 GIF。 API 已更改,您应该使用getMainFileCache() 而不是getMainDiskStorageCache()。这将返回整个缓存。但是,这将为您提供 Fresco 缓存中存储的文件,而不是您可以显示的文件。【参考方案2】:

您可以use the image pipeline directly 从磁盘缓存中提取您的 GIF。

然后你可以使用Java File方法将它写入文件系统。

【讨论】:

我知道如何使用图像管道来保存png等静态图片。但是当涉及到gif时,它就不同了。 正如艾伦所说,gif 被视为“动画”,因此无法以相同的方式提取它们。

以上是关于使用 Fresco 时如何将图像保存到 SD 卡?的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像正确保存到 SD 卡?

如何将可绘制资源中的图像保存到 SD 卡?

将图像、音频和视频保存到 SD 卡

从android寻呼机将图像保存到sd卡

Android - 将图像从 URL 保存到 SD 卡

将位图从 arraylist 保存到 SD 卡 - 保存的文件不可读