Picasso、Glide及Fresco对比

摘要:
基本上是毕加索2的3.5倍。Glide的默认位图格式是RGB_在565格式中,毕加索只缓存原始大小的图像。这种改进将导致Glide加载速度比Picasso更快。3.当存储器中不存在图像加载速度时,Glide将自动将图像加载等操作与组件的生命周期相关联。5.Glide可以加载视频缩略图6。Glide支持GIF动态图像Picasso:

Glide和Picasso的区别

首先简单的介绍下两个库的出身:

Picasso是Square公司出品的一款非常优秀的开源图片加载库
Glide是由Google开发,基于 Picasso,依然有保存了Picasso的简洁风格,但是在此做了大量优化与改进。
具体的使用方法这里就不详细介绍了,这里重点说区别,主要体现在下面几个方面:

1. 库的大小和方法的数量
Glide 要比 Picasso 大很多,基本上是 Picasso 的3.5倍

2. 缓存方式
Glide 默认的 Bitmap 格式是 RGB_565 格式,而Picasso默认的是 ARGB_8888 格式,这个内存开销要小一半。

在磁盘缓存方面,Picasso只会缓存原始尺寸的图片,而 Glide 缓存的是多种规格,也就意味着 Glide会根据你ImageView的大小来缓存相应大小的图片尺寸,比如你ImageView大小是200*200,原图是 400*400,而使用Glide 就会缓存 200*200规格的图,而Picasso只会缓存 400*400 规格的。这个改进就会导致 Glide 比 Picasso 加载的速度要快

3. 加载图片速度
当内存中不存在时,Picasso会比Glide快一点,可能的原因是缓存机制导致,因为Picasso是直接把图加载到内存中,而Glid 则需要改变图片大小再加载到内存中去,这个应该是会耗费一定的时间。

但是,当加载的图片在内存中时,Glide 则比 Picasso 要快。其原理还是因为缓存机制的区别,因为Picasso 从内存中拿到的图片,还要先去 resize 后,然后设定给 imageView,但是 Glide 则不需要这样。

4. 生命周期
Glide 相比 Picasso 的一大优势是它可以和 Activity 以及 Fragment 的生命周期相互协作,我们在调用 Glide.with() 函数时可以将 Activity 或者 Fragment 的实例传进去,这样 Glide 就会自动将图片加载等操作和组件的生命周期关联起来。

5. Glide可以加载视频缩略图

6. Glide 支持 GIF动态图


Picasso:

是Square公司开源的项目,功能强大调用简单:

  1.  
    //用法1:加载全尺寸的图片到内存,然后让GPU来实时重绘大小
  2.  
    Picasso.with(this) .load(“http://**.jpg“) .into(ivImgPicasso);
  3.  
    //用法2:需要去设置ImageView大小值
  4.  
    Picasso.with(this) .load(“http://**.jpg“) .resize(768, 432) .into(ivImgPicasso);
  5.  
    //用法3:按统一比例缩放图片。与Glide加载图片内存开销差不多。
  6.  
    Picasso.with(this) .load(“http://**.jpg“) .fit() .centerCrop() .into(ivImgPicasso);

Glide:

 glide是谷歌员工开源的一个项目。用法是:Glide.with(this).load("url   图片文件   字节数组").into(imageView);

Glide与Picasso的对比:

1,内存:加载一张图片Picasso的内存开销要远大于Glide。

2,Image质量细节:Glide默认的是Bitmap格式是RGB-565;Picasso默认ARGB_8888格式。因此Glide加载的图片没有Picasso那么平滑,但是很难察觉。

3,磁盘缓存:Picasso缓存的是全尺寸的。Glide会根据ImageView的大小缓存尺寸相同的。

     让Glide即缓存全尺寸的,有缓存其他大小的方式:

Glide.with(this) .load(“http://**.jpg“).diskCacheStrategy(DiskCacheStrategy.ALL) .into(ivImgGlide);

Glide的这种方式优点是加载显示非常快。而Picasso的方式则因为需要在显示之前重新调整大小而导致一些延迟,Glide比Picasso快,虽然需要更大的空间来缓存。

4,Glide可以加载git,Picasso不能。

 

总结:

(1)Glide比Picasso加载速度快,但Glide比Picasso需要更大的空间来缓存;

(2)Glide加载图像及磁盘缓存的方式都优于Picasso,且Glide更有利于减少OutOfMemoryError的发生;

(3)Glide可以加载Gif动图,Picasso不可以加载动图

(4)Picasso加载的图片比Glide加载的图片平滑(可忽略不计)

(5)Picasso不支持视频缩略图,Glide支持。
 

Fresco:

Fresco是facebook开源的图片库。Glide有的功能Fresco都有(都可以加载缩略图,可以加载gif)。

与glide对比:

在加载静态图片的时候三个图片库性能差不多,Glide要稍微优秀一点。在加载动态图的时候(Picasso不支持gif)Glide的java heap是Fresco的一倍,所以OOM的风险比Fresco大很多。但是Fresco占用的native heap要比Glide占用的 native heap要大的多,接近10倍。所以Fresco存在一定的风险,因为他的native heap有些恐怖。

 

Glide优缺点:

1,多种图片格式的缓存(原图片缓存和其他格式),适用更多的内容表现形式(gif   webp  缩略图 video)。Fresco也是只缓存原图片

2,加载速度快(因为缓存的图片规格多),内存开销小(rgb-565)

3,没有文件缓存 java heap比Fresco高

 

Fresco优缺点:

  1,最大的优势在于5.0以下(最低2.3)的bitmap加载。5.0以下系统,Fresco将图片放在一个特别的内存区域,大大减少OOM。

 2,适用于高性能加载大量图片。

 3,使用比较麻烦,包大。

免责声明:文章转载自《Picasso、Glide及Fresco对比》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇macbook Pro vim 在两个终端的复制操作iOS项目崩溃日志采集与分析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

将某个div内容保存成图片,使用html2canvas截图方法(高清图并解决图片跨域问题)

首先附上html2canvas的CDN地址:http://www.bootcdn.cn/html2canvas/ ; 此方法可截取整个div的内容,包括不可视区域,并且可以实现跨域图片截图。之前看了很多关于html2canvas插件图片跨域的解决办法,大部分的答复是在服务器端配置,之后将useCORS属性设置为true,但是如果图片是保存在别人家的服务器上...

防盗链原理

昨天去参加一个面试,面试官上来就问“知道防盗链吗?它是怎么实现的?”。当时立刻傻了,防盗链是什么东东? 百度百科对防盗链的定义是 此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置...

html2canvas踩坑日记

近日要开发一个能将生成的二维码另存为图片的功能(该图片呢,肯定不止一个二维码,还包括背景、文字等其他元素),首先呢,就想到了html2canvas,随便一百度就是各种踩坑日志,我也随一下大流,记录本人在开发过程中遇到的坑。 1.基本用法: 在html2canvas上找到了它的基本用法以及压缩包 <div style="padding: 10px;...

深入理解JVM3

VM运行时数据区域 JVM执行Java程序的过程中,会使用到各种数据区域,这些区域有各自的用途、创建和销毁时间。根据《Java虚拟机规范(第二版)》的规定,JVM包括下列几个运行时数据区域: 1.程序计数器(Program Counter Register): 每一个Java线程都有一个程序计数器来用于保存程序执行到当前方法的哪一个指令,对于非Native...

Dump Lsass内存转储新旧方法

  之前看到一篇关于Lsass内存dump的文章,学习记录一下。   lsass.exe(Local Security Authority Subsystem Service)进程空间中,存有着机器的域、本地用户名和密码等重要信息。如果获取本地高权限,用户便可以访问 LSASS 进程内存,从而可以导出内部数据(password),用于横向移动和权限提升。...

【Qt】QLabel实现的圆形图像

本篇只描述圆形图像的两种实现方式,动态阴影边框如下: 【Qt】QLabel之动态阴影边框  目前实现的效果如下: 左右两边实现的方式不同: 右边比较简单 min- 100px; max- 100px; min-height: 100px; max-height: 100px; border-radius:...