2011-12-01 126 views
1

我試圖從BLOB創建圖像。我嘗試下面的代碼,但它不是在步工作:使用ImageIO從BLOB創建圖像?

ImageIO.write(image, "JPG", iio);) 

imagenull。請給我任何建議。

byte[] imgData = null; 
if (rs.next()) 
{ 
    Blob img = rs.getBlob(1); 
    imgData = img.getBytes(1,(int)img.length()); 
    File f1 = new File(fillFilePath); //fillFilePath = path where image want to store 
    BufferedImage image = ImageIO.read(new ByteArrayInputStream(imgData)); 
    ImageOutputStream iio = ImageIO.createImageOutputStream(f1); 
    ImageIO.write(image, "JPG", iio); 
} 

如何使用ImageIO從BLOB創建圖像?

+1

請包括*完整的錯誤消息*(copy'n'paste)和*堆棧跟蹤*(相關時)。只要閱讀它們,就可以迅速減少許多問題的複雜性,並可以推導出原因。 – 2011-12-01 10:35:06

+0

@pst *「(when relevant)。」*如果問題歸結爲「爲什麼我的代碼被破壞?」,堆棧跟蹤何時與***無關? –

回答

2

根據JavaDoc上ImageIO.read(InputStream)

如果沒有註冊的ImageReader聲稱能夠讀取得到的流,則返回null。

看來你的blob並不代表​​ImageIO能夠理解的圖像格式。存儲在blob中的圖像有什麼格式?

+0

也許是這樣,但是在OP指示的代碼之前,它應該在代碼行失敗。 –

+0

@Andrew不根據JavaDoc。由於圖像閱讀器無法理解圖像格式,因此他們忽略它。因此圖像爲空。基本上'ImageIO.getImageReaders()'將返回一個空集的interator。它不會拋出異常,因此'null'的返回值意味着輸入不被理解。 – Thomas

+0

@Andrew順便說一下,圖像是根本不涉及'ImageOutputStream iio = ImageIO.createImageOutputStream(f1)'行;'因爲只是一個輸出流被創建。即使_before_試圖讀取圖像,也可能會這樣做,因爲只需要文件「f1」。 – Thomas

0

下面的代碼適用於我。我可以從配置單元檢索BLOB(oracle)/ binary(hive):

InputStream is=rs.getBinaryStream(1); 

toImage(is,"C:\\hive_image.png"); 

public void toImage(InputStream is,String imagePath) throws IOException 
{ 

    BufferedImage bufferedImage=ImageIO.read(is); 
    ImageIO.write(bufferedImage, "png", new File(imagePath)); 

}