我從inputStream創建圖像,並使用了兩種方法,但兩種方法均失敗。Java從inputStream創建圖像
第1種方法:
FileOutputStream out=new FileOutputStream(file)
byte[] byteBuffer = new byte[1024];
int length = 0;
while ((stream != null) && ((length = stream.read(byteBuffer)) != -1)){
out.write(byteBuffer,0,length);
}
out.flush()
out.close();
stream.close();
這種方法生成的圖像,但在嘗試打開它。它說「這不是有效的位圖文件」。
而第二方法:
BufferedImage imBuff = ImageIO.read(stream);
ImageIO.write(imBuff, 'png', file);
而這一次產生例外。
java.lang.IllegalArgumentException:image == null! 在javax.imageio.ImageTypeSpecifier.createFromRenderedImage(ImageTypeSpe cifier.java:925) 在javax.imageio.ImageIO.getWriter(ImageIO.java:1591) 在javax.imageio.ImageIO.write(ImageIO.java:1520) 在com.k12report.frontend.ClientAuthoringController $$ EOU2Lt2o.getImages( ClientAuthoringController.groovy:55) 在grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PAG eFragmentCachingFilter.java:195) 在Grails的。 plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter .java:63) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor。 java:1145) 在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(的ThreadPoolExecutor 的.java:615) 在java.lang.Thread.run(Thread.java:722)
感謝
什麼是'stream'?它的內容是什麼?您是否嘗試將內容轉儲到磁盤並通過外部映像程序驗證其有效性? – MadProgrammer
stream = response.getEntityInputStream() – Biswas
你確定你有一個有效的圖像開始?在第二種方法中,'imBuff'爲'null',這在ImageIO不識別文件格式時發生。你需要測試這種情況。你的第一種方法對我來說很好。你可能應該在循環之外檢查'stream!= null'以獲得可讀性和性能。 – haraldK