0

我正在使用一個數據庫,其中存儲的圖像作爲byte []。 我已經寫了這個函數來獲取來自byte []數據的圖像。 fileName正確,數據不爲空。IllegalArgumentException在字節[]圖像轉換java

public void convert(String fileName , byte[] data) throws IOException 
    { 
    File myFile = new File(fileName); 
    System.out.println("filename is " + file); 
    ByteArrayInputStream baisData = new ByteArrayInputStream(data); 
    BufferedImage imag= ImageIO.read(baisData); 
    if(imag == null) 
    { 
     System.out.println("imag is empty"); 
    } 
    ImageIO.write(imag, "jpg", myFile); 
    System.out.println("Image file written successfully"); 
} 

但是當我運行這段代碼時,我得到了這個輸出。

filename is C:\Users\Abhishek\Desktop\Eclipse\try\i1.jpg 
imag is empty 
Exception in thread "main" java.lang.IllegalArgumentException: image == null! 
    at javax.imageio.ImageTypeSpecifier.createFromRenderedImage(ImageTypeSpecifier.java:925) 
    at javax.imageio.ImageIO.getWriter(ImageIO.java:1591) 
    at javax.imageio.ImageIO.write(ImageIO.java:1520) 
    at TempConvert.convert(TempConvert.java:32) 
    at TempConvert.main(TempConvert.java:60) 

請告訴我什麼可能是背後的「IMAG」對象的原因是零,我應該做的事先我的代碼運行perfectly.Thanks什麼。

+1

來自DB的byte []是什麼格式?如果是JPEG格式,您應該可以將'byte []'作爲JPEG格式(不使用'ImageIO')直接寫入磁盤。 –

+0

它的jpg格式。 數據庫實際上包含不同用戶上傳的圖像。整個網站的代碼都是用C#編寫的。但我只知道java。在數據庫和Java中用於數據提取的數據輸入可以使用C#來解決我的問題嗎? System.Web.HttpPostedFile userfile; int fileSize = userfile.ContentLength; byte [] fileBuffer = new byte [fileSize]; \t \t \t userfile.InputStream.Read(fileBuffer,0,fileSize); – AbhishekMitruka

+0

你的代碼沒有什麼問題,問題是如果你傳遞它不能識別的數據,ImageIO.read將返回null。但是,如果您知道數據庫包含JPEG圖像並且您想要輸出JPEG圖像,那麼爲什麼要使用Java對JPEG圖像進行解碼,然後再對其進行編碼?只需將數據庫內容轉儲到磁盤即可。然後你會發現其他程序是否能夠解碼數據,並驗證它是否真的是JPEG。 – haraldK

回答

0

您的image對象是null。我認爲你的byte[] data沒有數據。

更改您的病情是否像下面

if(imag != null) 
{ 
    ImageIO.write(imag, "jpg", myFile); 
    System.out.println("Image file written successfully"); 
}else{ 
    System.out.println("imag is empty"); 
} 
+0

向下選民請說明原因.. – Prabhakaran

+0

我已經檢查過,變量'data'不是空的。我也在這個問題上寫了。 – AbhishekMitruka

1

你說你知道data包含JPEG數據,並且要輸出JPEG數據。然後它會更快,並且會產生更好的質量作爲獎勵,用以下代碼替換您的代碼:

public void convert(String fileName , byte[] data) throws IOException { 
    File myFile = new File(fileName); 
    System.out.println("filename is " + file); 
    OutputStream out = new FileOutputStream(myFile); 
    try { 
     out.write(data); // Just dump the database content to disk 
    } 
    finally { 
     out.close(); 
    } 
    System.out.println("Image file written successfully"); 
}