我正在尝试设计一种通过 Couchbase-Lite (Android) 存储多个高质量图像的方法,方法是将它们转换为 Base64 字符串并将它们存储在 Couchbase 文档中,而不会完全耗尽内存。
我当前的实现循环遍历本地存储的图像文件的名称列表(“image_file_names”),依次解码每个文件,捕获 ByteArray 表示,编码为 Base64 字符串,然后将该值插入 ArrayList。
这里需要注意的是:1)图像质量必须是最高可用的,2)图像的数量是完全可变的(0个或更多,没有限制)
我目前的实现如下:
ArrayList<byte[]> image_data_byte = new ArrayList<byte[]>();
ArrayList<String> image_data_string = new ArrayList<String>();
for (String image_file_name : image_file_names)
{
String image_file_path = files_directory + File.separator + image_file_name;
File image_file = new File(image_file_path);
{
ByteArrayOutputStream bitmap_stream = new ByteArrayOutputStream();
Bitmap bitmap = BitmapFactory.decodeFile(image_file.getAbsolutePath());
bitmap.compress(CompressFormat.JPEG, 100, bitmap_stream);
image_data_byte.add(bitmap_stream.toByteArray());
String image_string = Base64.encodeToString(bitmap_stream.toByteArray(), Base64.NO_WRAP);
image_data_string.add(image_string);
}
}
到目前为止,我发现的每条信息都与显示图像(通过异步任务)或通过 HTTP 上传图像有关,但就我而言,我并没有尝试显示图像,所有上传都是通过 Couchbase 处理——我试图在将文档插入 Couchbase 之前达到我有字符串表示的点。
失败的行具体是:
String image_string = Base64.encodeToString(bitmap_stream.toByteArray(), Base64.NO_WRAP);
和:
Caused by: java.lang.OutOfMemoryError
任何指导将不胜感激。