前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >android图片加载库Glide

android图片加载库Glide

作者头像
xiangzhihong
发布于 2018-02-01 09:58:03
发布于 2018-02-01 09:58:03
1.9K00
代码可运行
举报
文章被收录于专栏:向治洪向治洪
运行总次数:0
代码可运行

什么是Glide?

Glide是一个加载图片的库,作者是bumptech,它是在泰国举行的google 开发者论坛上google为我们介绍的,这个库被广泛的运用在google的开源项目中。

Glide解决什么问题?

Glide是一个非常成熟的图片加载库,他可以从多个源加载图片,如:网路,本地,Uri等,更重要的是他内部封装了非常好的缓存机制并且在处理图片的时候能保持一个低的内存消耗。

Glide怎么使用?

在Glide的使用方面,它和Picasso的使用方法是比较相似的,并且他们的运行机制也有很多相似的地方,很多博文会把两者进行比较,此文也采用同样的方式,通过比较两者来学习他们之间的优点和不足。

首先,当我们使用这两个库的时候第一步要做的就是导入库,Picasso好说,直接依赖就行,但是Glide要注意,这个库是要依赖于support liberary v4的,所以用这个库的时候,不要忘了依赖v4包。

基本使用

在基本使用方面这两个库非常的相似,如下代码所示:  Picasso:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Picasso.with(context)   .load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
.into(ivImg);

Glide:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Glide.with(context)
.load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
.into(ivImg);

看到没有,表面上看是不是非常相似,其实他们有一个不一样的地方,就是Picasso的with只能传入context,而Glide的with可以传入context,还可以是Activity或者是Fragment,你可能会问,这有什么用呢?用处就是图片的加载可以和Activity或者Fragment保持一致,不至于出现,Activity已经暂停了,但是图片却还在加载的情况。

默认的Bitmap格式是RGB_565

一下是Picasso和Glide加载后的结果(1920x1080 像素的图片被加载到768x432像素的imageview中):

你可以看到,被Glide加载的图片在质量上不如Picasso加载的图片,这是为什么?其实是因为Glide的Bitmap默认的格式是RGB_565,而Picasso用的是ARGB_8888,所以虽然质量上不如Picasso(其实在手机上也不明显),但是RGB_565格式的图片仅仅消耗ARGB_8888格式图片一半的内存。

Here is the memory consumption graphs between Picasso at ARGB8888 and Glide at RGB565. (Base application consumes around 8MB)  下图是Picass的ARGB8888格式图片和Glide的RGB565格式图片的内存消耗比较(应用本身大约占8M):

如果你对图片没有过高的要求,那么用默认的格式就可以,但是如果你对图片质量要求较高,那么可以把图片的格式转换为ARGB8888,方法就是通过继承GlideMoudle,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class GlideConfiguration implements GlideModule {
    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        // Apply options to the builder here.
        builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
    }
    @Override
    public void registerComponents(Context context, Glide glide) {
        // register ModelLoaders here.
    }
}

然后在mainfest.xml注册下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<meta-data android:name="com.inthecheesefactory.lab.glidepicasso.GlideConfiguration"
            android:value="GlideModule"/>

在次看下图,是不是完全一样了呢? 

那让我们再看一看两者之间的内存消耗: 

我们发现,虽然用的图片格式是一样的,并且Glide加载的几乎是先前的两倍内存,但是Picasso消耗的内存仍然远大于Glide.

这是因为,Picasso加载了完整尺寸的图片(1920x1080像素)进入内存,当绘图的时候,让GPU即时的恢复到所需要的尺寸(768x432像素),然而Glide则加载精确的imageview尺寸进入内存,当然,我们可以手动使Picasso也使用这种方式加载图片(设置显示的尺寸):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Picasso.with(this)
    .load("http://nuuneoi.com/uploads/source/playstore/cover.jpg")
    .resize(768, 432)
    .into(ivImgPicasso);

上面的方式有局限性,就是我们必须知道imageview的精确尺寸,而如果我们的imageview设置了wrap,我们就不能用上面的那种方式了,而需要改为下面的方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Picasso.with(this)
    .load("http://nuuneoi.com/uploads/source/playstore/cover.jpg")
    .fit()
    .centerCrop()
    .into(ivImgPicasso);

现在,我们再来看内存消耗图: 

哈哈,两者的内存消耗现在差不多一样了,但是不得不说的是在这一点上Glide确实比Picasso做的要好,因为Glide可以在每种情况下自动的计算Imageview的尺寸。

图片的质量细节

当我把imageview的尺寸调整到和图片一样大的时候(1920x1080像素),我们来观察一下下面的图片: 

这次两张图片的对比就比较明显了,Glide加载的图片可以明显的看到锯齿像素点,但是当用户使用应用的时候,这并不是那么容易察觉,并且,如果真的忍受不了这种小瑕疵,可以把图片格式调整到ARGB_8888。

外部缓存

在默认情况下Picasso和Glide的外部缓存机制是非常不一样的,通过实验可以发现(1920x1080 像素的图片被加载到768x432像素的imageview中),Glide缓存的是768x432像素的图片,而Picasso缓存的是整张图片(1920x1080像素)。

如果加载的图片是RGB565模式,缓存图片也是RGB565模式。

当我们调整imageview的大小时,Picasso会不管imageview大小是什么,总是直接缓存整张图片,而Glide就不一样了,它会为每个不同尺寸的Imageview缓存一张图片,也就是说不管你的这张图片有没有加载过,只要imageview的尺寸不一样,那么Glide就会重新加载一次,这时候,它会在加载的imageview之前从网络上重新下载,然后再缓存。

防止各位不明白,再来举个例子,如果一个页面的imageview是200*200像素,而另一个页面中的imageview是100*100像素,这时候想要让两个imageview像是同一张图片,那么Glide需要下载两次图片,并且缓存两张图片。

但是我们可以通过如下的方法来让Glide即缓存全尺寸的图片,有缓存不同尺寸的图片:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Glide.with(this)
     .load("http://nuuneoi.com/uploads/source/playstore/cover.jpg")
     .diskCacheStrategy(DiskCacheStrategy.ALL)
     .into(ivImgGlide);

Glide的这种默认的缓存机制有一个优点,就是它可以加快图片加载的速度(可以理解为以空间换时间),而Picasso会造成一定的延迟,因为它在加载到imageview的时候,总是需要调整大小,确实Picasso有一个立即显示图片的方法(如下所示),但是这还是消除不了延时。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//Picasso
.noFade();

在外部缓存方面Glide和Pcasso各有所长,你可以选择合适自己的来用(也就是对于你的app来说是控件重要还是时间重要)。

特性

你几乎可以用Glide来做Pcasso可以做的所有事情,并且他们的代码风格也非常类似:

调整图片尺寸:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Picasso
.resize(300, 200);
// Glide
.override(300, 200);

Center Cropping:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Picasso
.centerCrop();
// Glide
.centerCrop();

图形变换(Transforming):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Picasso
.transform(new CircleTransform())
// Glide
.transform(new CircleTransform(context))

设置占位图片和错误图片:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Picasso
.placeholder(R.drawable.placeholder)
.error(R.drawable.imagenotfound)
// Glide
.placeholder(R.drawable.placeholder)
.error(R.drawable.imagenotfound)

有什么Glide可以做Pcasso却做不了

Glide的一个明显的优点就是它可以加载gif图片,你可能说我用Picasso加载也不报错啊?你要注意,用Picasso加载的gif图片是不会动的,如下所示:

因为Glide被设计成能和Activity/Fragment的生命周期完美的相结合,因此gif动画将随着Activity/Fragment的生命周期自动的开始和停止。

gif的缓存和一般的图片也是一样的,也是第一次加载的时候调整大小,然后缓存。

但是,要注意的是,通过测量,我们可以发现gif图片将消耗非常多的内存,因此使用它的时候要慎重。

除了加载gif图片外,Glide还可以解析任何的video文件成为一个静态图片。

另一个比较有用的特性是,你可以配置显示图片的动画,而Picasso只支持一个淡入(fading in)动画效果。

你也可以用thumbnail()来创造一个image的thumbnail(极小)的图片。

还有很多的特性,但是一般都不太常用,如,把一个图片的编码转换为字节数组,等。

配置

我们可以对很多的配置做出调整,如,外部缓存的大小和位置,内部缓存的最大限制,Bitmap的格式等等,至于更多的配置,可以参考配置页面

库的大小

Picasso的大小大约是118KB,而Glide大约有430KB。 

一个库的大小有什么意义吗?确实,我也认为意义不大!

我们再来看一下两者之间的方法数量的比较: 

值得注意的是,在Android DEX file中的方法是有限制的,最大方法数为65535个,从这一点来说,Glide的方法确实不少,并且,混淆器也建议对我们的项目进行混淆。

总结

Glide和Picasso都不是完美的,从某些方面来说,Glide在图片的缓存上来说是比较不错的,因为它的速度比较快,另外,它也可以有效的防止OOM错误,而加载gif图片也是Glide的一大优势,但是默认情况下picasso的图片质量是很高的。

另外的一点小建议是,使用Glide的时候把图片的格式改为ARGB8888并且缓存全尺寸和其他尺寸的图片,这样使用可以让加载图片更好。

资源

以下是一些关于Glide的资源:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-06-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
疫情过后,人工智能和机器人会迎来哪些机遇?
新型冠状肺炎已经持续一段时间了,在这期间,大多数人都体验了“给你吃喝、手机和Wifi,但只能待在一间房子里,你能待多久?”这个问题。不知道那些回答“我能待一辈子”的人心中是否有了新的答案。
博士的沙漏
2020/09/03
7020
疫情过后,人工智能和机器人会迎来哪些机遇?
起底滴滴数据科学团队:面对超复杂线下场景,要数据驱动,但拒绝“唯数据论”
本文为清华数据科学研究院联合大数据文摘发起的年度白皮书《顶级数据团队建设全景报告》系列专访的第一篇内容。《报告》囊括专家访谈、问卷、网络数据分析,力求为行业内数据团队的组建和高校数据人才的培养提供指导性意见。前往文末参与填写问卷,将获得《报告》完整版~
大数据文摘
2020/07/07
1.5K0
病毒入侵,大数据还可以做什么?
疫情猛于虎。1月23日武汉封城,1月24日广东等多个省份或直辖市启动重大突发公共卫生事件一级响应,截至1月30日10时,全国累计确诊7736例新型冠状病毒肺炎,各地均出现不同数量的确诊疫情,武汉确诊2261例。
大数据文摘
2020/02/21
1.1K0
仁度生物:成功研发新冠病毒核酸快速检测试剂盒;阿里达摩院:连夜研发智能疫情机器人;A股确认延期开市一天|ITDaily
上海仁度生物科技有限公司宣布,日前已成功研制出新型冠状病毒(2019-nCoV)核酸检测试剂盒。该试剂盒可配套使用全自动核酸检测分析系统(AutoSAT),该分析系统为全自动分子诊断设备,样本随时上机,1.5小时内完成检测。(36氪)
用户6543014
2020/02/21
4830
抗击疫情,AI、5G、云计算联手“助阵”,科技公司们倾力驰援
一场突如其来的疫情,让这个春节多了一些关键词——武汉、口罩、隔离、延迟复工/开学……
镁客网
2020/02/21
6500
抗击疫情,AI、5G、云计算联手“助阵”,科技公司们倾力驰援
2022年网约车行业研究报告
网约车,全称为网络预约出租汽车,是通过互联网平台对接运力(驾驶员、车辆)和乘客,提供非巡游出租车服务的经营活动。其核心的商业逻辑比较简单,利益关联方主要是平台、司机、车辆和消费者四方。平台分别对接司机、车辆和消费者,通过有效供需匹配赚取整个出行系统效率提升的钱。具体表现为:消费者通过网约平台打车,平台匹配运力完成服务,消费者为打车服务付费,平台从交易金额中抽成(5%-20%不等)。整个网约车市场根据运力归属和市场定位的不同,又可以细分为网约出租车、快车、专车、顺风车等四种主要形式。
资产信息网
2022/04/01
1.8K0
2022年网约车行业研究报告
长图 | 一图看懂腾讯文旅“抗疫复苏行囊”解决方案
2月25日,文化和旅游部资源开发司印发《旅游景区恢复开放疫情防控措施指南》,指出:坚持分区分级原则,不搞 “一刀切”。按照外防输入、内防扩散的要求,对旅游景区开放条件和必要性进行全面评估。疫情高风险地区旅游景区暂缓开放,疫情中风险和低风险地区旅游景区开放工作由当地党委政府决定。强调运用门票预约、智慧引导等大数据和智慧手段,科学分流疏导游客,做好游客流量关口前置管控,强化景区游览管理。 腾讯文旅积极响应文旅部关于旅游景区恢复开放指导建议,率先推出《文旅抗疫复苏行囊》解决方案,协助文旅企业安全复工复产、加
腾讯文旅
2020/06/17
4550
两个月微博热搜分析:疫情之下,哪些时、地、人、物处在舆论的风口浪尖
两个月前的12月25日,一份因“不明原因”发热患者标本在武汉市疾控中心准备完毕,准备送往上海市公共卫生临床中心进行研究。
大数据文摘
2020/02/26
6840
滴滴AI负责人叶杰平:你的每一次出行,都已有AI落地的助力 | MEET 2020
在首届MEET 2020智能未来大会现场,滴滴出行副总裁、AI Lab负责人,同时也是美国密西根大学教授、新晋IEEE Fellow的叶杰平站在技术视角,分享了他的观点:
量子位
2019/12/23
5110
滴滴AI负责人叶杰平:你的每一次出行,都已有AI落地的助力 | MEET 2020
外卖数据下的武汉:普通人的封城十日生活
下楼倒完垃圾,冯先生取下身上的全副武装:帽子、眼镜、手套和口罩。紧接着,他将外套换下、好好洗了个手、再给衣物喷上消毒液准备洗掉。
CDA数据分析师
2020/02/21
4060
外卖数据下的武汉:普通人的封城十日生活
文化和旅游部办公厅关于推进旅游企业扩大复工复业有关事项的通知
文化和旅游部办公厅关于推进旅游企业 扩大复工复业有关事项的通知 各省、自治区、直辖市文化和旅游厅(局),新疆生产建设兵团文化体育广电和旅游局:  按照党中央、国务院统筹推进新冠肺炎疫情防控和经济社会发展的决策部署,结合当前疫情防控总体形势,为扎实做好“六稳”工作,全面落实“六保”任务,推进旅游企业扩大复工复业,现就有关事项通知如下: 一、工作事项 (一)恢复跨省(区、市)团队旅游。各省(区、市)文化和旅游行政部门在做好疫情防控工作的前提下,经当地省(区、市)党委、政府同意后,可恢复旅行社及在线旅游企业
腾讯文旅
2020/07/16
4110
用人工智能保护一线医护人员
Shielding-Frontline-Health-Workers-with-AI-1536x944_副本.jpg
用户4122690
2020/07/11
3850
用人工智能保护一线医护人员
滴滴叶杰平:年运送乘客百亿次,AI如何“服务”出行领域?| BDTC 2019
“如果把北京一天滴滴的轨迹数据放在一起,要覆盖北京所有道路差不多四百次,数据非常大、非常完整。”
AI科技大本营
2019/12/26
9120
滴滴叶杰平:年运送乘客百亿次,AI如何“服务”出行领域?| BDTC 2019
新冠危机下的印度:优步 还是 忧步?
我们来看看目前的疫情情况:目前全球新冠确诊已经2000万了【1】,快赶上整个澳大利亚的总人口数。总数这么恐怖,但新增确诊数走势似乎有平缓趋势,可能会让人以为第二波疫情快过去了。
用户1569917
2020/09/01
4150
新冠危机下的印度:优步 还是 忧步?
智能战疫昨日精选:美国科研团队首次绘制出新冠病毒关键蛋白分子3D结构;中小企业三项社保缴费部分免征
机器之心最新推出「智能战疫日报」,围绕「人工智能直接应用于抗击疫情」和「人工智能助力产业应对非常时期各项困难」两大主题,提供相关政策、人工智能应用和解决方案、行业洞察、研究进展等每日动态,便于大家关注趋势变化,辅助决策;同时发布抗击疫情需求、产业需求或难题、人工智能资源等信息,促进产业与技术、场景与资源之间的高效合作。文末识别二维码即可开启订阅。
机器之心
2020/02/25
6580
谷歌官博晒疫情成绩单,BAT:Naive,我们才接地气
内容提要:疫情发生以来,众多科技公司纷纷加入这场战「疫」中,为疫情防控的各方面提供了有力支撑。他们所实行的多项举措,已经为现阶段很多人的生活提供了便利。
HyperAI超神经
2020/03/12
5820
谷歌官博晒疫情成绩单,BAT:Naive,我们才接地气
2022年口罩行业研究报告
口罩的种类主要包括普通纱布口罩、医用口罩(通常为一次性)、工业防尘口罩(例如KN95/N95口罩)、日用防护口罩及防护面具(防油烟、病菌、粉尘等)。医用口罩相对比其他类别口罩拥有较高技术要求,需要获得相关医疗器械注册证后方可生产。对于居家或户外活动的普通民众来说,选择一次性医用口罩或普通防护口罩即可满足日常疫情防护需求。
资产信息网
2022/04/13
3720
2022年口罩行业研究报告
无人机巡逻喊话、疫情排查、送药消毒,抗疫战中机器人化身钢铁战士!
这场抗疫战争似乎格外漫长,但回头细数一下才发现,自疫情爆发以来,也不过半月之久。在接下来的几个半月中,抗疫战仍将继续,各方力量也要绷紧神经继续战斗。
CDA数据分析师
2020/02/21
7440
无人机巡逻喊话、疫情排查、送药消毒,抗疫战中机器人化身钢铁战士!
智能战疫动态精选:卫健委称最快4-5月份有部分疫苗进入临床试验;苹果推迟低价iPhone发布时间,富士康产能不足50%
机器之心最新推出「智能战疫日报」,围绕「人工智能直接应用于抗击疫情」和「人工智能助力产业应对非常时期各项困难」两大主题,提供相关政策、人工智能应用和解决方案、行业洞察、研究进展等每日动态,便于大家关注趋势变化,辅助决策;同时发布抗击疫情需求、产业需求或难题、人工智能资源等信息,促进产业与技术、场景与资源之间的高效合作。文末识别二维码即可开启订阅。
机器之心
2020/02/26
7120
机器之心「智能战疫日报」:跟踪AI应用动态,对接AI抗疫资源
机器之心最新推出「智能战疫日报」,围绕「人工智能直接应用于抗击疫情」和「人工智能助力产业应对非常时期各项困难」两大主题,提供相关政策、人工智能应用和解决方案、行业洞察、研究进展等每日动态,便于大家关注趋势变化,辅助决策;同时发布抗击疫情需求、产业需求或难题、人工智能资源等信息,促进产业与技术、场景与资源之间的高效合作。文末识别二维码即可开启订阅。
机器之心
2020/02/24
7520
推荐阅读
疫情过后,人工智能和机器人会迎来哪些机遇?
7020
起底滴滴数据科学团队:面对超复杂线下场景,要数据驱动,但拒绝“唯数据论”
1.5K0
病毒入侵,大数据还可以做什么?
1.1K0
仁度生物:成功研发新冠病毒核酸快速检测试剂盒;阿里达摩院:连夜研发智能疫情机器人;A股确认延期开市一天|ITDaily
4830
抗击疫情,AI、5G、云计算联手“助阵”,科技公司们倾力驰援
6500
2022年网约车行业研究报告
1.8K0
长图 | 一图看懂腾讯文旅“抗疫复苏行囊”解决方案
4550
两个月微博热搜分析:疫情之下,哪些时、地、人、物处在舆论的风口浪尖
6840
滴滴AI负责人叶杰平:你的每一次出行,都已有AI落地的助力 | MEET 2020
5110
外卖数据下的武汉:普通人的封城十日生活
4060
文化和旅游部办公厅关于推进旅游企业扩大复工复业有关事项的通知
4110
用人工智能保护一线医护人员
3850
滴滴叶杰平:年运送乘客百亿次,AI如何“服务”出行领域?| BDTC 2019
9120
新冠危机下的印度:优步 还是 忧步?
4150
智能战疫昨日精选:美国科研团队首次绘制出新冠病毒关键蛋白分子3D结构;中小企业三项社保缴费部分免征
6580
谷歌官博晒疫情成绩单,BAT:Naive,我们才接地气
5820
2022年口罩行业研究报告
3720
无人机巡逻喊话、疫情排查、送药消毒,抗疫战中机器人化身钢铁战士!
7440
智能战疫动态精选:卫健委称最快4-5月份有部分疫苗进入临床试验;苹果推迟低价iPhone发布时间,富士康产能不足50%
7120
机器之心「智能战疫日报」:跟踪AI应用动态,对接AI抗疫资源
7520
相关推荐
疫情过后,人工智能和机器人会迎来哪些机遇?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验