日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

android 不压缩保存图片格式,Android中图片的压缩方法

發布時間:2023/12/14 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 不压缩保存图片格式,Android中图片的压缩方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Bitmap

Android中圖片是以Bitmap(位圖)形式存在,位圖常見的文件格式有:.bmp .jpg .png .gif 。

Bitmap的大小計算 = 圖片的長度圖片的寬度單位像素所占用的字節數。

Bitmap的優缺點

優點:色彩變化豐富,可以改變任何形狀的區域色彩顯示效果。

缺點:放大和縮小都會引起像素的增加和縮小,這樣會使圖片出現失真或者鋸齒形。另一個缺點就是像素越高數據量越大占用的內存越大。

常用壓縮方法

質量壓縮

質量壓縮是不會改變圖片的寬高(像素),是去改變圖片的位深和透明度的。

png是無損壓縮的,所以質量壓縮對png是不起作用的

/**

* 質量壓縮

* 降低圖片的質量,不會減少圖片的像素,改變圖片的位深和透明度,沒有改變像素大小,所以不會減少占據的內存大小。

*/

private void qualityCompress(Bitmap.CompressFormat format, int quality, String type) {

try {

File file = new File(Environment.getExternalStorageDirectory(), "test_" + quality + format + "_" + type + ".jpg");

//得到一個文件輸入流

mFileOutputStream = new FileOutputStream(file);

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_pic);

// 圖片的格式 quality是壓縮完之后保存圖片設置的質量參數 png是無損壓縮,quality參數對png無效

bitmap.compress(format, quality, mFileOutputStream);

} catch (FileNotFoundException exception) {

exception.printStackTrace();

} finally {

if (mFileOutputStream != null) {

try {

mFileOutputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

采樣率壓縮

降低圖片的像素。數值越高,圖片像素越低。

/**

* 尺寸壓縮中的采樣率壓縮

* 改變了像素,減少了圖片占用的內存,同樣照片的清晰度也降低了。

* inSampleSize = 2 內存將減少 1/4 內存大小 = 圖片寬/inSampleSize * 圖片高/inSampleSize * 單位像素占用的字節大小

*/

private void loadImage() {

BitmapFactory.Options options = new BitmapFactory.Options();

//設置為true 并會將圖片加載到內存中,但是可以獲取到圖片的寬和高 通過options

options.inJustDecodeBounds = true;

BitmapFactory.decodeResource(getResources(), R.drawable.ic_pic, options);

int outWidth = options.outWidth;

int outHeight = options.outHeight;

Log.d(TAG, "loadImage: width = " + outWidth);

Log.d(TAG, "loadImage: height = " + outHeight);

//這個地方根據獲取到大小和想要顯示的大小做縮放

options.inSampleSize = calculateInSampleSize(options, 200, 200);

Log.d(TAG, "loadImage: inSampleSize = " + options.inSampleSize);

//設置為false 這回再去解碼圖片可以將其讀取到內存中了。

options.inJustDecodeBounds = false;

mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_pic, options);

File file = new File(Environment.getExternalStorageDirectory(), "text_" + "just_100_no_inSampleSize.jpg");

FileOutputStream fileOutputStream = null;

try {

fileOutputStream = new FileOutputStream(file);

mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);

} catch (FileNotFoundException e) {

e.printStackTrace();

} finally {

if (fileOutputStream != null) {

try {

fileOutputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

// mImageView.setImageBitmap(mBitmap);

}

/**

* 計算圖片的縮放比例

*

* @param options

* @param reqHeight

* @param reqWidth

*/

private int calculateInSampleSize(BitmapFactory.Options options, int reqHeight, int reqWidth) {

int height = options.outHeight;

int width = options.outWidth;

//縮放的比例

int inSampleSize = 1;

if (height > reqHeight || width > reqWidth) {

int halfHeight = height / 2;

int halfWidth = width / 2;

while ((halfHeight / inSampleSize) >= reqHeight && (halfWidth / inSampleSize) >= reqWidth) {

inSampleSize *= 2;

}

}

return inSampleSize;

}

縮放法壓縮

減小圖片的像素,生成的圖片file的大小也變小了。

/**

* 尺寸壓縮中的 按縮放比壓縮 這里的縮放比是事先定義好的 和采樣率相比 采樣率是根據給定的預期大小去計算縮放比

*

* @param mBitmap

* @param mFile

*/

private void compressBitmapToFile(Bitmap mBitmap, File mFile) {

//設置壓縮倍數

int ratio = 2;

//壓縮Bitmap到對應的尺寸 壓縮格式 ARGB_8888 4字節 一個像素需要4個字節來存儲

Bitmap resultBitmap = Bitmap.createBitmap(mBitmap.getWidth() / ratio, mBitmap.getHeight() / ratio, Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(resultBitmap);

Rect rect = new Rect(0, 0, mBitmap.getWidth() / ratio, mBitmap.getHeight() / ratio);

canvas.drawBitmap(mBitmap, null, rect, null);

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

File file = new File(Environment.getExternalStorageDirectory(), "test_compress_100.jpg");

resultBitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);

try {

mFileOutputStream1 = new FileOutputStream(file);

mFileOutputStream1.write(byteArrayOutputStream.toByteArray());

mFileOutputStream1.flush();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

if (mFileOutputStream1 != null) {

try {

mFileOutputStream1.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

總結

以上是生活随笔為你收集整理的android 不压缩保存图片格式,Android中图片的压缩方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。