【发布时间】:2014-01-26 17:50:21
【问题描述】:
我正在从 inputStream 创建图像,我使用了两种方法,但两种方法都失败了。
第一种方法:
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) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor. 爪哇:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor .java:615) 在 java.lang.Thread.run(Thread.java:722)
谢谢
【问题讨论】:
-
什么是
stream?它的内容是什么?您是否尝试过将内容转储到磁盘并通过外部映像程序验证其有效性? -
流 = response.getEntityInputStream()
-
你确定你有一个有效的图像开始吗?在第二种方法中,
imBuff是null,当 ImageIO 无法识别文件格式时会发生这种情况。您需要针对这种情况进行测试。你的第一种方法对我来说看起来不错。不过,您可能应该在循环外检查stream != null的可读性和性能。 -
谁说:这不是一个有效的位图文件? (这对我来说不是很清楚......)
标签: java image grails javax.imageio