图片压缩。大小压缩

public Bitmap ratio(String imgPath) {


DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
float pixelW = dm.widthPixels;
float pixelH = dm.heightPixels;


BitmapFactory.Options newOpts = new BitmapFactory.Options();
// 开始读入图片,此时把options.inJustDecodeBounds 设回true,即只读边不读内容
newOpts.inJustDecodeBounds = true;
newOpts.inPreferredConfig = Config.RGB_565;
// Get bitmap info, but notice that bitmap is null now
Bitmap bitmap = BitmapFactory.decodeFile(imgPath, newOpts);


// newOpts.inJustDecodeBounds = false;
int w = newOpts.outWidth;
int h = newOpts.outHeight;
// 想要缩放的目标尺寸
float hh = pixelH;// 设置高度,可以明显看到图片缩小了
float ww = pixelW;// 设置宽度,可以明显看到图片缩小了
// 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
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);
}else if (w == h) {
be = (int) (newOpts.outHeight / hh);
}


if (be <= 1)

be = 1;
newOpts.inSampleSize = be;// 设置缩放比例
newOpts.inPurgeable = true;
newOpts.inJustDecodeBounds = false;
// 开始压缩图片,注意此时已经把options.inJustDecodeBounds 设回false了
// bitmap = BitmapFactory.decodeFile(imgPath, newOpts);


try {
// bitmap = BitmapFactory.decodeStream(new FileInputStream(new
// File(imgPath)), new Rect(),
// newOpts);


byte[] data = readStream(new FileInputStream(new File(imgPath)));
if (data != null) {
bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, newOpts);
}


} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


return bitmap;
}


/*
* 得到图片字节流 数组大小
*/
public byte[] readStream(InputStream inStream) throws IOException {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
outStream.close();
inStream.close();
return outStream.toByteArray();

}


@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();


releaseImageViewResouce(photoView);
System.gc();
}


public static void releaseImageViewResouce(ImageView imageView) {
if (imageView == null)
return;
Drawable drawable = imageView.getDrawable();
if (drawable != null && drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
Bitmap bitmap = bitmapDrawable.getBitmap();
if (bitmap != null && !bitmap.isRecycled()) {
bitmap.recycle();
bitmap = null;
}
}
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值