我正在使用一個數據庫,其中存儲的圖像作爲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什麼。
來自DB的byte []是什麼格式?如果是JPEG格式,您應該可以將'byte []'作爲JPEG格式(不使用'ImageIO')直接寫入磁盤。 –
它的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
你的代碼沒有什麼問題,問題是如果你傳遞它不能識別的數據,ImageIO.read將返回null。但是,如果您知道數據庫包含JPEG圖像並且您想要輸出JPEG圖像,那麼爲什麼要使用Java對JPEG圖像進行解碼,然後再對其進行編碼?只需將數據庫內容轉儲到磁盤即可。然後你會發現其他程序是否能夠解碼數據,並驗證它是否真的是JPEG。 – haraldK