我通过论坛搜索这个,但我找不到好的解决方案。我找到了非常相似的主题,但没有帮助。
当我尝试将大图像文件编码为base64时我有问题。我尝试使用较低质量但我再次遇到大文件问题..我使用:
public String BitMapToString(Bitmap bitmap,String Ext){
ByteArrayOutputStream baos=new ByteArrayOutputStream();
if(Ext.equals("png")){
bitmap.compress(Bitmap.CompressFormat.PNG, 50, baos);
}else{
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, baos);
}
byte [] b=baos.toByteArray();
String temp = null;
try {
System.gc();
temp = Base64.encodeToString(b, Base64.DEFAULT);
} catch (Exception e) {
e.printStackTrace();
} catch (OutOfMemoryError e) {
baos = new ByteArrayOutputStream();
if (Ext.equals("png")) {
bitmap.compress(Bitmap.CompressFormat.PNG, 20, baos);
} else {
bitmap.compress(Bitmap.CompressFormat.JPEG, 20, baos);
}
b = baos.toByteArray();
temp = Base64.encodeToString(b, Base64.DEFAULT);
Log.e("EWN", "Out of memory error catched");
}
return temp;
}
现在这项工作对于litle文件非常好(比如说< 1 mb),当我使用质量低于100(在这个例子中为50或20)时,我可以使用litle大文件(可能是3 mb),但这不是很好解决方案,因为我仍然有大小10 MB的问题,例如...程序只是破解..
我当时想要转换成块,但这对我不起作用......
感谢您的回答。
答案 0 :(得分:1)
那么第一个问题是是否有替代base64编码图像,你用它做什么?你是在某处上传它还是把它放到数据库中?
是否需要存储为字符串?加载如此大的图像是危险的,我个人会使用流来处理它而不是直接加载整个图像。
Apache commons有一个commons-codec库,可以在这里找到:http://commons.apache.org/proper/commons-codec/
并且应该足够简单地移植:
org.apache.commons.codec.binary.Base64OutputStream 和 org.apache.commons.codec.binary.Base64InputStream
进入你的应用。这应该允许您首先将数据以块的形式转储到磁盘,然后在您使用它时将其用于所需的任何目的。