Picasso、Glide及Fresco对比

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,使用比较麻烦,包大。

posted @ 2021-04-28 09:53  petercao  阅读(68)  评论(0编辑  收藏  举报