1. 程式人生 > >android 圖片壓縮避免記憶體溢位的解決辦法

android 圖片壓縮避免記憶體溢位的解決辦法

在android中的很多應用中都需要拍照上傳圖片,隨著手機的畫素越來越高,拍攝的圖片也越來越大。在拍攝後顯示的時候,使用universalimageloader.這個開源專案可以避免記憶體溢位。但是在上傳的時候,一般需要壓縮,但是壓縮的時候很容易導致記憶體溢位。解決的辦法就是,壓縮後的二進位制流,不用匯出Bitmap,而是直接儲存為本地檔案,上傳的時候直接通過本地檔案上傳。程式碼如下:

1.圖片壓縮獲取輸入流

/**
	 * 壓縮圖片獲取輸入流
	 * @param image
	 * @return
	 */
	public static InputStream compressImage3(Bitmap image) {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 質量壓縮方法,這裡100表示不壓縮,把壓縮後的資料存放到baos中
		int options = 100;
		while (baos.toByteArray().length / 1024 > 100) { // 迴圈判斷如果壓縮後圖片是否大於100kb,大於繼續壓縮
			baos.reset();// 重置baos即清空baos
			options -= 10;// 每次都減少10
			image.compress(Bitmap.CompressFormat.JPEG, options, baos);// 這裡壓縮options%,把壓縮後的資料存放到baos中

		}
		ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把壓縮後的資料baos存放到ByteArrayInputStream中
		//Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);// 把ByteArrayInputStream資料生成圖片
		//return bitmap;
		return isBm;
	}
	

 2.將輸入流寫入檔案,程式碼如下:

InputStream in=ImageLoadUtil.compressImage3(bitmap);
		
		if (!file.exists()) {
			try {
				file.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		try {
			FileOutputStream out = new FileOutputStream(file);
			byte[] buf=new byte[64];
			int len;
			while((len=in.read(buf))>-1){
				out.write(buf, 0, len);
			}
			//bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
			out.flush();
			out.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

相關推薦

android 圖片壓縮避免記憶體溢位解決辦法

在android中的很多應用中都需要拍照上傳圖片,隨著手機的畫素越來越高,拍攝的圖片也越來越大。在拍攝後顯示的時候,使用universalimageloader.這個開源專案可以避免記憶體溢位。但是在上傳的時候,一般需要壓縮,但是壓縮的時候很容易導致記憶體溢位。解決的辦法就是,壓縮後的二進位制流,不用匯出B

J2EE專案記憶體溢位解決辦法總結

提示:Caused by: java.lang.OutOfMemoryError: PermGen space 前段時間,發現專案記憶體溢位了。apache+tomcat叢集。解決辦法如下: 1.  用jprofile工具查詢專案情況。或者用JDK自帶的工具。如:jcon

Tomcat記憶體溢位解決辦法

如果是eclipse記憶體溢位引起的錯誤,修改eclipse.ini檔案如下: -Xms128M -Xmx512M -XX:PermSize=512M -XX:MaxPermSize=1024m 如果是tomcat記憶體溢位引起的錯誤,加上這個引數 -Xms256M -

IDEA記憶體溢位解決辦法

1、不要通過idea.exe啟動,而是通過idea64.exe啟動IDEA 2、修改引數檔案為idea.exe.vmoptions 原檔案為: -server -Xms128m -Xmx102

android 圖片透明色變成黑色解決辦法

原因是因為圖片進行快取到本地,再取出時,圖片格式被壓縮錯誤。 比如,原圖為png的型別,但是 bmp.compress(Bitmap.CompressFormat.JPEG, 100,outputStream); 被預設為了JPEG。所以透明的地方肯定出現錯誤

記憶體溢位解決辦法

eclipse->preference->java->Installed JREs->選擇JDK->edit -> Default VM Arguments: 增加

Android利用縮放載入大圖片避免記憶體溢位

因為安卓的堆記憶體有限(儘管現在隨著安卓手機螢幕解析度的提高堆記憶體沒有以前小螢幕時代那麼侷限),要是完全載入一張大圖片很容易導致OOM(out of memory)的問題。 所以為了解決這一情況,我

Android避免記憶體溢位(Out of Memory)方法總結

避免記憶體溢位的方法,主要是對以下三個方面對程式進行優化 記憶體引用 在處理記憶體引用之前,我們先來複習下什麼是強引用、軟引用、弱引用、虛引用 強引用:強引用是使用最普遍的引用。如果一個物件具有強引用,那垃圾回收器絕不會回收它。 當記憶體空間不足,Java虛擬機器寧願丟擲O

Android 記憶體溢位解決方案 (整理)

<span style="font-size:14px;">在最近做的工程中發現載入的圖片太多或圖片過大時經常出現OOM問題,找網上資料也提供了很多方法,但自己感覺有點亂,特此,今天在不同型號的三款安卓手機上做了測試,因為有效果也有結果,今天小馬就做個詳細的總結

Android 載入圖片過程導致記憶體溢位(Out Of Memory)

載入圖片的時候,啪啪啪就OOM了。 解決圖片OOM之前,先來了解一下一張圖片記憶體佔用的相關因素——圖片質量,圖片尺寸,填充區域 圖片質量 質量就是圖片大小(多少MB,多少KB)。相對情況下圖片越大,佔用記憶體越大 圖片尺寸 圖片尺寸=圖片的寬高,

android檔案快取及SD卡建立資料夾失敗解決和bitmap記憶體溢位解決

 1.相關程式碼:    新增許可權: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:na

Android 記憶體溢位解決方案(OOM) 整理總結

在最近做的工程中發現載入的圖片太多或圖片過大時經常出現OOM問題,找網上資料也提供了很多方法,但自己感覺有點亂,特此,今天在不同型號的三款安卓手機上做了測試,因為有效果也有結果,今天小馬就做個詳細的總結,以供朋友們共同交流學習,也供自己以後在解決OOM問題上有所提高,提前講下,片幅有點長,涉及的東西太

android圖片壓縮終極解決方案

如題,多種壓縮方式常用的有尺寸壓縮、質量壓縮以及通過JNI呼叫libjpeg庫來進行壓縮,三種方式結合使用實現指定圖片記憶體大小,清晰度達到最優,下面就先分別介紹下這幾種壓縮方式。 原文出處:http://www.jianshu.com/p/e9e1db845c21 1. 質量壓縮 設定bitmap

Android記憶體溢位解決方案(OOM)

眾所周知,每個Android應用程式在執行時都有一定的記憶體限制,限制大小一般為16MB或24MB(視平臺而定)。因此在開發應用時需要特別關注自身的記憶體使用量,而一般最耗記憶體量的資源,一般是圖片、音訊檔案、視訊檔案等多媒體資源;由於Android系統對音訊、視訊等資源做了邊解析便播放的處理,使用時並不

Android圖片壓縮終極解決方案,是的,終極,終極,終極

沒錯,第一篇技術部落格就給大家帶來一重磅炸彈,絕對實用,圖片壓縮,在這裡你將看到2.5M如何無損的變為200多kb,差不多十分之一吧,重點,請注意重點,無損,無損,無損! 我們開發中常見的就是圖片,當然,平時簡簡單單的顯示什麼的就算了,各種框架給你處理,縮圖啥的都有,那

關於設定圖片時,記憶體溢位解決方法

不知道大家在使用ImageView的setImageBitmap方法時,有沒有遇到過一旦給ImageView設定比較大的圖片,就會導致記憶體溢位這樣的問題。希望我所用的方法在一定程度上可以幫助大家~~ 廢話不多說,開始搞事情~~ /** * 通過圖片路徑讀取圖片並通過

Android下的,OOM記憶體溢位解決方法\AsyncTask

在Android平臺上面,應用程式OOM異常永遠都是值得關注的問題。通常這一塊也是程式這中的重點之一。這下我就如何解決OOM作一點簡單的介紹。     首先,OOM就是記憶體溢位,即Out Of Memory。也就是說記憶體佔有量超過了VM所分配的最大。     怎麼解決

Android 圖片壓縮的方法大全

方法 nal ons arr reset 註意 you 固定 .com public static Bitmap revitionImageSize(String path) throws IOException { BufferedInputStream in

android studio更新gradle失敗的解決辦法-轉

簡書 wrapper all mina wrap 技術 有一個 class tar android studio中每次自動更新gradle時速度實在太慢因為gradle服務器比較慢,所以更新gradle會比較慢,建議先下載下來,然後手動添加到gradle的下載目

Java服務端返回多張圖片到客戶端的解決辦法

    這兩天和其他公司的猿同胞合作完成了一個從服務端返回多張圖片到客戶端的任務。這個事情看似很簡單,但其中有幾個點是很容易犯錯誤的。     1.服務端返回多張圖片,而不是一張,且具體多少張,客戶端事先不知道。     我們知道,返回