2013-07-24 80 views
0

在我的項目中,我收到一個採用灰度8BPP格式的Base64編碼圖像。我無法將其轉換爲BufferedImage。當我從磁盤讀取一個映像(f.ex png)時,我有一些代碼可用,base64對它進行編碼,反之亦然。從圖像格式創建BufferedImage 8BPP

無論如何,當我嘗試轉換我收到的字符串,一切似乎工作,但空返回。它不是被調用的catch,而是返回null的ImageIO.read。

有什麼建議嗎?我知道base64字符串是有效的,因爲我試圖將其保存爲原始文件並在編輯器中打開它,從而正確顯示圖像。

這是我的代碼:

public static BufferedImage convertBase64StringToBufferedImage(String base64String){ 
    byte[] pictureBytes = Base64Coder.decode(base64String); 

    InputStream is = new ByteArrayInputStream(pictureBytes); 

    BufferedImage image; 
    try { 
     image = ImageIO.read(new ByteArrayInputStream(pictureBytes)); 
    } catch (IOException e) { 
     log.error(e.getMessage(), e); 
     return null; 
    } 
    return image; 
} 

回答

0

documentation

返回一個BufferedImage作爲供給的InputStream 與那些目前 註冊中自動選擇一個ImageReader的解碼結果。 InputStream包裝在ImageInputStream中。 如果沒有註冊的ImageReader聲稱能夠讀取結果流,則返回null。

這裏是一個被執行的代碼:

public static BufferedImage read(ImageInputStream stream) 
    throws IOException { 
    if (stream == null) { 
     throw new IllegalArgumentException("stream == null!"); 
    } 

    Iterator iter = getImageReaders(stream); 
    if (!iter.hasNext()) { 
     return null;     // <~~~~~ here's your null 
    } 

    ImageReader reader = (ImageReader)iter.next(); 
    ImageReadParam param = reader.getDefaultReadParam(); 
    reader.setInput(stream, true, true); 
    BufferedImage bi; 
    try { 
     bi = reader.read(0, param); 
    } finally { 
     reader.dispose(); 
     stream.close(); 
    } 
    return bi; 
} 

或許你可以嘗試明確地得到一個ImageReader基於適當的MIME類型,並與讀者做讀取的代碼(如上所示) 。

+0

感謝您的建議,但我現在已經嘗試過(使用所有可用的MIME類型,並且我收到各種錯誤,其中大多數表示無效頭或類似錯誤。 – benbjo