2015-02-09 44 views
0

我在論壇中搜索這個,但沒有找到合適的答案。我發現非常相似的主題,但沒有幫助。到base64的大圖像

我有問題,當我嘗試編碼大型圖像文件爲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;   
} 

現在這個工作痘痘當我使用質量低於100(在本例中爲50或20)時,我可以使用litle大文件(也許是3 MB),但這不是很好的解決方案,因爲我仍然遇到大小爲10的問題(例如< 1 MB) MB例如...程序只是打破..

我想轉換成塊,但這不適合我...

謝謝你的回答。

+1

你打算怎麼處理'String temp'?如果您打算將它寫入某處,可以使用流式base64編碼器。例如[Base64OutputStream](http://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/binary/Base64OutputStream.html) – tofi9 2015-02-09 06:32:45

+0

我需要發送它與ksoap2到webservice – Frink 2015-02-09 06:33:31

+0

我不知道'ksoap2'。它是否支持流式文件附件?請發佈能夠成功發佈小圖片的工作代碼。 – tofi9 2015-02-09 06:38:28

回答

1

好,第一個問題是有沒有替代base64編碼的圖像,你用它的目的是什麼?你是上傳到某個地方還是把它放到數據庫中?

是否需要將其存儲爲字符串?加載這麼大的圖片很危險,我會親自用流處理它,而不是直接加載整個東西。

阿帕奇公地具有公共的編解碼器庫,在這裏菱:http://commons.apache.org/proper/commons-codec/

,它應該是很簡單的端口:

org.apache.commons.codec.binary.Base64OutputStream 和 組織.apache.commons.codec.binary.Base64InputStream

進入您的應用程序。這應該允許您首先將數據以塊的形式轉儲到磁盤,然後在小塊中讀取數據,以便用於任何需要的目的。

+0

Thax爲答案我用你和@taoufik答案來獲得新的解決方案,他們給我不同的觀點「情況」:) – Frink 2015-02-10 06:35:49