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設(shè)置為true,可以不把圖片讀到內(nèi)存中,但依然可以計算出圖片的大小,這正好可以滿足我們第一步的需要。
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,高度設(shè)為800,這2個值只是期望的寬度與高度,實際上壓縮后的實際寬度也高度會比期望的要大。如果圖片的原始高度或者寬帶大約我們期望的寬帶和高度,我們需要計算出縮放比例的數(shù)值。否則就不縮放。heightRatio是圖片原始高度與壓縮后高度的倍數(shù),widthRatio是圖片原始寬度與壓縮后寬度的倍數(shù)。inSampleSize為heightRatio與widthRatio中最小的那個,inSampleSize就是縮放值。 inSampleSize為1表示寬度和高度不縮放,為2表示壓縮后的寬度與高度為原來的1/2
3.縮放并壓縮圖片
1
2
3
4
5
6
7
8
//在內(nèi)存中創(chuàng)建bitmap對象,這個對象按照縮放大小創(chuàng)建的
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行的代碼其實已經(jīng)得到了一個縮放的bitmap對象,如果你在應(yīng)用中顯示圖片,就可以使用這個bitmap對象了。由于考慮到網(wǎng)絡(luò)流量的問題。我們好需要犧牲圖片的質(zhì)量來換取一部分空間,這里調(diào)用bm.compress()方法進行壓縮,這個方法的第二個參數(shù),如果是100,表示不壓縮,我這里設(shè)置的是60,你也可以更加你的需要進行設(shè)置,在實驗的過程中我設(shè)置為30,圖片都不會失真。
閱讀全文……
總結(jié)
以上是生活随笔為你收集整理的android压缩图片不失真,Android压缩图片到100K以下并保持不失真的高效方法 - feicien的博客 - eoe移动开发者社区...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android builder里面存放两
- 下一篇: 鸿蒙系统开发大会怎么参加,鸿蒙2.0来了