框架系列 10:Bitmap
位图是Android占内存大户
图片可以从尺寸跟质量两个方面进行压缩,继而减少图片内存占用
- 压缩质量带来的效果是绝对可以减少图片的字节大小的
- 压缩图片的尺寸则不一定会把图片的字节大小给降下去
获取一张Bitmap占用内存大小
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);//这里100的话表示不压缩质量
long length=baos.toByteArray().length/1024;//读出图片的kb大小
那么能否有方法,将一张图片尺寸不改变尺寸的前提下,压缩到指定大小(kb)了?
public static byte[] compressBitmap(Bitmap bitmap,float size)
{
if(bitmap==null||getSizeOfBitmap(bitmap)<=size){
return null;//如果图片本身的大小已经小于这个大小了,就没必要进行压缩
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
// 如果签名是png的话,则不管quality是多少,都不会进行质量的压缩
int quality=100;
while (baos.toByteArray().length / 1024f > size) {
quality=quality-4;// 每次都减少4
baos.reset();// 重置baos即清空baos
if(quality<=0){
break;
}
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos);
Logg.e("------质量--------"+baos.toByteArray().length/1024f);
}
return baos.toByteArray();
}
Android高效加载大图、多图解决方案,有效避免程序OOM(郭霖)
类似Instagram的图片剪裁效果
一个图片压缩框架
图片不规则区域点击事件处理
- «http://www.jcodecraeer.com/a/opensource/2017/0402/7774.html»