我目前正在使用以下方法将位图转换为Base64编码的字符串,但是对于非常大的图像,我收到了OutOfMemory错误:
public static String convertBitmapToBase64String(Bitmap bmp) throws OutOfMemoryError
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] byteArrayImage = baos.toByteArray();
String base64EncodedImg = Base64.encodeToString(byteArrayImage, Base64.DEFAULT);
return base64EncodedImg;
}
我看到了这个答案,但它使用了IOUtils:https://stackoverflow.com/a/24877734/720175
是否可以仅使用通常包含的标准库将大位图转换为base64编码的字符串?
答案 0 :(得分:2)
bmp.compress(Bitmap.CompressFormat.JPEG, (AS LOWER), baos);
bmp.compress(Bitmap.CompressFormat.JPEG, 50, baos);
您可以降低质量水平,然后再正常工作
答案 1 :(得分:0)
这很可能是因为您的最终字符串太大以及转换所需的临时空间。如果你想要这样的非常大的字符串,你需要使用流和流出过程。
也就是说,从输入流转换字符串并将结果流回到文件中。
答案 2 :(得分:0)
您不必一次加载大文件,将其加载到块中,这不会导致outofmemoryexception。 请参阅此link以将大块数据转换为base64字符串