将位图转换为Base64字符串会导致OutOfMemory错误

时间:2015-02-21 03:19:24

标签: android bitmap base64 android-bitmap

我目前正在使用以下方法将位图转换为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编码的字符串?

3 个答案:

答案 0 :(得分:2)

bmp.compress(Bitmap.CompressFormat.JPEG, (AS LOWER), baos);
bmp.compress(Bitmap.CompressFormat.JPEG, 50, baos);

您可以降低质量水平,然后再正常工作

答案 1 :(得分:0)

这很可能是因为您的最终字符串太大以及转换所需的临时空间。如果你想要这样的非常大的字符串,你需要使用流和流出过程。

也就是说,从输入流转换字符串并将结果流回到文件中。

答案 2 :(得分:0)

您不必一次加载大文件,将其加载到块中,这不会导致outofmemoryexception。 请参阅此link以将大块数据转换为base64字符串