Glide和picasso使用及区别

Glide,一个被google所推荐的图片加载库,常见的还有Picasso,Fresco等,每一个都非常稳定,功能也都十分强大。但是它们的使用场景基本都是重合的,也就是说我们基本只需要选择其中一个来进行学习和使用就足够了,每一个框架都尝试去掌握的话则有些浪费时间。最常用的是Glide和Picasso,今天就针对于Glide和Picasso的区别,以及Glide的简单使用来进行具体介绍

Picasso的基本用法

Picasso.with(this) .load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“) .into(ivImgPicasso);

Picasso.with(this) .load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“) .resize(768, 432) .into(ivImgPicasso);

Picasso.with(this) .load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“) .fit() .centerCrop() .into(ivImgPicasso);

这三种方法都可以加载图片显示到页面上,

第一种:加载了全尺寸的图片到内存,然后让GPU来实时重绘大小

第二种:你需要主动计算ImageView的大小,或者说你的ImageView大小是具体的值(而不是wrap_content),

第三种:按统一比例缩放图片(保存图片的尺寸比例)便于图片的二维(宽度和高度)等于或者大于相应的视图的维度,这种方法和Glide加载图片占用的内存几乎是相同的,虽然内存开销差距不大,但是在这个问题上Glide完胜Picasso。因为Glide可以自动计算出任意情况下的ImageView的大小。

Glide的基本用法:

Glide.with(this) .load("图片的URL") .into(ivImgGlide);

load方法中不仅可以传入图片地址,还可以传入图片文件File,resource,图片的byte数组等

Glide与Picasso的区别:

1、内存:

            加载同一张图片Picasso,Picasso的内存开销仍然远大于Glide。

2、Image质量的细节:

            Glide默认的是Bitmap格式是RGB-565

            Picasso默认ARGB_8888格式

           Glide加载的图片没有Picasso那么平滑,但是很难察觉

3、磁盘缓存:      

        (1)Picasso缓存的是全尺寸的。而Glide缓存的跟ImageView尺寸相同

      (2)将ImageView调整成不同大小不管大小如何设置。Picasso只缓存一个全尺寸的。Glide则不同,它会为每种大小的ImageView缓存一次

            让Glide既缓存全尺寸又缓存其他尺寸的方法:

Glide.with(this) .load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“) .diskCacheStrategy(DiskCacheStrategy.ALL) .into(ivImgGlide);

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

4、Gif动图

            Glide可以加载Gif动图,Picasso不可以加载动图

            Glide动画会消耗太多的内存,因此使用时谨慎使用

总结一下他们之间的区别:

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

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

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

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

Glide的具体使用方法:

1、基本使用:

添加依赖,现在Glide最新的依赖有4.x.x的

dependencies {

    compile 'com.github.bumptech.glide:glide:3.7.0'

}

基本使用是:

Glide.with(this).load(url).into(imageView);

2、with()

this可以是:

Context

Activity

Fragment

FragmentActivity

ApplicationContext

Context、Activity、Fragment、FragmentActivity,都是glide经过方法都是向activity中添加一个fragment,因为glide无法直接获取到activity,添加一个与activity绑定的fragment,可以保证glide随着activity的生命周期变化而停止暂时取消加载请求。

3、load()

load是核心的请求方法, 在源码中我们可以看到是在这里进行网络请求,

// 加载本地图片

File file = new File(getExternalCacheDir() + "/image.jpg");

Glide.with(this).load(file).into(imageView);

// 加载应用资源

int resource = R.drawable.image;

Glide.with(this).load(resource).into(imageView);

// 加载二进制流

byte[] image = getImageBytes();

Glide.with(this).load(image).into(imageView);

// 加载Uri对象

Uri imageUri = getImageUri();

Glide.with(this).load(imageUri).into(imageView);

4、占位图

我们在实际加载图片的时候,由于各种原因比如网慢,一时无法请求回数据时,考虑到用户体验,一个占位图也是非常重要的

Glide.with(this)

    .load(url)

    .placeholder(R.drawable.loading)

    .error(R.drawable.error)

    .into(imageView);

5、动图

asBitmap()去加载gif图片,那么只会显示静态图片,并且只显示动图的第一帧 

.asGif()去加载静态图片会显示错误图片,报错。

Glide.with(this)

    .load(url)

    .asBitmap()

    .placeholder(R.drawable.loading)

    .error(R.drawable.error)

    .diskCacheStrategy(DiskCacheStrategy.NONE)

    .into(imageView);

6、Glide 使用加载动画和禁止动画

glide默认有淡入淡出动画.crossFade()也可以不加,也有重载.crossFade(int duration),主要设置动画进行快慢,默认是300毫秒。

Glide

    .with(context)

    .load(UsageExampleListViewAdapter.eatFoodyImages[0])

    .placeholder(R.mipmap.ic_launcher)

    .error(R.mipmap.future_studio_launcher)

    .crossFade()

    .into(imageViewFade);

7、设置图片大小;

.override(300, 200);  //设置加载图片尺寸大小

8、图片请求的优先级

Glide可以通过Priority枚举来设置加载图片的优先级,具体使用场景就是,我们点击一个页面时,先加载页面中重要的图片,再加载那些子图像

Priority (优先级)枚举给了四个不同的选项,下面是按照递增priority(优先级)的

Priority.LOW 最低

Priority.NORMAL 正常

Priority.HIGH 最高

Priority.IMMEDIATE 立即

注意:优先级并不是完全严格遵守的。Glide 将会用他们作为一个准则,并尽可能的处理这些请求,但是它不能保证所有的图片都会按照所要求的顺序加载。

.priority(Priority.HIGH);

9、缩略图

缩略图不同于前面提到的占位图。占位图应当是跟app绑定在一起的资源。缩略图是一个动态的占位图,可以从网络加载。缩略图也会被先加载,直到实际图片请求加载完毕。如果因为某些原因,缩略图获得的时间晚于原始图片,它并不会替代原始图片,而是简单地被忽略掉。具体的应用场景有很多,可以提供几张图片便于大家理解


图中的1,2,3,4,5,6就是缩略图,7,就是原图;这样大家应该会理解一点了,我觉得吧(这里只是说一下自己的观点)缩略图一是用户体验较好,从用户的角度,我们已经看见了一个小版本的图片。点击才会加载同样的图片(高分辨率),二是省流量,一张原图或许需要几M但是一张缩略图或许只需要几K,

那怎么加载缩略图呢?Glide提供了2个不同的方法产生缩略图。

第一种,是通过在加载的时候指定一个小的分辨率,产生一个缩略图。

.thumbnail( 0.1f )里面的参数是一个浮点乘法运算

这个方法是啥意思呢?

例如,传递一个0.1f作为参数,Glide会加载原始图片大小的10%的图片。

原始图片---->1000x1000像素,

则缩略图---->100x100像素。

由于图片将会比ImageView小,你需要确保缩放类型是否正确。

注意:你所有的请求设置都会影响到你的缩略图。例如,如果你使用了一个变换让你的图片变为灰度图,缩略图也同样将会是灰度图。


10、缓存

 我们都知道Glide是自带缓存的,所有的图片请求都会被缓存在内存和磁盘上。大多数情况下,缓存是一个非常有用的东西,但在一些特殊的情况下并不是很明智。比如,如果你有一张不段变化的图片,但是都是用的同一个URL,这时候就需要我们避免缓存,Glide提供了一些方法避免内存存储和磁盘存储;

禁止内存存储:

.skipMemoryCache( true )

去特意告诉Glide跳过内存缓存,这个只影响内存缓存!Glide为了避免以后的网络请求,仍然会缓存到磁盘。

禁止磁盘存储:

如果你想要禁止请求的磁盘缓存,使用枚举型变量DiskCacheStrategy.NONE作为参数。

.diskCacheStrategy( DiskCacheStrategy.NONE )

.diskCacheStrategy()中枚举参数以及意义:

DiskCacheStrategy.NONE 啥也不缓存

DiskCacheStrategy.SOURCE 只缓存全尺寸图.

DiskCacheStrategy.RESULT 只缓存最终降低分辨后用到的图片

DiskCacheStrategy.ALL 缓存所有类型的图片 (默认)

结合两个方法就可以同时禁止内存存储和磁盘缓存了

上面是我对Glide的简单理解,希望可以帮助到大家

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,653评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,321评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,833评论 0 324
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,472评论 1 266
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,306评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,274评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,658评论 3 385
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,335评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,638评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,697评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,454评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,311评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,699评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,986评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,254评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,647评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,847评论 2 335

推荐阅读更多精彩内容

  • 一、简介 在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫Glide的图片加载库,作者是bumptech。这...
    天天大保建阅读 7,427评论 2 28
  • 学习来源:郭霖大师博客地址 1、图片加载框架挺多,如Volley、Glide、Picasso、Fresco、本次是...
    子谦宝宝阅读 1,734评论 0 6
  • 7.1 压缩图片 一、基础知识 1、图片的格式 jpg:最常见的图片格式。色彩还原度比较好,可以支持适当压缩后保持...
    AndroidMaster阅读 2,469评论 0 13
  • Glide笔记 一、简介 在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫Glide的图片加载库,作者是bu...
    AndroidMaster阅读 3,859评论 0 27
  • 这么久以来虽然经常用到一些图库,但是自己从来没有真正整理过我们使用过的这些东西有什么不同点,我们为什么要选择这个图...
    黑石ZB阅读 3,703评论 1 16