我使用servlet上传图片。要执行调整大小操作,我将InputStream转换为BufferedImage。现在我想将它保存在mongoDB中。因为,据我所知,我是mongoDB的新手,GridFS采用InputStream。
那么,有没有办法将BufferedImage转换为InputStream?
答案 0 :(得分:11)
您需要使用ByteArrayOutputStream
将BufferedImage保存到ImageIO
class,然后从toByteArray()
创建ByteArrayInputStream
。
答案 1 :(得分:8)
首先,你必须得到你的“字节”:
byte[] buffer = ((DataBufferByte)(bufferedImage).getRaster().getDataBuffer()).getData();
然后使用 ByteArrayInputStream(byte [] buf)构造函数创建InputStream;
答案 2 :(得分:7)
试试这个
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(buffImage, "jpg", os);
InputStream is = new ByteArrayInputStream(os.toByteArray());
答案 3 :(得分:1)
通过重写方法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());