Как получить InputStream из BufferedImage?
Как я могу получить InputStream из объекта BufferedImage? Я пробовал это, но ImageIO.createImageInputStream() всегда возвращает NULL
BufferedImage bigImage = GraphicsUtilities.createThumbnail(ImageIO.read(file), 300);
ImageInputStream bigInputStream = ImageIO.createImageInputStream(bigImage);
Изображение эскиза изображения создается правильно, так как я могу с успехом рисовать bigImage в JPanel.
Спасибо.
Ответы
Ответ 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());