框架系列 10:Bitmap

Published: 03 Jul 2018 Category: 框架

位图是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»

参考链接: