图片压缩是开发绕不过去的一道坎,曾经的我也是拿来就用
为了更好的开发,有必要了解些图片压缩的基本知识了
前言
当我们在本地显示图片时,我们会把图片加载到内存.内存大大小是图片的宽高和图片的质量决定的,所以我们需要限制图片的尺寸大小 (尺寸压缩).
当向服务器上传图片时我们要限制图片的文件大小(质量压缩).
结合实际情况两者配合使用.
- 尺寸压缩:计算好压缩比例,加载指定宽高的图片到内存
- 质量压缩:把数据读取到内存压缩图片的质量
尺寸压缩
BitmapFactory.Options
:控制图片加载的策略
|
|
options.inSampleSize
压缩图片的程度,压缩后的图片大小=原大小/inSampleSize
options.inSampleSize
会默认取离2的倍数的最近的数值
|
|
质量压缩
|
|
需要注意的地方:
|
|
android加载图片的时候是按照照片的大小和配置来分配内存的,虽然我们的存储大小改变了,但是宽高没有变化.
所以,当我们显示图片的时候压缩宽高就够了.
质量压缩过的图片不应该读取成bitmap,应该转换成byte数组或是保存成文件.
保存图片
- 保存bitmap
|
|
- 保存btye[]
|
|
异步处理
图片上传是耗时操作,如果图片过大,压缩操作会阻塞线程很久,造成不好的体验
可以利用AsyncTask把操作放到线程中去
|
|
封装好的代码: