直接粘贴就能用
private Bitmap ImageSizeCompress(Uri uri){InputStream Stream = null;InputStream inputStream = null;try {//根据uri获取图片的流inputStream = getContentResolver().openInputStream(uri);BitmapFactory.Options options = new BitmapFactory.Options();//options的in系列的设置了,injustdecodebouond只解析图片的大小,而不加载到内存中去options.inJustDecodeBounds = true;//1.如果通过options.outHeight获取图片的宽高,就必须通过decodestream解析同options赋值//否则options.outheight获取不到宽高BitmapFactory.decodeStream(inputStream,null,options);//2.通过 btm.getHeight()获取图片的宽高就不需要1的解析,我这里采取第一张方式// Bitmap btm = BitmapFactory.decodeStream(inputStream);//以屏幕的宽高进行压缩DisplayMetrics displayMetrics = getResources().getDisplayMetrics();int heightPixels = displayMetrics.heightPixels;int widthPixels = displayMetrics.widthPixels;//获取图片的宽高int outHeight = options.outHeight;int outWidth = options.outWidth;//heightPixels就是要压缩后的图片高度,宽度也一样int a = (int) Math.ceil((outHeight/(float)heightPixels));int b = (int) Math.ceil(outWidth/(float)widthPixels);//比例计算,一般是图片比较大的情况下进行压缩int max = Math.max(a, b);if(max > 1){options.inSampleSize = max;}//解析到内存中去options.inJustDecodeBounds = false;// 根据uri重新获取流,inputstream在解析中发生改变了Stream = getContentResolver().openInputStream(uri);Bitmap bitmap = BitmapFactory.decodeStream(Stream, null, options);return bitmap;} catch (Exception e) {e.printStackTrace();}finally {try {if(inputStream != null) {inputStream.close();}if(Stream != null){Stream.close();}} catch (IOException e) {e.printStackTrace();}}return null;}
引用
Bitmap bitmap = ImageSizeCompress(uri);