Ответ 1
Рекомендуется преобразовать в массив байтов
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(img, "jpg", baos);
byte[] bytes = baos.toByteArray();
Я вижу, что у ряда людей была аналогичная проблема, однако я еще не пытался найти именно то, что я ищу.
Итак, у меня есть метод, который считывает входное изображение и преобразует его в массив байтов:
File imgPath = new File(ImageName);
BufferedImage bufferedImage = ImageIO.read(imgPath);
WritableRaster raster = bufferedImage .getRaster();
DataBufferByte data = (DataBufferByte) raster.getDataBuffer();
Теперь я хочу преобразовать его в BufferedImage (у меня есть приложение, для которого мне нужна эта функция). Обратите внимание, что "test" - это массив байтов.
BufferedImage img = ImageIO.read(new ByteArrayInputStream(test));
File outputfile = new File("src/image.jpg");
ImageIO.write(img,"jpg",outputfile);
Однако это возвращает следующее исключение:
Exception in thread "main" java.lang.IllegalArgumentException: im == null!
Это потому, что BuffedImage img имеет значение null. Я думаю, что это связано с тем, что в моем первоначальном преобразовании из массива BufferedImage в байт информация изменяется/теряется, так что данные больше не могут быть распознаны как jpg.
Есть ли у кого-нибудь предложения по тому, как это решить? Было бы очень благодарно.
Рекомендуется преобразовать в массив байтов
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(img, "jpg", baos);
byte[] bytes = baos.toByteArray();
Обратите внимание, что вызов close
или flush
ничего не сделает, вы можете это увидеть сами, посмотрев на источник /doc:
Закрытие ByteArrayOutputStream не влияет.
Метод сброса OutputStream ничего не делает.
Таким образом, используйте что-то вроде этого:
ByteArrayOutputStream baos = new ByteArrayOutputStream(THINK_ABOUT_SIZE_HINT);
boolean foundWriter = ImageIO.write(bufferedImage, "jpg", baos);
assert foundWriter; // Not sure about this... with jpg it may work but other formats ?
byte[] bytes = baos.toByteArray();
Вот несколько ссылок относительно подсказки размера: