首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Fresco -如何将图像保存到本地存储

Fresco是Facebook开发的一款强大的Android图片加载库,它提供了高效的图片加载和显示功能,并且具有内存管理、缓存、渐进式加载、动画等多种特性。

要将图像保存到本地存储,可以使用Fresco提供的ImagePipeline功能。下面是保存图像到本地存储的步骤:

  1. 首先,确保已经在项目中集成了Fresco库。可以参考Fresco的官方文档(https://frescolib.org/docs/index.html)了解如何集成Fresco。
  2. 加载图像:使用Fresco的ImagePipeline加载要保存的图像。可以使用以下代码加载图像:
代码语言:txt
复制
Uri imageUri = Uri.parse("https://example.com/image.jpg");
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(imageUri)
        .setProgressiveRenderingEnabled(true)
        .build();
DataSource<CloseableReference<CloseableImage>> dataSource = Fresco.getImagePipeline()
        .fetchDecodedImage(request, context);
  1. 保存图像:一旦图像加载完成,可以将其保存到本地存储。可以使用以下代码保存图像:
代码语言:txt
复制
dataSource.subscribe(new BaseBitmapDataSubscriber() {
    @Override
    protected void onNewResultImpl(Bitmap bitmap) {
        // 保存图像到本地存储
        File file = new File(context.getFilesDir(), "image.jpg");
        try {
            FileOutputStream outputStream = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onFailureImpl(DataSource<CloseableReference<CloseableImage>> dataSource) {
        // 图像加载失败
    }
});

在上述代码中,我们将图像保存为JPEG格式,并将其压缩质量设置为100。你可以根据需要选择不同的压缩格式和质量。

需要注意的是,保存图像到本地存储需要获取适当的文件写入权限。在AndroidManifest.xml文件中添加以下权限声明:

代码语言:txt
复制
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

以上是使用Fresco将图像保存到本地存储的步骤。通过使用Fresco的强大功能,我们可以轻松地加载、显示和保存图像,提供了更好的用户体验。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

微信小程序如何将文件保存到本地

最近在做兔兔答题时,涉及到将文件保存到微信本地,这里的本地是指微信文件助手或者微信好友,是直接分享文件而不是做微信分享好友的形式。在微信开放社区中,也有不少关于该话题的帖子。...如果你设置为false,当文件进行预览时,右上角是不会显示功能菜单,也就是说你没法把文件进行保存到本地。当你开启时,将是如下效果。...右上角有三个点,当你点击三个点就会弹窗转发好友的选项,你直接点击转发好友就可以保存到文件助手或者你的微信好友了。注意事项这个功能看起来,体验性就不是很强。但也是目前为止,能够解决的方案。...2、在调用uni.openDocument()函数时,filePath一定是小程序内本地文件地址,你也可以通过其他的函数下载文件来获取本地文件地址,也可以使用文章中的这个函数。...关于微信小程序如何将文件保存到本地的解决方案就算完成啦,希望这篇文章的分享对你有所帮助。

76300
  • Fresco(一)Fresco的使用介绍

    fresco:roundedCornerRadius="1dp" fresco:roundTopLeft="true" fresco:roundTopRight="false" fresco...如果这些图像都是不同的尺寸,那么很难定义”intrinsic”尺寸。...总结:SimpleDraweeView 的配置主要在 GenericDraweeHierarchy(所有图层,包括占位图) 和 DraweeController(定制要显示的图片) 里面 (4)加载图像之...Process.THREAD_PRIORITY_BACKGROUND, "FrescoLightWeightBackgroundExecutor", true)); } } 简单介绍一下 mIoBoundExecutor---io线程池,用于磁盘操作,本地文件的读取...如有,解码,变换,返回,然后缓存到内存缓存中。 检查是否在磁盘缓存中,如果有,变换,返回。缓存到未解码缓存和内存缓存中。 从网络或者本地加载。加载完成后,解码,变换,返回。存到各个缓存中。

    1.5K30

    Fresco急速入门及最最最简单使用教程,是时候来了解Fresco了!

    在本教程中,您将学习如何使用fresco android图像库。 Fresco是由Facebook开发人员创建的图像库,可用于显示来自互联网或本地存储图像。...如果你想创建一个从互联网上加载大量图像的应用程序,那么这个库是最好的选择。它是其他Android图像库 Picasso 和 Grild 的绝佳替代品。...---- Fresco Android教程 使用包名com.frescoandroid创建一个android studio项目  。...implementation 'com.facebook.fresco:fresco:1.13.0' 注意: 如果要显示gif或WebP,则需要包含更多依赖项。...在这里,我还使用了占位符图像,它将一直显示,直到从互联网上下载图像。确保将占位符图像放在可绘制文件夹中。

    1.1K20

    Android图片加载开源库深度推荐,安利Fresco1、Universal-Image-Loader2、Picasso3、Glide4、Fresco

    挺好的啊~这·····因为某次我要把通过图片URL拿本地缓存的时候,我居然找不到同步获取的方法(ノಠ益ಠ)ノ彡┻━┻,除了异步的回调之外,我居然找不到····而且听说Fresco对GIF和webp支持更好...= null) { frescoImageView.setResize(showSize); } } 2、 fresco-processors 这个库做对图像的二次处理,继承于Postprocessor...的本地缓存 if (file !...因为这种类似的内存释放不及时,多跳转几个页面很不幸你就会有OOM的可能,这中问题主要是在于设置背景,一般的loading和fail的图片都不会很大(要那么大干嘛,UI你是要打架吗( ‵o′)凸),我们选择是把图片保存到...SD卡之后,加载本地图片资源,这样可以友好的释放背景大图了。

    1.5K20

    Android 开发 - 网络图片加载库 Fresco 的使用。

    Fresco 中设计有一个叫做 image pipeline 的模块。它负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级文件)。...一般情况下,使用SimpleDraweeView 即可 ImageRequest ImageRequest存储着Image Pipeline处理被请求图片所需要的有用信息(Uri、是否渐进式图片、是否返回缩略图...Fresco的对 布局宽高的要求 你必须声明 android:layout_width 和 android:layout_height。 如果没有在XML中声明这两个属性,将无法正确加载图像。...这么做是有理由的: 所下载的图像可能和占位图尺寸不一致,如果设置出错图或者重试图的话,这些图的尺寸也可能和所下载的图尺寸不一致。...如果大小不一致,假设使用的是 wrap_content,图像下载完之后,View将会重新layout,改变大小和位置。这将会导致界面跳跃。

    1.9K00

    实用的 Android 开源库整理

    Fresco Fresco是非常强大的显示图像的开源库,它能够很好的处理图像的加载和显示。...能够加载网络、本地数据库、本地资源中的图像,在图像加载出来之前,还能够预先设置一个预设的图像占位符,有二级缓存(内存和硬盘缓存) dependencies { // your app's other...dependencies compile 'com.facebook.fresco:fresco:1.0.1' } 另外Fresco还提供了一些其他的开源库支持 Gif,WebP等 dependencies...dagger-compiler:2.x' } GreenDao GreenDao是一个开源的Android ORM框架,更好的操作SQlite,提供友好的接口操作底层数据库的操作 Realm 简单快速的存储...Timber Timber是一个开源的log框架 compile 'com.jakewharton.timber:timber:4.5.1' Androig GPU Image 提供了基于 OpenGL的图像滤镜框架

    70210

    Glide三问—虾皮真题

    减少系统回收压力) 高效的缓存策略,灵活(Picasso只会缓存原始尺寸的图片,Glide缓存的是多种规格),加载速度快且内存开销小(默认Bitmap格式的不同,使得内存开销是Picasso的一半) Fresco...在5.0以下系统,Fresco将图片放到一个特别的内存区域(Ashmem区) 大大减少OOM(在更底层的Native层对OOM进行处理,图片将不再占用App的内存) 适用于需要高性能加载大量图片的场景...网络,即从网络获取图片数据,并加载 首次加载数据,通过网络获取图片对象,保存到内存和硬盘中,下次读取数据,会先从内存获取,没有的话就从本地硬盘加载,都没有的话就从网络获取资源。...), new MainThreadCallback()); 缓存 就是刚才上面说到的三级缓存,用于缓存图片 防止oom 1)缓存处理,比如LruCache中缓存大小的设置 2)软引用,缓存中尽量存储软引用...,当内存不足时会自动被GC 3)bitmap像素数据存储,ndroid3.0到8.0之间Bitmap像素数据存在Java堆,而8.0之后像素数据存到native堆中 onLowMemory 当内存不足时

    73330

    Fresco 4.X和5.X内存分析

    两年前部落项目接入Fresco的时候,那时候主流机型还是4.X。Fresco在4.X的机器的内存性能很好,Bitmap存在Ashmem(匿名共享内存)层里面的,对应用的内存缓存的压力不大。...4.X系统的Fresco ? 安卓系统的Ashmem层这里不做过多介绍,我们来看下缓存到Ashmem最后一个JAVA函数。...inPurgeable这个属性标识这个Bitmap是否是可清除的,设置为true之后,该系统会自动把Bitmap存储在Ashmem中, 当系统存储不足的时候会被回收,等到需要的时候,会在主线程重新进行解码...Fresco需要自己进行这块内存的管理。...mExclusiveEntries和mCacheEntries都是基础Lru策略进行存储管理,mExclusiveEntries这块存储是用来缓存没有被使用等待回收的Bitmap内存的,也就是说,如果一个

    1.3K80

    【Android从零单排系列九】《Android视图控件——ImageView》

    ImageLoader:旨在为图像加载,缓存和显示提供强大,灵活可定制的工具。...他提供了大量的配置选项和良好的控制图像加载和缓存过程。...Fresco:最大的又是在于5.0以下(最低2.3)的Bitmap加载。在5.0以下系统,Fresco将图片放到一个特别的内存区域(Ashmem区)。当然,在图片不显示的时候,占用的内存会自动被释放。...因为在5.0系统以后系统默认就是存储在Ashmem区了。...优点: 1.图片存储在安卓系统的匿名共享内存,而不是虚拟机的堆内存中,图片的中间缓冲数据也存放在本地堆内存,所以,应用程序有更多的内存使用,不会因为图片加载而导致oom,同时也减少垃圾回收器频繁回收Bitmap

    1.2K30

    Android项目实战(三十):Fresco加载gif图片并播放

    ,官方网址:http://www.fresco-cn.org/  ,中文文档,很方便查阅 看下官方的描述: Fresco 是一个强大的图片加载组件。...Fresco 中设计有一个叫做 image pipeline 的模块。它负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级文件)。...,这里具体获取网络gif图片并展示的Demo,加载本地的gif图片 可以不加网络权限 注意:SimpleDraweeView 不支持wrap_content 所下载的图像可能和占位图尺寸不一致...如果大小不一致,图像下载完之后,假设如果是wrap_content,View将会重新layout,改变大小和位置。这将会导致界面跳跃。

    2.3K80

    从零开始撸一个Fresco之gif和Webp动画

    上一篇文章的链接:从零开始撸一个Fresco之硬盘缓存 转载请注明出处 Fresco源代码文档翻译项目请看这里:Fresco源代码翻译项目 这个项目会不断更新想学习Fresco源代码的同学一定不要错过...2.imageFormat:这个包用于检测EcodingImage类中的数据是什么类型的图像数据。 3.imageInfo:用于储存图片的简单信息和图片目前的质量。...7.imagepipeline: 1.memory:NativeMemoryChunk是本地内存块的java封装,用于提供一块本地内存,这里的本地内存使用jni代码管理。...所以Fresco当然使用了这个方式以提供Byte数组池。具体封装了jni管理的本地内存的类是imagePipline.memory包下的NativeMemoryChunk类。...这个接口可以让Drwable对View显示的图像进行调度。AnimatedDrawable就是通过这个机制实现动画的。

    1.8K90

    WebP原理和Android支持现状介绍

    的视频缩略图采用WebP后,网页加载速度提升了10%;谷歌网上应用商店采用WebP后,每天可节省几TB的带宽,页面平均加载时间大约减少1/3;谷歌移动应用市场采用WebP图片格式后,每天节省了50TB的存储空间...之所以转换成YUV格式是因为人类视觉对亮度远比色度敏感,所以可通过适当减少色度数据的存储来节省数据占用的空间,但却不会对视觉效果造成太大影响,如可每两个或四个相邻的像素点才保存一对UV值。...VP8比特流格式的定义可参考rfc6386,主要定义了如何将图像数据转换成YUV格式。...Background Color: 定义画布的背景颜色,以BGRA的顺序存储。这个颜色会被填充到每帧数据没用到的区域。 LoopCount:循环次数,0表示无限循环。...对其支持,不过Fresco最低仅支持API 9,且引用的相关库较多。

    4.5K80

    Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide图片缓存库的联系与区别

    其他:Fresco 中设计有一个叫做 image pipeline 的模块。它负责从网络,从本地文件系统,本地资源加载图片。...Fresco 中设计有一个叫做 Drawees 模块,方便地显示loading图,当图片不再显示在屏幕上时,及时地释放内存和空间占用。...Fresco 在低端机器上表现一样出色,你再也不用因图片内存占用而思前想后。此外,Android 本身的图片库不支持此格式,但是Fresco支持。...Glide加载图像以及磁盘缓存的方式都要优于Picasso,速度更快,并且Glide更有利于减少OutOfMemoryError的发生,GIF动画是Glide的杀手锏。...Volley ImageLoader:Google官方出品,可惜不能加载本地图片~ Fresco:Facebook出的,天生骄傲!不是一般的强大。

    1.3K70

    基于开源项目搭建属于自己的技术堆栈

    再者,Logger 只支持输出日志到 Logcat,但项目开发中往往还存在将日志保存到磁盘上的需求,如何将两者结合起来呢?这是就遇到了 timber 。...用法简单:相比 Core Data 和 SQLite 所需的入门知识,Realm 可以极大降低开发者的学习成本,快速实现数据库存储功能。...okio 使得开发者可以更好地访问、存储和处理数据。一开始是作为 OkHttp 的一个组件存在的,当然我们也可以单独使用它。...在 adapter 中正常的处理 ImageView 回收和下载的取消 使用尽量小的内存实现复杂的图像变换 在 Picasso 中,我们使用一行代码即可实现图片下载并渲染到 ImageView 中。...对于一般的 APP,选择 Fresco 会显得比较重,毕竟 Fresco 3.4MB 的体量摆在这。

    1.9K70

    如何设计一个图片加载框架

    梳理一下必要的图片加载框架的需求: 异步加载:线程池 切换线程:Handler,没有争议吧 缓存:LruCache、DiskLruCache 防止OOM:软引用、LruCache、图片压缩、Bitmap像素存储位置...虚拟机的内存划分主要有5部分: 虚拟机栈 本地方法栈 程序计数器 方法区 堆 对象的分配一般都是在堆中,堆是JVM中最大的一块内存,OOM一般都是发生在堆中。...Android 3.0到8.0 之间Bitmap像素数据存在Java堆,而8.0之后像素数据存到native堆中 主要两个步骤: 1.申请内存,创建native层Bitmap,native层的Bitmap...)系统,Fresco将图片放到一个特别的内存区域(Ashmem区)” 这个Ashmem区是一块匿名共享内存,Fresco 将Bitmap像素放到共享内存去了,共享内存是属于native堆内存。...4.4以下,Fresco 使用匿名共享内存来保存Bitmap数据,首先将图片数据拷贝到匿名共享内存中,然后使用Fresco自己写的加载Bitmap的方法。

    49630
    领券