2016-09-20 53 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[]水平。