存储后android图像文件大小增加

存储后android图像文件大小增加,android,image,download,local-storage,Android,Image,Download,Local Storage,我正在使用.loadImageSync(imageURL)方法从服务器下载图像文件 然后我需要将该位图保存到用户设备外部存储器中 File File=新文件(mContext.getExternalFilesDir(null)+directoryMediatePath,fileName); FileOutputStream FileOutputStream=新的FileOutputStream(文件); compress(bitmap.CompressFormat.PNG,100,fileOut

我正在使用.loadImageSync(imageURL)方法从服务器下载图像文件

然后我需要将该位图保存到用户设备外部存储器中

File File=新文件(mContext.getExternalFilesDir(null)+directoryMediatePath,fileName); FileOutputStream FileOutputStream=新的FileOutputStream(文件); compress(bitmap.CompressFormat.PNG,100,fileOutputStream)

fileOutputStream.flush()

fileOutputStream.close()


我的问题是,我的服务器上的.png文件大小约为200KB,在android设备存储上执行此过程后将变为700KB左右。

您可以尝试减少
位图中的质量参数。将
压缩到小于100的值。但是,对于无损格式的PNG图像,位图将忽略质量参数。因此,一个选项是转换为JPEG以缩小尺寸。例如,使用以下行:

bitmap.compress(Bitmap.CompressFormat.JPEG, 60, fileOutputStream);
有关位图压缩的详细信息,请选中


如果你想使用PNG缩小到一个特定的大小,你必须重新缩放你的图像;因此,链接可能很有用。

您不应该将加载的映像保存到磁盘。相反,您应该使用已下载的文件

如果我没弄错的话,Android通用映像加载程序库使用磁盘缓存

如果您在构建ImageLoader配置时设置了特定的DiskCache实现,您应该能够稍后访问此DiskCache并通过以下方式检索它:

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

然后,您只需在
字节[]
级别复制文件。

而不是将文件压缩为100,将其更改为70或80,这将减少您的大小。但这样我无法计算用户设备上的文件大小,我想确保质量和大小与我的服务器上的相同。@SilentKiller由于PNG使用无损压缩,我怀疑降低质量是否有任何效果。@ManishJain降低图像大小的方法只有两种,一种是降低质量,但正如Henry所说,PNG使用无损压缩,所以这一种方法不会影响和降低质量另一种方法是,你应该缩小(缩放)图像的大小(高度、宽度),然后将其存储到sd卡上。图像大小也取决于宽度和高度。在将位图保存到Android之前,请缩小位图的比例。这会有帮助。问题根本不是关于.jpeg文件,而是关于.png文件。另一件事是,它不是关于减小文件大小,而是关于保持从服务器下载文件时实际保存的文件大小。@ManishJain,使用JPEG只是为了减小文件大小的一个选项。这个问题不清楚存储的图像是否应该是相同的格式。如果你想保持图像为PNG,那么我的答案中提到的链接将很有帮助。希望这有帮助。