android壓縮圖片質量,Android 圖片質量壓縮有關問題

Android 圖片質量壓縮問題

本帖最后由 u013064347 于 2014-01-13 10:22:47 編輯

網上看到一個圖片質量壓縮法,傳入1M以內圖片能正常壓縮,但是傳入2M多的圖片就報內存溢出,應該怎么解決?附上代碼

Bitmap?images=BitmapFactory.decodeFile(filePath);//這里傳入圖片會報內存溢出!

public?Bitmap?compressImage(Bitmap?image)?{

ByteArrayOutputStream?baos?=?new?ByteArrayOutputStream();

image.compress(Bitmap.CompressFormat.JPEG,?100,?baos);//?質量壓縮方法,這里100表示不壓縮,把壓縮后的數據存放到baos中

int?options?=?90;

int?longs=baos.toByteArray().length;

while?(baos.toByteArray().length/1024??>?100)?{?//?循環判斷如果壓縮后圖片是否大于100kb,大于繼續壓縮

baos.reset();//?重置baos即清空baos

image.compress(Bitmap.CompressFormat.JPEG,?options,?baos);//?這里壓縮options%,把壓縮后的數據存放到baos中

longs=baos.toByteArray().length;

options?-=?10;//?每次都減少10

}

ByteArrayInputStream?isBm?=?new?ByteArrayInputStream(baos.toByteArray());//?把壓縮后的數據baos存放到ByteArrayInputStream中

Bitmap?bitmap?=?BitmapFactory.decodeStream(isBm,?null,?null);//?把ByteArrayInputStream數據生成圖片

return?bitmap;

}

分享到:

更多

------解決方案--------------------

//?取得圖片

InputStream?temp?=?this.getAssets().open(path);

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

//?這個參數代表,不為bitmap分配內存空間,只記錄一些該圖片的信息(例如圖片大小),說白了就是為了內存優化

options.inJustDecodeBounds?=?true;

//?通過創建圖片的方式,取得options的內容(這里就是利用了java的地址傳遞來賦值)

BitmapFactory.decodeStream(temp,?null,?options);

//?關閉流

temp.close();

//?生成壓縮的圖片

int?i?=?0;

Bitmap?bitmap?=?null;

while?(true)?{

//?這一步是根據要設置的大小,使寬和高都能滿足

if?((options.outWidth?>>?i?<=?size)

&&?(options.outHeight?>>?i?<=?size))?{

//?重新取得流,注意:這里一定要再次加載,不能二次使用之前的流!

temp?=?this.getAssets().open(path);

//?這個參數表示?新生成的圖片為原始圖片的幾分之一。

options.inSampleSize?=?(int)?Math.pow(2.0D,?i);

//?這里之前設置為了true,所以要改為false,否則就創建不出圖片

options.inJustDecodeBounds?=?false;

bitmap?=?BitmapFactory.decodeStream(temp,?null,?options);

break;

}

i?+=?1;

}

return?bitmap;

------解決方案--------------------

http://bbs.csdn.net/topics/390432950

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532205.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532205.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532205.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python標準庫os_Python基礎--人們一些最愛的標準庫(sys os fileinput)

這篇博客就介紹介紹常見的、人們鐘愛的python中的標準庫。 sys 從字面上也能看出來&#xff0c;是system的縮寫。這個模塊能夠訪問與python解析器緊密聯系的變量和函數。 argv 命令行參數 exit 退出當前程序 modules 映射模塊名到載入模塊的字典 path 目錄 platform 平臺標識符…

android區域截圖app,【干貨】最新App應用市場截圖尺寸大全

今天給大家分享最新的干貨&#xff0c;剛好碰上這段時間設計市場截圖&#xff0c;所以給各位設計新人&#xff0c;分享本人整合的尺寸大全&#xff0c;希望對你們的設計之路有所幫助。一、IOS App Store尺寸尺寸(機型) 大小(px)3.5寸(iphone4/4s)…

python如何運行一個python程序_在python中,如何運行一個命令行程序,它在發送Ctrl+D之前不會返回...

由于沒有人提供任何代碼來幫助解決這個問題&#xff0c;我將做如下的事情。結果發現pexpect非常強大&#xff0c;而且您不需要signal模塊。在import os import sys import pexpect def run_server(): server_dir /path/to/server/root current_dir os.path.abspath(os.curdir…

android app外喚起,Android 喚起app的多種方式

方式一(通過Intent喚起)&#xff1a;我們自己的app代碼&#xff1a;ComponentName componetName new ComponentName("com.lh.jimtrency.webviewdemo","com.lh.jimtrency.webviewdemo.MainActivity");//(另外一個應用程序的包名&#xff0c;要啟動的Activi…

2018python做圖形界面哪個庫簡單_2018年常見的python編程開發庫都有哪些類型

python編程開發可以說是目前比較熱門的一項編程開發語言了&#xff0c;而今天我們就一起來了解一下&#xff0c;關于python編程都有哪些常見的python庫可以使用。1、TensorFlow “TensorFlow是一個使用數據流圖進行數值計算的開源軟件庫。圖形節點表示數學運算&#xff0c;而圖…

android條形圖,MPAndroid組條形圖未顯示

這個問題已經在這里有了答案&#xff1a;????????????>????????????How to check if activity is in foreground or in visible background?????????????????????????????????????22個這是我用于使用MPAndroi…

c++ socket線程池_java 網絡編程,Socket編程

Java的網絡編程主要涉及到的內容是Socket編程&#xff0c;那么什么是Socket呢&#xff1f;簡單地說&#xff0c;Socket&#xff0c;套接字&#xff0c;就是兩臺主機之間邏輯連接的端點。TPC/IP協議是傳輸層協議&#xff0c;主要解決數據如何在網絡中傳輸&#xff0c;而HTTP是應…

android簽名忘記密碼,修改Android簽名證書keystore的密碼、別名alias以及別名密碼

之前在測試Eclipse ADT的Custom debug Eclipse ADT的Custom debug keystore所需證書規格&#xff0c;提到過自定義調試證書的密碼和1. 首先當然是先復制一份正式證書出來作為要修改為的臨時調試證書。2. 修改keystore密碼的命令(keytool為JDK帶的命令行工具)&#xff1a;keytoo…

python列表轉換成數字_Python中列表元素轉為數字的方法分析

本文實例講述了Python中列表元素轉為數字的方法。分享給大家供大家參考&#xff0c;具體如下&#xff1a; 有一個數字字符的列表&#xff1a; numbers [1, 5, 10, 8] 想要把每個元素轉換為數字&#xff1a; numbers [1, 5, 10, 8] 用一個循環來解決&#xff1a; new_numbers …

android 繪圖軟件,安卓最強大的繪圖軟件 妙筆生花最新評測

妙筆生花——繪畫體驗(一)看過使用教程之后&#xff0c;就能進入到真正的功能頁面了。功能頁面的首頁只有一個按鈕&#xff0c;點擊頁面下端的這個按鈕之后&#xff0c;就能跳出功能強大的工具選擇頁面。【妙筆生花】——工具選擇頁OK&#xff0c;接下來&#xff0c;小編會使用…

識別物體是否存在_【科學實踐Vol.1】帶你玩轉“人臉識別”

隨著時代的發展&#xff0c;人臉識別在我們的生活中變得隨處可見&#xff1a;商場里的人臉識別儲物柜&#xff0c;校園里的人臉識別刷卡機&#xff0c;手機里的面部解鎖……這些應用極大的便利了我們的日常生活。今天&#xff0c;就讓我們一起走進人臉識別的原理世界。首先我們…

html 自動適應手機屏幕大小,HTML5 canvas自適應手機屏幕大小的一種解決方案

一、最終效果為了不浪費大家時間&#xff0c;先展示最終效果&#xff0c;看看是不是大家需要的解決方案&#xff1a;標準分辨率&#xff1a;其他分辨率的適配情況&#xff1a;二、需求1.canvas的內容能全部展示在屏幕上2.盡量能保證圖像不變形3.繪制的文字也能自適應三、解決方…

編寫一個能夠排序的函數模板。_LeetCode刷題——9.給出n對括號,請編寫一個函數來生成所有的由n對括號組成的合法組合...

難度(medium)題目描述&#xff1a;給出n對括號&#xff0c;請編寫一個函數來生成所有的由n對括號組成的合法組合。例如n3&#xff0c;解集為&#xff1a; "((()))", "(()())", "(())()", "()(())", "()()()" 思路&#xf…

html5怎么產生手風琴效果,Html5 js如何實現手風琴效果

Html5 js如何實現手風琴效果發布時間&#xff1a;2020-08-03 09:54:10來源&#xff1a;億速云閱讀&#xff1a;92作者&#xff1a;小豬這篇文章主要為大家展示了Html5 js如何實現手風琴效果&#xff0c;內容簡而易懂&#xff0c;希望大家可以學習一下&#xff0c;學習完之后肯定…

c++進制轉換_一文了解進制之間的原理和轉換

點擊這段文字&#xff1a; 獲取2020年&#xff0c;最強Python學習資料進制這塊&#xff0c;可以做簡單的了解。生活中我們使用的數字都是十進制的&#xff0c;而二進制是機器能夠識別的最直接的語言。但是二進制又太大&#xff0c;記錄起來非常的不方便。所以通常會將二進制轉化…

用HTML做一個簡單的web登錄頁面,簡單的JavaWeb注冊登錄案例

簡單的JavaWeb注冊登錄案例1.注冊頁面register.htmlregister姓名&#xff1a;電話&#xff1a;郵箱&#xff1a;qq&#xff1a;2.注冊案例實現程序register.java/*** 注冊案例實現程序* author lucky**/public class register extends HttpServlet {public void doGet(HttpServ…

一層循環時間復雜度_算法的時間與空間復雜度(一看就懂)

算法&#xff08;Algorithm&#xff09;是指用來操作數據、解決程序問題的一組方法。對于同一個問題&#xff0c;使用不同的算法&#xff0c;也許最終得到的結果是一樣的&#xff0c;但在過程中消耗的資源和時間卻會有很大的區別。那么我們應該如何去衡量不同算法之間的優劣呢&…

用ajax替換html代碼,替換Ajax響應一個div的內部HTML(Replace inner HTML of a div w

我試圖一些時間間隔后改變一個div的內部HTML。 我得到我想要使用Ajax正確的反應。 但無法取代內HTML的后&#xff0c;并用Ajax響應地選擇。 什么是錯我的代碼..HTML51 seconds ago58 seconds ago.....10 minute ago?查詢setInterval(function() {$( ".time" ).each(…

java 審批流_一文讀懂工作流

網上關于工作流引擎有比較多的簡介&#xff0c;也有很多工作流的實際應用場景。本文結合筆者多年對工作流的經驗來闡述一下對工作流的理解。一、什么是工作流&#xff1f;先貼上wiki百科對于工作流的定義工作流&#xff08;Workflow&#xff09;&#xff0c;是對工作流程及其各…

html制作卡通圖案代碼,CSS畫的卡通動畫圖案

CSS語言&#xff1a;CSSSCSS確定* {padding: 0;margin: 0;}body {background: #26ad00;}.head {background: #ff8cb2;width: 70vw;height: 50vw;position: absolute;top: calc(50% - 25vw);left: calc(50% - 35vw);z-index: 2;border-radius: 90% 90% 80% 80% / 120% 120% 60% …