如何从BufferedImage获取InputStream?
image-processing
java
5
0

如何从BufferedImage对象获取InputStream?我尝试了这个,但是ImageIO.createImageInputStream()总是返回NULL

BufferedImage bigImage = GraphicsUtilities.createThumbnail(ImageIO.read(file), 300);
ImageInputStream bigInputStream = ImageIO.createImageInputStream(bigImage);

图片缩略图已正确生成,因为我可以成功将bigImage绘制JPanel

谢谢。

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

通过重写toByteArray()方法,返回buf本身(不进行复制),可以避免内存相关的问题。这将共享相同的数组,而不创建另一个正确大小的数组。重要的是使用size()方法来控制进入数组的有效字节数。

final ByteArrayOutputStream output = new ByteArrayOutputStream() {
    @Override
    public synchronized byte[] toByteArray() {
        return this.buf;
    }
};
ImageIO.write(image, "png", output);
return new ByteArrayInputStream(output.toByteArray(), 0, output.size());
收藏
评论

来自http://usna86-techbits.blogspot.com/2010/01/inputstream-from-url-bufferedimage.html

效果很好!

这是为BufferedImage制作InputStream的方法:

URL url = new URL("http://www.google.com/intl/en_ALL/images/logo.gif");
BufferedImage image = ImageIO.read(url);
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image, "gif", os);
InputStream is = new ByteArrayInputStream(os.toByteArray());
收藏
评论

如果您尝试将图像保存到文件,请尝试:

ImageIO.write(thumb, "jpeg", new File(....));

如果您只想读取字节,请尝试执行写调用,但是将其传递给ByteArrayOutputStream,然后可以从中取出字节数组并对其进行所需的处理。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号