Конвертировать массив байтов в изображения в Java - не зная типа - PullRequest
13 голосов
/ 31 июля 2009

Звучит просто, верно? Используйте

ImageIO.read(new ByteArrayInputStream(bytes));

Вот морщина. По какой-то причине он определяет jpeg как bmp, и это первый ImageReader, возвращаемый при вызове

ImageInputStream iis = ImageIO.createImageInputStream(new ByteArrayInputStream(bytes));
Iterator<ImageReader> readers=ImageIO.getImageReaders(iis);

Это приводит к искажению изображения. Есть ли способ сказать через java, если не смотреть прямо на байты заголовка, а если нет, кто-нибудь знает хорошую ссылку на заголовки байтов для разных изображений?

Просто сообщаю вам, ребята, что я все еще работаю над этим. Я дам вам знать, если / когда у меня будет ответ. Я благодарю всех вас за ваши ответы.

Ответы [ 3 ]

3 голосов
/ 31 июля 2009

Давненько не играл с ImageIO и не проверял это, но мне кажется, что-то вроде этого работает. (поскольку вы говорите, что знаете, что ваш файл является jpg, а не растровым изображением, я использую эту информацию, чтобы помочь найти правильный загрузчик).

String inFormat = "jpg";

Iterator inReaders = ImageIO.getImageReadersByFormatName(inFormat);

...

nextInReader.setInput( iis );
1 голос
/ 31 июля 2009

Для справки вы можете взглянуть на википедию, там вы можете найти заголовок различных форматов.
http://en.wikipedia.org/wiki/Graphics_Interchange_Format
http://en.wikipedia.org/wiki/BMP_file_format
http://en.wikipedia.org/wiki/JPEG

0 голосов
/ 31 июля 2009

Является ли BMP-ридер only , возвращаемым getImageReaders()? Может быть, вы получаете больше одного и можете сделать выбор на основе этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...