图片压缩

信息备份:

我们默认了下载下来的图片的大小是已经设定好的。当然,在实际开发中,我们下载再来的图片,可能也是和服务端沟通好设定好了。但是,有时候,图片下载下来很大,这个时候,就需要对图片进行压缩了。一般而言,图片的压缩有两种,质量压缩和宽高压缩。我们来看一个工具类。

//图片质量压缩
public static Bitmap compressImage(Bitmap image) {
 
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
     image.compress(Bitmap.CompressFormat.JPEG, 100 , baos); // 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
     int options = 100 ;
     while (baos.toByteArray().length / 1024 > 100 ) { // 循环判断如果压缩后图片是否大于100kb,大于继续压缩
         baos.reset(); // 重置baos即清空baos
         image.compress(Bitmap.CompressFormat.JPEG, options, baos); // 这里压缩options%,把压缩后的数据存放到baos中
         options -= 10 ; // 每次都减少10
     }
     ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray()); // 把压缩后的数据baos存放到ByteArrayInputStream中
     Bitmap bitmap = BitmapFactory.decodeStream(isBm, null , null ); // 把ByteArrayInputStream数据生成图片
     return bitmap;
}
 
//图片宽高压缩
public static Bitmap getimage(String srcPath) {
     BitmapFactory.Options newOpts = new BitmapFactory.Options();
     // 开始读入图片,此时把options.inJustDecodeBounds 设回true了
     newOpts.inJustDecodeBounds = true ;
     Bitmap bitmap = BitmapFactory.decodeFile(srcPath, newOpts); // 此时返回bm为空
 
     newOpts.inJustDecodeBounds = false ;
     int w = newOpts.outWidth;
     int h = newOpts.outHeight;
     // 这个设置图片的宽高,根据实际需要设定
     float hh = 800f; // 这里设置高度为800f
     float ww = 480f; // 这里设置宽度为480f
     // 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
     int be = 1 ; // be=1表示不缩放
     if (w > h && w > ww) { // 如果宽度大的话根据宽度固定大小缩放
         be = ( int ) (newOpts.outWidth / ww);
     } else if (w < h && h > hh) { // 如果高度高的话根据宽度固定大小缩放
         be = ( int ) (newOpts.outHeight / hh);
     }
     if (be <= 0 )
         be = 1 ;
     newOpts.inSampleSize = be; // 设置缩放比例
     // 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
     bitmap = BitmapFactory.decodeFile(srcPath, newOpts);
     return compressImage(bitmap); // 压缩好比例大小后再进行质量压缩

}




有时候,我们还可以让系统自动的给我们压缩,只要确保不会出现OOM错误又能让图片以最大性能去展示

    File file = Image.getFileFromSDCard(name, "pure" );
             Options opts = new Options();
             opts.inJustDecodeBounds = true ;
             BitmapFactory.decodeFile(file.getAbsolutePath(), opts);
             opts.inJustDecodeBounds = false ;
             // 根据设定的值让系统自动压缩,这行代码的参数是第一个是BitmapFactory.Options,第二个参数是调整后图片最小的宽或者高,第三个参数是调整后图片的内存占用量上限。
             opts.inSampleSize = Util.computeSampleSize(opts, 600 ,( int ) ( 1 * 1024 * 1024 ));
             opts.inDither = false ;
<span style= "white-space:pre" >          </span>opts.inPreferredConfig = Bitmap.Config.ARGB_8888;
             bitmap = BitmapFactory.decodeFile(file.getAbsolutePath(), opts);

本文摘自:http://www.2cto.com/kf/201502/374733.html

http://www.bubuko.com/infodetail-608998.html

http://www.68idc.cn/help/buildlang/ask/20150202204144.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值