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