Подтвердить что ты не робот

Как преобразовать BufferedImage в InputStream?

Я загружаю изображения с помощью сервлета. Чтобы выполнить операции изменения размера, я конвертирую InputStream в BufferedImage. Теперь я хочу сохранить его в mongoDB. Поскольку, насколько я знаю, я новичок в mongoDB, GridFS принимает InputStream.

Итак, есть ли способ конвертировать BufferedImage в InputStream?

4b9b3361

Ответ 2

Прежде всего, вы должны получить свои "байты":

byte[] buffer = ((DataBufferByte)(bufferedImage).getRaster().getDataBuffer()).getData();

И затем используйте конструктор ByteArrayInputStream (byte [] buf), чтобы создать свой InputStream;

Ответ 3

попробуйте это

ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(buffImage, "jpg", os);
InputStream is = new ByteArrayInputStream(os.toByteArray());

Ответ 4

Отменяя метод 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());