这一节里面我们将介绍Glide如何对图片进行压缩,这一点在加载图片较多或者加载的图片像素很高的程序里面至关重要
Glide 系列目录
1.Android图片显示相关知识
这里会讲一下图片显示相关的基础知识,如果不关心的可以直接跳到第二点,不过建议是最好看一下
1.1图片质量分类
安卓图片显示的质量配置主要分为四种:
-
ARGB_8888 :32位图,带透明度,每个像素占4个字节
-
ARGB_4444 :16位图,带透明度,每个像素占2个字节
-
RGB_565 :16位图,不带透明度,每个像素占2个字节
-
ALPHA_8 :32位图,只有透明度,不带颜色,每个像素占4个字节
(A代表透明度,RGB代表红绿蓝:即颜色)
1.2图片默认质量
Picasso的默认质量是 ARGB_8888
Glide的默认质量则为 RGB_565
1.3占用内存
加载一张4000 * 2000(一般手机拍摄的都超过这个像素)的图片
Picasso需要占用的内存为: 32MB
4000 * 2000 * 4 / 1024 / 1024 = 30 (MB)
Glide需要占用的内存为: 16MB
4000 * 2000 * 2 / 1024 / 1024 = 15 (MB)
也就是说只要同时加载几张图片,你的应用就会OOM(内存溢出了),最恐怖的是就算你的ImageView的宽高只有10px,同样会占用那么多内存,这就是为什么需要做图片压缩的原因了
2.图片质量的压缩或者提高
在Glide里面默认用的是RGB_565,如果需要修改,相对于Picasso来说会更加麻烦一些,在之前的文章中,讲到过如何修改Glide的图片质量,这里就不再做介绍了
通过GlideModule定制Glide
http://blog.csdn.net/yulyu/article/details/55194237
3.图片尺寸的压缩或者拉伸(override)
通过调用override,就可以把图片压缩到相应的尺寸来显示了,类似这些被处理过的图片,就是之前文章中提到的RESULT(处理图)
Glide.with(this).load(mUrl).override(300,300).into(mIv);
注意,这里具体会压缩到什么尺寸还会根据很多条件来计算,所以最终压缩的结果的宽高会比较接近你的传值,但是不一定会完全相同,如果感兴趣的可以期待本系列后面的Glide源码解析中的具体介绍
(一般来说控件是什么尺寸就传入相应的宽高,这样是比较适合的压缩比例)
前言:这一节里面我们将介绍Glide如何对图片进行压缩,这一点在加载图片较多或者加载的图片像素很高的程序里面至关重要1.Android图片显示相关知识这里会讲一下图片显示相关的基础知识,如果不关心的可以直接跳到第二点,不过建议是最好看一下1.1图片质量分类安卓图片显示的质量配置主要分为四种:ARGB_8888 :32位图,带透明度,每个像素占4个字节ARGB_4444 :16位图,带透明度,每个
本项目是基于Luban算法,重构后实现的图片压缩框架
KLuban 使用Kotlin + 协程 + Flow(并行任务) + LiveData(监听回调) + Glide图片识别和内存优化 + 邻近(鲁班)、双线性采样图片算法压缩框架,欢迎改进 fork 和 star
集成和使用
Step 1.Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
maven { url 'https://jitpack.io' }
Step 2.Add the dependency
dependencies {
implementation 'com.github.forJrking:KLuban:1.0.7'
Step 3.Ap
拍照/图片选择--裁剪--压缩 一条龙,兼容7.0,支持fresco和glide,Picasso.多种自定义配置.
一条龙地支持fresco和glide,Picasso
图片加载:ImageLoader -->> 图片选择: PhotoPicker -->>拍照/选图/裁剪/压缩: PhotoOut
项目中遇到,需要用户上传图片的场景。结果用户上传的、特别是拍摄后的图片,分辨率很大,长宽2000多3000甚至更高,一个图片5MB以上。 造成之后,从网络上加载这些图片,比较慢。
所以,不得不在上传前进行压缩后,再上传。
移动端的图片压缩是一个老生常谈的话题,也曾涌现过不少诸如Luban之类的优秀的图片压缩工具库,但在GIF图像领域的压缩方案却几乎处于一片空白。
许多开发者不知道的是,实际上,已经有一套现成的GIF图像压缩工具集,就内置在你集成的Glide图片加载框架之中。
大家好,我是潜伏于各大群中收集GIF表情包的椎锋陷陈,今天我们要分享的是移动端的GIF图像压缩方案。
我们会从GIF图像的基础知识出发,介绍几种常见的GIF图像压缩策略,然后利用Glide框架内部自带的压缩工具集来实现。
过程中如有不合理的地方,
//图片框架 https://github.com/bumptech/glide
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:comp...
Glide和Picasso都是图片加载框架,用法相似:
//Glide的用法
Glide.with(context).load(url).into(imageView);
//Picasso的用法
Picasso.with(context).load(url).into(imageView);
不同的地方,也是Glide的优点:
with()方法里面的参数可以是Context、Activity、Fragment,并且后面两个参数类型可以使这个图片和后面连个参数的生命周期绑定。