2016-09-20 55 views
-1

我使用Android-Universal-Image-Loader從我的服務器使用.loadImageSync(imageURL)方法下載圖像文件。存儲後增加的android圖像文件大小

然後我需要將該位圖保存到用戶設備的外部存儲。

File file = new File(mContext.getExternalFilesDir(null)+ directoryIntermediatePath,fileName); FileOutputStream fileOutputStream = new FileOutputStream(file);bitmap.compress(Bitmap.CompressFormat.PNG,100,fileOutputStream);

fileOutputStream.flush();

fileOutputStream.close();

我的問題是我的服務器上保存大小約爲200KB的.png文件,這將在安卓設備存儲過程中變成大約700KB。

+0

而不是質量壓縮到100將其更改爲70或80,這將減少您的大小。 – SilentKiller

+0

但是這種方式我不能確定用戶設備上的文件大小,我想確保質量和大小與我的服務器上的大小相同。 –

+0

@SilentKiller自PNG使用無損壓縮我懷疑降低質量有什麼影響。 – Henry

回答

-1

您可以嘗試降低質量參數bitmap.compress一些值小於100。然而,對於PNG圖像,這是一種無損格式,位圖會忽略質量參數。所以,一個選項是轉換爲JPEG以縮小尺寸。例如,使用該行:

bitmap.compress(Bitmap.CompressFormat.JPEG, 60, fileOutputStream); 

欲瞭解更多有關bitmap.compress,檢查here

如果您想要使用PNG縮小到特定尺寸,則必須重新縮放圖像; this SO鏈接可能會有用。

+0

問題並不是關於.jpeg文件,它與.png文件相關。另一件事是,它不是減少文件大小,而是保持文件實際從服務器下載時保持的相同大小。 –

+0

@ManishJain,使用JPEG只是一個選項,以減少文件大小。在問題中不清楚存儲的圖像應該具有相同的格式。如果您希望將圖片保存爲PNG,那麼我的答案中提到的鏈接將會有所幫助。希望這可以幫助。 –

0

您不應該將加載的映像保存到磁盤。相反,您應該使用已下載的文件。

如果我正確的話,Android-Universal-Image-Loader庫使用磁盤緩存。

如果你設定具體的實施DiskCache建設的同時,你應該能夠稍後訪問此DiskCache後來通過檢索它的ImageLoaderConfiguration:

File f = DiskCacheUtils.findInCache(imageURL, diskCache); 

然後你只需要複製該文件上byte[]水平。