我目前编码和解码图像到Base64。我利用流将图像编码为字符串,克服了OOM的最初问题。安卓图像上传/下载与Base64到JSON导致内存不足错误
我现在的问题是我无法理解如何通过Gson将多个Base64编码的字符串添加到JSON对象的多个分辨率图像(5620 x 3747 - 4.92MB或3264 x 1836 - 1.35MB)。目前,Gson仅从5312 x 2988 - 4.95 MB图像引发2个Base64字符串时引发OOM异常。
据我所知,android可能只能够为每个应用程序腾出16/20Mb,所以这个转换必须超出限制。
如何在流中将Base64字符串写入JSON对象,该对象将包含发布到我的服务器所需的特定值?
将服务器更改为接受多部分请求而不是使用多个Base64字符串的基于JSON的POJO会更容易吗?我目前使用Volley,并没有官方的多部分请求以及IO流。
如果是压缩问题,在编码到Base64字符串之前应该对图像应用多少压缩?理想情况下,我希望几乎没有任何质量损失,但具有最佳的压缩级别。
位的更多信息
我上传多个不同分辨率的图像,因为它是兼容性测试。例如,我发送的所有图像都是在低分辨率和极高分辨率的设备上拍摄的,因为我的应用依靠这些图像来实现功能。我试图证明我的应用程序可以处理任何图像(某种程度上,主要是在移动设备上捕获的图像)。
我知道一些图像可能会很大,以至于将它们加载到内存中会导致异常。这是我稍后会尝试和处理的。
在某些情况下,将被上传可以从1〜200
我试图寻找最优的解决方案,将很好地扩展跨越图像。
如果你想使用Mutipart Request和Volley,IMO,你可以参考我的示例代码https://github.com/ngocchung/VolleyNoApache/blob/master/app/src/main/java/com/example/ volleynoapache/MultipartActivity.java。在@ kevinkl3答案,http://stackoverflow.com/a/16803473/3393666我也有一个答案 – BNK