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

Как получить InputStream из BufferedImage?

Как я могу получить InputStream из объекта BufferedImage? Я пробовал это, но ImageIO.createImageInputStream() всегда возвращает NULL

BufferedImage bigImage = GraphicsUtilities.createThumbnail(ImageIO.read(file), 300);
ImageInputStream bigInputStream = ImageIO.createImageInputStream(bigImage);

Изображение эскиза изображения создается правильно, так как я могу с успехом рисовать bigImage в JPanel.

Спасибо.

4b9b3361

Ответ 1

Если вы пытаетесь сохранить изображение в файл, попробуйте:

ImageIO.write(thumb, "jpeg", new File(....));

Если вы просто хотите, чтобы в байтах попытались выполнить вызов записи, но передайте ему ByteArrayOutputStream, который затем вы можете получить массив байтов и сделать с ним то, что вы хотите.

Ответ 2

От http://usna86-techbits.blogspot.com/2010/01/inputstream-from-url-bufferedimage.html

Он работает очень хорошо!

Вот как вы можете сделать InputStream для BufferedImage:

URL url = new URL("http://www.google.com/intl/en_ALL/images/logo.gif");
BufferedImage image = ImageIO.read(url);
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image, "gif", os);
InputStream is = new ByteArrayInputStream(os.toByteArray());

Ответ 3

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