base64的大图像

时间:2015-02-09 06:27:27

标签: android

我通过论坛搜索这个,但我找不到好的解决方案。我找到了非常相似的主题,但没有帮助。

当我尝试将大图像文件编码为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的问题,例如...程序只是破解..

我当时想要转换成块,但这对我不起作用......

感谢您的回答。

1 个答案:

答案 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

进入你的应用。这应该允许您首先将数据以块的形式转储到磁盘,然后在您使用它时将其用于所需的任何目的。