2017-03-28 159 views
0

我在SD卡上有一個很大的圖像文件,我想在上傳到服務器之前進行壓縮。但要使用Bitmap.compress(CompressFormat format, int quality, OutputStream stream)來壓縮圖像,我們需要將圖像讀入內存並保存壓縮版本。 有沒有辦法生成圖像的壓縮版本,而不會將位圖讀入內存。在沒有讀入內存的情況下壓縮圖像

我正在使用以下代碼進行壓縮。

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inJustDecodeBounds = false; 
options.inPreferredConfig = Bitmap.Config.ARGB_8888; 

Bitmap finalBitmap = BitmapFactory.decodeFile(originalFile.getAbsolutePath(), options);  

File local = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "/my_images"); 
local.mkdirs(); 
File compressedFile = new File(local, "test.jpg"); 
FileOutputStream out = new FileOutputStream(compressedFile); 
finalBitmap.compress(Bitmap.CompressFormat.JPEG, 70, out); 
+1

將位圖保存在磁盤上並壓縮文件。 –

+0

圖像已保存在磁盤上,大小約爲100MB。所以我不想將位圖加載到內存中,因爲它會導致OOM。我需要的是創建一個壓縮版本的文件,以優化上傳時間。你上傳圖片的格式是 – Ammar

+0

? –

回答

0

BitmapFactory可以在從磁盤讀取的同時調整圖像文件的大小。你最終得到一個小的位圖。然後壓縮該位圖文件並上傳該文件。

+0

我不想縮小圖像,而是需要使用某些壓縮來縮小原始縮放圖像以縮小上傳時間。 – Ammar

+0

jpeg是您可以在移動端進行的最佳壓縮。即使在那之後,如果它是100 MB,那麼你如何生成圖像就有問題了@Ammar –

+0

'我需要通過一些壓縮來縮小原始縮放圖像,以縮短上傳時間。 '。不可能。一個jpg已經是最大壓縮。尺寸只能降低質量。但爲此,您首先必須創建不可能的位圖。你如何制定你的問題是可怕的。 – greenapps

相關問題