此问题已经在这里有了答案:
我正在使用servlet上传图像。为了执行调整大小的操作,我将InputStream转换为BufferedImage。现在我想将其保存在mongoDB中。因为据我所知,我是mongoDB的新手,所以GridFS采用InputStream。
所以,有什么方法可以将BufferedImage转换为InputStream吗?
您需要使用ByteArrayOutputStream
将BufferedImage保存到ByteArrayOutputStream
,然后从ImageIO
class创建一个ImageIO
。
ByteArrayInputStream
➙ByteArrayInputStream
➙toByteArray()
➙BufferedImage
使用ByteArrayOutputStream
方法将byte[]
(它是ByteArrayInputStream
)变成ImageIO.write
。从那里得到一个字节数组(ImageIO.write
),将其馈送到类型为BufferedImage
的BufferedImage
中。
RenderedImage
RenderedImage
和ByteArrayOutputStream
都实现ByteArrayOutputStream
。因此,您可以方便地使用byte[]
语法将其自动关闭。
通过重写方法InputStream
,返回ByteArrayInputStream
本身(不进行复制),可以避免与内存相关的问题。这将共享同一数组,而不创建另一个正确大小的数组。重要的是要使用ByteArrayInputStream
方法来控制进入数组的有效字节数。
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(buffImage, "jpeg", os); // Passing: (RenderedImage im, String formatName, OutputStream output)
InputStream is = new ByteArrayInputStream(os.toByteArray());