方法一:质量压缩
这种压缩方法不压缩bitmap的内存,而是在上传下载时的图片的大小变小,除了这种压缩方法,其他的都是压缩bitmap内存,而图片文件本身的大小也随着变小。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bit.compress(CompressFormat.JPEG, quality, baos);//quality是比例0~100,100表示不压缩
byte[] bytes = baos.toByteArray();
bm = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
Log.i("wechat", "压缩后图片的大小" + (bm.getByteCount() / 1024 / 1024)
+ "M宽度为" + bm.getWidth() + "高度为" + bm.getHeight()
+ "bytes.length= " + (bytes.length / 1024) + "KB"
+ "quality=" + quality);
方法二:matrix
宽高会变小但画质不会失真
(有setmartrix 和postmartrix,premartrix之分,第一个是后面设置的效果覆盖前面的,第二个是一起混合显示,第三个还没研究)
对于Bitmap.createBitmap(bm, 0, 0, bm.getWidth(),bm.getHeight(), matrix, true);最后一个参数据说是是否滤波,true图片效果更好,还有待考究,初步测试没有什么不同,可能需要某些条件
Matrix matrix = new Matrix();
matrix.setScale(0.5f, 0.5f);
bm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(),
bm.getHeight(), matrix, true);
Log.i("wechat", "压缩后图片的占用内存大小" + (bm.getByteCount() / 1024)
+ "K宽度为" + bm.getWidth() + "高度为" + bm.getHeight());

方法三:采样率压缩
宽高变小画质还失真
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
bm = BitmapFactory.decodeFile(getResources(), R.drawable.ccc, options);
Log.i("wechat", "压缩后图片的大小" + (bm.getByteCount() / 1024 )
+ "K宽度为" + bm.getWidth() + "高度为" + bm.getHeight());
网友评论