導航:首頁 > 文件處理 > android圖片壓縮演算法

android圖片壓縮演算法

發布時間:2022-08-24 18:57:23

android壓縮圖片的幾種方法比較

圖片有三種存在形式:硬碟上時是file,網路傳輸時是stream,內存中是stream或bitmap,所謂的質量壓縮,它其實只能實現對 file的影響,你可以把一個file轉成bitmap再轉成file,或者直接將一個bitmap轉成file時,這個最終的file是被壓縮過的,但 是中間的bitmap並沒有被壓縮(或者說幾乎沒有被壓縮,我不確定),因為bigmap在內存中的大小是按像素計算的,也就是width * height,對於質量壓縮,並不會改變圖片的像素,所以就算質量被壓縮了,但是bitmap在內存的佔有率還是沒變小,但你做成file時,它確實變小 了;
而尺寸壓縮由於是減小了圖片的像素,所以它直接對bitmap產生了影響,當然最終的file也是相對的變小了;

Ⅱ 怎麼樣壓縮圖片把大圖片變成100k以內的圖片

其實你用PS或者其他的軟體,將JPG的圖片壓縮,可以達到100K以內

Ⅲ android 圖片佔用內存大小怎麼計算

1、將圖片轉化為縮略圖再載入: 代碼如下 1 BitmapFactory.Options options = new BitmapFactory.Options(); 2 options.inSampleSize = 2; 3 Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options); 該段代碼即是讀取1.png的縮略圖,長度、寬度都只有原圖片的1/2。圖片大小減少,佔用的內存自然也變小了。這么做的弊端是圖片質量變差,inSampleSize的值越大,圖片的質量就越差。由於各手機廠商縮放圖片的演算法不同,在不同手機上的縮放圖片質量可能會不同。筆者就遭遇過moto手機上圖片縮放後質量可以接受,三星手機上同樣的縮放比例,質量卻差很多的情況。 2、用ARBG_4444顏色模式載入圖片: Android中有四種,分別是: ALPHA_8:每個像素佔用1byte內存 ARGB_4444:每個像素佔用2byte內存 ARGB_8888:每個像素佔用4byte內存 RGB_565:每個像素佔用2byte內存 Android默認的顏色模式為ARGB_8888,這個顏色模式色彩最細膩,顯示質量最高。但同樣的,佔用的內存也最大。 代碼如下 1 BitmapFactory.Options options = new BitmapFactory.Options(); 2 options.inPreferredConfig = Bitmap.Config.ARGB_4444; 3 Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options); 以上代碼即是將1.png以ARGB_4444模式讀出。內存減少雖然不如第一種方法明顯,但是對於大多數圖片,看不出與ARGB_8888模式有什麼差別。不過在讀取有漸變效果的圖片時,可能有顏色條出現。另外,會影響圖片的特效處理。 3、調用圖片的recycle()方法: 這個其實不是真正降低圖片內存的方法。主要目的是標記圖片對象,方便回收圖片對象的本地數據。圖片對象的本地數據佔用的內存最大,而且與程序java部分的內存是分開計算的。所以經常出現Java heap足夠使用,而圖片發生OutOfMemoryError的情況。在圖片不使用時調用該方法,可以有效降低圖片本地數據的峰值,從而減少OutOfMemoryError的概率。不過調用了recycle()的圖片對象處於“廢棄”狀態,調用時會造成程序錯誤。所以在無法保證該圖片對象絕對不會被再次調用的情況下,不建議使用該方法。特別要注意已經用setImageBitmap(Bitmap img)方法分配給控制項的圖片對象,可能會被系統類庫調用,造成程序錯誤。 4、使用Matrix對象放大的圖片如何更改顏色模式: 雖然使用Matrix對象放大圖片,必定會耗費更多的內存,但有時候也不得不這樣做。放大後的圖片使用的ARGB_8888顏色模式,就算原圖片是ARGB_4444顏色模式也一樣,而且沒有辦法在放大時直接指定顏色模式。可以採用以下辦法更改圖片顏色模式。 代碼如下 Matrix matrix = new Matrix(); float newWidth = 200;//圖片放大後的寬度 float newHeight = 300;//圖片放大後的長度 matrix.postScale(newWidth / img.getWidth(), newHeight/ img.getHeight()); Bitmap img1 = Bitmap.createBitmap(img, 0, 0, img.getWidth(), img.getHeight(), matrix, true);//得到放大的圖片 img2 = img1.(Bitmap.Config.ARGB_4444, false);//得到ARGB_4444顏色模式的圖片 img = null; img1 = null; 這里比起原來的圖片額外生成了一個圖片對象img1。但是系統會自動回收img1,所以實際內存還是減少了。

Ⅳ 怎麼把圖片壓縮到100K以內呀

將圖片壓縮到100k以內的方法如下:

首先打開計算機,在計算機內打開PS,然後在PS界面內找到」打開「選項並使用滑鼠單擊打開需要壓縮的圖片。然後在界面內找到」圖像「選項並單擊,再在彈出的選項欄內找到」圖像大小「選項並使用滑鼠單擊打開。

然後在彈出的界面內找到寬度和高度並將它們設置為100即可成功將圖片壓縮到100k以內。

文件格式

BMP格式

點陣圖(外語簡稱:BMP、外語全稱:Bitmap),它是Windows操作系統中的標准圖像文件格式,能夠被多種Windows應用程序所支持。隨著Windows操作系統的流行與豐富的Windows應用程序的開發,BMP點陣圖格式理所當然地被廣泛應用。

這種格式的特點是包含的圖像信息較豐富,幾乎不進行壓縮,但由此導致了它與生俱來的缺點——佔用磁碟空間過大,所以,BMP在單機上比較流行。

GIF格式

圖形交換格式(外語簡稱:GIF、外語全稱:Graphics Interchange Format),美國一家著名的在線信息服務機構CompuServe針對當時網路傳輸帶寬的限制,開發出了這種GIF圖像格式。

GIF格式的特點是壓縮比高,磁碟空間佔用較少,所以這種圖像格式迅速得到了廣泛的應用。最初的GIF只是簡單地用來存儲單幅靜止圖像(稱為GIF87a),後來隨著技術發展,可以同時存儲若干幅靜止圖像進而形成連續的動畫。

使之成為當時支持2D動畫為數不多的格式之一(稱為GIF89a),而在GIF89a圖像中可指定透明區域,使圖像具有非同一般的顯示效果,這更使GIF風光十足。在Internet上大量採用的彩色動畫文件多為這種格式的文件,也稱為GIF89a格式文件。

此外,考慮到網路傳輸中的實際情況,GIF圖像格式還增加了漸顯方式,也就是說,在圖像傳輸過程中,用戶可以先看到圖像的大致輪廓,然後隨著傳輸過程的繼續而逐步看清圖像中的細節部分,從而適應了用戶「從朦朧到清楚」的觀賞心理。

以上內容參考:網路-圖片

Ⅳ Android圖片壓縮與優化的幾種方式

1.使用的圖片最好用png格式

2.如果你的圖片仍然大的話可以在項目裡面點擊右鍵選擇convert to Webp,轉成webp格式圖片可以變小很多!

Ⅵ android 圖片質量壓縮和尺寸壓縮有什麼區別

這個方法用來將特定格式的壓縮圖片寫入輸出流(OutputStream)中,當然例如輸出流與文件聯系在一起,壓縮後的圖片也就是一個文件。如果壓縮成功則返回true,其中有三個參數:

format是壓縮後的圖片的格式,可取值:Bitmap.CompressFormat .JPEG、~.PNG、~.WEBP。

quality的取值范圍為[0,100],值越小,經過壓縮後圖片失真越嚴重,當然圖片文件也會越小。(PNG格式的圖片會忽略這個值的設定)

stream指定壓縮的圖片輸出的地方,比如某文件。

上述方法還有一個值得注意的地方是:當用BitmapFactory decode文件時可能返回一個跟原圖片不同位深的圖片,或者丟失了每個像素的透明值(alpha),比如說,JPEG格式的圖片僅僅支持不透明的像素。文章android圖片壓縮在文末提到的下面這點可能就是這個原因:

當調用bitmap.compress(CompressFormat.JPEG, 100, fos);保存為圖片時發現圖片背景為黑色,如下圖:

下面是質量壓縮的代碼:

(Bitmapbmp,Filefile){

ByteArrayOutputStreambaos=newByteArrayOutputStream();

intoptions=80;//個人喜歡從80開始,

bmp.compress(Bitmap.CompressFormat.JPEG,options,baos);

while(baos.toByteArray().length/1024>100){

baos.reset();

options-=10;

bmp.compress(Bitmap.CompressFormat.JPEG,options,baos);

}

try{

FileOutputStreamfos=newFileOutputStream(file);

fos.write(baos.toByteArray());

fos.flush();

fos.close();

}catch(Exceptione){

e.printStackTrace();

}

}

這段代碼來自Android圖片壓縮總結,我根據自己的需求改了改,但是大同小異,所以就直接貼了。

隨著代碼中的option逐漸變小,我們可以在logcat中列印baos的大小來查看圖片的大小。我們也可以去掉while的循環條件,一直壓縮下去看效果,最終一張照片可能就由原來的3、4M變成了幾百K甚至幾百B了。我在試的過程中將option設置成100,壓縮後偶爾會出現一張3、4M的圖片經過壓縮後竟變成了6、7M,這里還是有點困惑,不知道為什麼。

隨後,我想把這個壓縮後的圖片(1、200KB)填充到ImageView中時卻失敗了,logcat中提示圖片過大!這就是文章開頭提到的問題,雖然我們通過質量壓縮使File形式的圖片文件縮小了,但是並沒有改變圖片的寬高,原先是1080*1920解析度的圖片經壓縮後還是1080*1920,而File格式轉換成Bitmap格式進入到內存中時,內存是根據圖片的像素數量來給圖片分配內存大小的,還是有好幾M,因此填充ImageView失敗。

順便提一下,可以用bitmap.getByteCount()獲取存儲bitmap像素的內存大小,但是KITKAT(Android 4.4版本)以後用getAllocateByteCount()獲取。一般情況下,後者返回值比前者大,比如,當bitmap被重用去decode另外更小的bitmaps時,或者被人為地配置一下屬性值,比如setWidth()、setHeight()、reconfigure()時,如果bitmap不做以上操作,二者的返回值應該是一樣的。(譯文,不太懂)

二、尺寸壓縮

特點: 通過設置采樣率, 減少圖片的像素, 達到對內存中的Bitmap進行壓縮



我們主要通過BitmapFactory中的decodeFile方法對圖片進行尺寸壓縮:

publicstaticBitmapdecodeFile(StringpathName,BitmapFactory.Optionsopts)

public static Bitmap decodeFile (String pathName, BitmapFactory.Options opts)

其中有兩個參數:

pathName是圖片文件的路徑。

opts 就是所謂的采樣率,它里邊有很多屬性可以設置,我們通過設置屬性來達到根據自己的需要,壓縮出指定的圖片。其中比較常用的屬性有:

booleaninJustDecodeBounds—— 如果設置為true,則只讀取bitmap的寬高,而忽略內容。

intinSampleSize—— 如果>1,調用decodeFile方法後,就會得到一個更小的bitmap對象(已壓縮)。比如設置為2,那麼新Bitmap的寬高都會是原Bitmap寬高的1/2,總體大小自然就是原來的1/4了,以此類推。

booleaninPurgeable—— 如果設置為true,壓縮後的圖片像素占的內存將會在系統清理內存的時候被回收掉,當像素的信息再次被用到時將會自動重新decode該像素(比如getPixels()時)。(慎用!重復decode可以會造成UI的卡頓,API level 21 已棄用)

booleaninInputShareable—— 與inPurgeable配合使用,如果inPurgeable設置成false,自動忽略此值,如果inPurgeable為true,此值決定是否該bitmap能分享引用給輸入數據(inputstream,array等),或者必須進行深拷貝。API level 21 已棄用。(這是譯文,不太理解!!!)

下面是一段實現的代碼

privateBitmapsizeCompres(Stringpath,intrqsW,intrqsH){

//用option設置返回的bitmap對象的一些屬性參數

finalBitmapFactory.Optionsoptions=newBitmapFactory.Options();

options.inJustDecodeBounds=true;//設置僅讀取Bitmap的寬高而不讀取內容

BitmapFactory.decodeFile(path,options);//獲取到圖片的寬高,放在option里邊

finalintheight=options.outHeight;//圖片的高度放在option里的outHeight屬性中

finalintwidth=options.outWidth;

intinSampleSize=1;

if(rqsW==0||rqsH==0){

options.inSampleSize=1;

}elseif(height>rqsH||width>rqsW){

finalintheightRatio=Math.round((float)height/(float)rqsH);

finalintwidthRatio=Math.round((float)width/(float)rqsW);

inSampleSize=heightRatio<widthRatio?heightRatio:widthRatio;

options.inSampleSize=inSampleSize;

}

returnBitmapFactory.decodeFile(path,options);//主要通過option里的inSampleSize對原圖片進行按比例壓縮

}

private Bitmap sizeCompres(String path, int rqsW, int rqsH) {

// 用option設置返回的bitmap對象的一些屬性參數

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

options.inJustDecodeBounds = true;// 設置僅讀取Bitmap的寬高而不讀取內容

BitmapFactory.decodeFile(path, options);// 獲取到圖片的寬高,放在option里邊

final int height = options.outHeight;//圖片的高度放在option里的outHeight屬性中

final int width = options.outWidth;

int inSampleSize = 1;

if (rqsW == 0 || rqsH == 0) {

options.inSampleSize = 1;

} else if (height > rqsH || width > rqsW) {

final int heightRatio = Math.round((float) height / (float) rqsH);

final int widthRatio = Math.round((float) width / (float) rqsW);

inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;

options.inSampleSize = inSampleSize;

}

return BitmapFactory.decodeFile(path, options);// 主要通過option里的inSampleSize對原圖片進行按比例壓縮

}

上面就是簡單的質量壓縮與尺寸壓縮。

Ⅶ 微信朋友圈發圖壓縮厲害,有沒有解決辦法

微信朋友圈發圖壓縮厲害,目前還沒有好的解決辦法,綜合一些網友的方式可以參考。
工具:安卓/ios手機,微信
步驟:
1、把圖片尺寸做成橫5478X2732 豎2744X5496然後發朋友圈,基本無損畫質,只不過打開會消耗一點流量。
2、由 Android 客戶端上傳,可能是 Android 內置壓縮演算法的問題,圖片壓縮嚴重,iOS系統上傳 圖片質量明顯好一些。
3、iOS系統里在系統相冊選擇需要分享的圖片,然後點擊系統分享按鈕,再點擊微信圖標,之後分享到朋友圈,原理是利用iOS系統分享功能上傳照片時,系統分享功能無壓縮流程。
4、給微信官方團隊提建議,盡快優化 Android 端的壓縮演算法,然後起碼能根據網路環境載入不同質量的圖片,而不是僅僅看手機操作系統。

Ⅷ android 如何壓縮png圖片位元組數

如果你只是覺得程序背景圖片大的話 這個應該是美工的問題 找個專業的美工設計下就Ok的

如果是程序中想壓縮圖片的話 網上的方法很多

下面代碼是將圖片按比例大小壓縮方法(根據Bitmap圖片壓縮)

privateBitmapcomp(Bitmapimage){

ByteArrayOutputStreambaos=newByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG,100,baos);
if(baos.toByteArray().length/1024>1024){//判斷如果圖片大於1M,進行壓縮避免在生成圖片(BitmapFactory.decodeStream)時溢出
baos.reset();//重置baos即清空baos
image.compress(Bitmap.CompressFormat.JPEG,50,baos);//這里壓縮50%,把壓縮後的數據存放到baos中
}
ByteArrayInputStreamisBm=newByteArrayInputStream(baos.toByteArray());
BitmapFactory.OptionsnewOpts=newBitmapFactory.Options();
//開始讀入圖片,此時把options.inJustDecodeBounds設回true了
newOpts.inJustDecodeBounds=true;
Bitmapbitmap=BitmapFactory.decodeStream(isBm,null,newOpts);
newOpts.inJustDecodeBounds=false;
intw=newOpts.outWidth;
inth=newOpts.outHeight;
//現在主流手機比較多是800*480解析度,所以高和寬我們設置為
floathh=800f;//這里設置高度為800f
floatww=480f;//這里設置寬度為480f
//縮放比。由於是固定比例縮放,只用高或者寬其中一個數據進行計算即可
intbe=1;//be=1表示不縮放
if(w>h&&w>ww){//如果寬度大的話根據寬度固定大小縮放
be=(int)(newOpts.outWidth/ww);
}elseif(w<h&&h>hh){//如果高度高的話根據寬度固定大小縮放
be=(int)(newOpts.outHeight/hh);
}
if(be<=0)
be=1;
newOpts.inSampleSize=be;//設置縮放比例
newOpts.inPreferredConfig=Config.RGB_565;//降低圖片從ARGB888到RGB565
//重新讀入圖片,注意此時已經把options.inJustDecodeBounds設回false了
isBm=newByteArrayInputStream(baos.toByteArray());
bitmap=BitmapFactory.decodeStream(isBm,null,newOpts);
returncompressImage(bitmap);//壓縮好比例大小後再進行質量壓縮
}

【ps:看你自己的需要吧 給個地方做參考 http://my.eoe.cn/isnull/archive/564.html 你也可以搜索下 其他的方法 】

Ⅸ 圖片過大,要怎麼壓縮到1M以下

現在流行在線工具,圖片過大的話,適合用這個在線圖片壓縮工具,想把圖片文件的大小減到多少都行,比如你直接設置一下壓縮數值到1Mb,幾秒鍾就能把圖片的文件大小壓縮到1Mb了,你想要設定壓縮到多少大小,他壓縮完輸出的圖片就是多少Mb,挺方便的。在線智能圖片壓縮,壓縮圖片體積大小,PNG|JPG大圖縮小

在線圖片智能壓縮使用步驟:

一、首先點擊加號添加需要壓縮的圖片。目前已知支持對jpg、png等多種常見的圖片格式進行壓縮,如果上傳圖片並壓縮成功,則代表支持該圖片格式。
二、可以自行修改圖片需要被壓縮到的最大寬高尺寸,默認為圖片原始的寬高尺寸,且寬高比例是自動鎖定的。
三、必須設置圖片被壓縮後,期望輸出的圖片文件的最大佔用空間。(必填項)
四、選擇圖片生成的演算法。默認為混合優先演算法,絕大多數情況下使用默認演算法即可。
五、壓縮的設定值不能小於1Kb,但圖片壓縮的最終效果可以小於1Kb。

Ⅹ android照片像素很小但內存很大

文件的大小不一樣,是因為屬性不同
1.壓縮格式不一樣,壓縮演算法不同。比如JPG文件就比較小,BMP文件就非常大。JPG是壓縮比最好的圖片格式之一。
2、壓縮質量不一樣。同樣是JPG,壓縮質量也是有區別的。可以選擇10%的壓縮質量,效果非常差,但90%的質量,幾乎和不壓縮一樣。一般,JPG的壓縮比在70%以上,就和原圖的差距不大。
像素就相當於人的個子。兩個人個子一樣高,說明不了什麼,可能性別都不一樣。圖片也是一樣,像素只是畫面的大小,其它方面,完全是另一回事。

閱讀全文

與android圖片壓縮演算法相關的資料

熱點內容
廣東加密貨幣 瀏覽:210
利用python批量查詢系統 瀏覽:491
什麼app看左右臉 瀏覽:302
台灣小公主s解壓密碼 瀏覽:568
易語言鎖機軟體源碼 瀏覽:156
迅雷下載完成無法解壓 瀏覽:592
硬碟分區命令圖解 瀏覽:443
當前雲伺服器如何關閉 瀏覽:78
mac下python在哪 瀏覽:641
廣東惠州DNS伺服器地址 瀏覽:357
編譯影片時軟體渲染錯誤 瀏覽:625
流星蝴蝶劍解壓失敗 瀏覽:294
如何確認方舟編譯器 瀏覽:664
奶粉源箱源碼什麼意思 瀏覽:178
台州程序員兼職一般去哪些網站 瀏覽:388
舊版本怎麼下載到新的安卓 瀏覽:966
flash個人網站源碼下載 瀏覽:724
javasocketbyte 瀏覽:266
素描基礎教程pdf 瀏覽:542
香港商報pdf版 瀏覽:427