// 由url获取bitmap对象
is = conn.getInputStream(); // 简写方法:is = params[0].openStream()
BitmapFactory.Options newOpts = new BitmapFactory.Options();
bitmap = BitmapFactory.decodeStream(is, null ,
newOpts);
// newOpts.inJustDecodeBounds = false;
// bitmap = BitmapFactory.decodeStream(is);
newOpts.inJustDecodeBounds = false;
Matrix matrix = new Matrix();
int w = newOpts.outWidth;
int h = newOpts.outHeight;
WindowManager manage = getWindowManager();
Display display = manage.getDefaultDisplay();
float hh = display.getHeight();
float ww = display.getWidth();
// Log.e("display.getWidth()t", "display.getWidth()" + ww);
// Log.e("display.getHeight()", "display.getHeight()" + hh);
// Log.e("bitmap.getWidth()", "bitmap.getWidth()" + w);
// Log.e("bitmap.getHeight()", "bitmap.getHeight()" + h);
// int hh = 800;// 这里设置高度为800f
// int ww = 480;// 这里设置宽度为480f
// 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
float be = 1;// be=1表示不缩放
if ( w > ww)
{// 如果宽度大的话根据宽度固定大小缩放
be = (float) (w / ww);
Log.e("matrix0.", "matrix0." + be);
newbmp = compressImage(bitmap);
return newbmp;
}
else if (w < ww )
{
be = (float) (ww / w);
Log.e("matrix1.", "matrix1." + be);
}
else if (w < h && h > hh)
{// 如果高度高的话根据高度固定大小缩放
be = (int) (h / hh);
Log.e("matrix2.", "matrix2." + be);
}
if (be <= 0)
be = 1;
// newOpts.inSampleSize = (int) be;//设置缩放比例
Log.e("matrix.postScale", "matrix.postScale" + be);
matrix.postScale(be, be);
// newOpts.inSampleSize = (int) be;// 设置缩放比例
// 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
// bitmap = BitmapFactory.decodeStream(is, null ,
// newOpts);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);
newbmp = compressImage(bitmap);// 压缩好比例大小后再进行质量压缩
mCacheMap.put(strURL, newbmp);
/**
* 质量压缩
*
* @param image
* @return
*/
private 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
options -= 10;// 每次都减少10
image.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%,把压缩后的数据存放到baos中
}
ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把压缩后的数据baos存放到ByteArrayInputStream中
Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);// 把ByteArrayInputStream数据生成图片
// try {
// FileOutputStream out = new
// FileOutputStream(Environment.getExternalStorageDirectory()
// + "/faceImage1.jpg");
// Log.i("path",
// Environment.getExternalStorageDirectory()+"/faceImage1.jpg");
// bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
// }
// catch (Exception e) {
// e.printStackTrace();
// }
return bitmap;
}