2016-12-24 98 views
2

我有一個高分辨率imageUri,我想降低圖像質量和尺寸,因爲我上傳到服務器,然後作爲較小版本的原始圖片。較低的圖像質量,以減小文件大小

我嘗試這樣做:

Picasso.with(context).load(image).resize(100,100).get(); 

,因爲你需要從一個單獨的Thread做到這一點,當調整大小是在我沒有找到一個傾聽者,告訴你它沒有工作。

有沒有人有解決方案,可以降低圖像質量以獲得更小的文件大小?

回答

1

步驟#1:致電openInputStream()ContentResolver,傳入您的Uri

步驟#2:創建一個BitmapFactory.Options對象,使用inSampleSize來控制要執行的縮減採樣的程度,以創建較低分辨率的Bitmap

步驟3:將流和BitmapFactory.Options對象傳遞給BitmapFactory上的decodeStream(),以獲得下采樣的Bitmap

步驟#4:上傳那個Bitmap,其中的細節會隨着您用來上傳的任何API(byte[],File等)而有所不同。

第五步:執行步驟#1-4在後臺線程,因爲你不應該做的磁盤I/O,位圖下采樣,以及主應用程序線程上的網絡操作。

1
BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inSampleSize = 50; 
Bitmap bmpSample = BitmapFactory.decodeFile(fileUri.getPath(), options); 

ByteArrayOutputStream out = new ByteArrayOutputStream();     
bmpSample.compress(Bitmap.CompressFormat.JPEG, 1, out); 
byte[] byteArray = out.toByteArray(); 
return convertToUri(byteArray); 

謝謝Android: Compress Bitmap from Uri

+0

你如何轉換ByteArray的烏里在convertToUri? –