android压缩图片不失真,Android压缩图片到100K以下并保持不失真的高效方法 - feicien的博客 - eoe移动开发者社区...
1.獲取原始圖片的長和寬
1
2
3
4
5
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, options);
int height = options.outHeight;
int width = options.outWidth;
以上代碼是對圖片進行解碼,inJustDecodeBounds設置為true,可以不把圖片讀到內存中,但依然可以計算出圖片的大小,這正好可以滿足我們第一步的需要。
2.計算壓縮比例
1
2
3
4
5
6
7
8
9
10
int height = options.outHeight;
int width = options.outWidth;
int inSampleSize = 1;
int reqHeight=800;
int reqWidth=480;
if (height > reqHeight || width > reqWidth) {
final int heightRatio = Math.round((float) height/ (float) reqHeight);
final int widthRatio = Math.round((float) width / (float) reqWidth);
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}
一般手機的分辨率為 480*800 ,所以我們壓縮后圖片期望的寬帶定為480,高度設為800,這2個值只是期望的寬度與高度,實際上壓縮后的實際寬度也高度會比期望的要大。如果圖片的原始高度或者寬帶大約我們期望的寬帶和高度,我們需要計算出縮放比例的數值。否則就不縮放。heightRatio是圖片原始高度與壓縮后高度的倍數,widthRatio是圖片原始寬度與壓縮后寬度的倍數。inSampleSize為heightRatio與widthRatio中最小的那個,inSampleSize就是縮放值。 inSampleSize為1表示寬度和高度不縮放,為2表示壓縮后的寬度與高度為原來的1/2
3.縮放并壓縮圖片
1
2
3
4
5
6
7
8
//在內存中創建bitmap對象,這個對象按照縮放大小創建的
options.inSampleSize = calculateInSampleSize(options, 480, 800);
options.inJustDecodeBounds = false;
Bitmap bitmap= BitmapFactory.decodeFile(filePath, options);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 60, baos);
byte[] b = baos.toByteArray();
前3行的代碼其實已經得到了一個縮放的bitmap對象,如果你在應用中顯示圖片,就可以使用這個bitmap對象了。由于考慮到網絡流量的問題。我們好需要犧牲圖片的質量來換取一部分空間,這里調用bm.compress()方法進行壓縮,這個方法的第二個參數,如果是100,表示不壓縮,我這里設置的是60,你也可以更加你的需要進行設置,在實驗的過程中我設置為30,圖片都不會失真。
閱讀全文……
總結
以上是生活随笔為你收集整理的android压缩图片不失真,Android压缩图片到100K以下并保持不失真的高效方法 - feicien的博客 - eoe移动开发者社区...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android builder里面存放两
- 下一篇: 什么是对象的消息_这一次,我们用最详细的