Как преобразовать 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());