bitmap的六种压缩方式,图片压缩( 二 )


3.缩放法压缩()
Matrix matrix = new Matrix();matrix.setScale(0.5f, 0.5f);bm = Bitmap.createBitmap(bit, 0, 0, bit.getWidth(),bit.getHeight(), matrix, true);Log.i("wechat", "压缩后图片的大小" + (bm.getByteCount() / 1024 / 1024)+ "M宽度为" + bm.getWidth() + "高度为" + bm.getHeight());
出来的log是

bitmap的六种压缩方式,图片压缩

文章插图
我们看到图片大小直接缩小了一半,长度和宽度也没有变,相比减少了一半的内存 。
注意:由于的画质惨不忍睹,一般假如对图片没有透明度要求的话,可以改成,相比将节省一半的内存开销 。
5.
bm = Bitmap.createScaledBitmap(bit, 150, 150, true);Log.i("wechat", "压缩后图片的大小" + (bm.getByteCount() / 1024) + "KB宽度为"+ bm.getWidth() + "高度为" + bm.getHeight());
出来的log是
这里是将图片压缩成用户所期望的长度和宽度,但是这里要说,如果用户期望的长度和宽度和原图长度宽度相差太多的话,图片会很不清晰 。
总结
以上就是5种图片压缩的方法,这里需要强调,他们的压缩仅仅只是对中的来说的 。如果将这些压缩后的另存为sd中,他们的内存大小并不一样 。
手机中,图片的所占的内存大小和很多因素相关,计算起来也很麻烦 。为了计算出一个图片的内存大小,可以将图片当做一个文件来间接计算,用如下的方法:
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera/test.jpg");Log.i("wechat", "file.length()=" + file.length() / 1024);
或者
FileInputStream fis = null;try {fis = new FileInputStream(file);} catch (FileNotFoundException e) {e.printStackTrace();}try {Log.i("wechat", "fis.available()=" + fis.available() / 1024);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}
上面两个方法计算的结果是一样的 。
看完了这篇内容,其实说白了,压缩都是围绕这个来做文章:所占用的内存 = 图片长度 x 图片宽度 x 一个像素点占用的字节数 。3个参数,任意减少一个的值,就达到了压缩的效果 。
参考文章:
优化(1) - 图片压缩
多图比较谷歌WebP和JPEG图像格式
-使用对进行处理