Преобразование между InputStream и BufferedImage - PullRequest
1 голос
/ 21 марта 2012

Я хочу преобразовать объект InputStream, представляющий файл изображения, в объект BufferedImage и после выполнения некоторых операций с BufferedImage преобразовать его обратно в InputStream, чтобы его можно было записать на диск. Я не хочу создавать объект файла на Сначала диск, чтобы предотвратить дополнительные издержки ввода-вывода.

Я думаю, что могу сделать следующее, чтобы преобразовать BufferedImage в InputStream

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(image,fileExtension, outputStream);
InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());

Это правильно? Кроме того, у меня есть следующие два вопроса

  1. Как получить объект BufferedImage из объекта InputStream
  2. Могу ли я получить размер файла непосредственно из объекта InputStream?

Некоторый пример действительно помог бы

Спасибо

1 Ответ

1 голос
/ 21 марта 2012
  1. Взгляните на read(InputStream stream) метод ImageIO
  2. Нет, вы можете просмотреть, используя available(), но это не гарантирует размерпоток (он работает для FileInputStream)
  3. Вы не можете записывать во входной поток (поскольку его имя указывает это, это вход, а не выход).Чтобы написать, вам нужен OutputStream, и вы можете использовать write(RenderedImage im, String formatName, OutputStream output) ImageIO
...