Как преобразовать BufferedImage в InputStream?
я загружаю изображения с помощью сервлета. Для выполнения операций изменения размера я преобразую InputStream в BufferedImage. Теперь я хочу сохранить его в MongoDB. Поскольку, насколько я знаю, я новичок в mongoDB, GridFS принимает InputStream.
Итак, есть ли способ преобразовать BufferedImage в InputStream?
4 ответов
вам нужно сохранить BufferedImage в ByteArrayOutputStream
С помощью ImageIO
класс, затем создать ByteArrayInputStream
С toByteArray()
.
прежде всего вы должны получить свои "байты":
byte[] buffer = ((DataBufferByte)(bufferedImage).getRaster().getDataBuffer()).getData();
а затем используйте объект bytearrayinputstream(Byte[] для баф) конструктор для создания вашего InputStream;
попробуй такое
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(buffImage, "jpg", os);
InputStream is = new ByteArrayInputStream(os.toByteArray());
переопределив метод toByteArray()
, возвратить (не копирование), вы можете избежать проблем, связанных с памятью. Это будет использовать один и тот же массив, а не создавать другой нужного размера. Важно использовать 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());