Как конвертировать BufferedImage в InputStream? - PullRequest
11 голосов
/ 23 ноября 2010

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

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

Ответы [ 4 ]

11 голосов
/ 23 ноября 2010

Вам необходимо сохранить BufferedImage в ByteArrayOutputStream, используя ImageIO класс , а затем создать ByteArrayInputStream из toByteArray().

8 голосов
/ 23 ноября 2010

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

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

И затем использовать ByteArrayInputStream (byte [] buf) конструктор для создания вашего InputStream;

7 голосов
/ 05 февраля 2014

попробуйте

ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(buffImage, "jpg", os);
InputStream is = new ByteArrayInputStream(os.toByteArray());
1 голос
/ 03 сентября 2012

Переопределив метод 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());
...