2016-11-03 6 views
1

Я хочу прочитать изображение, чтобы его масштабировать с помощью awt и Apache Commons Imaging, ранее известного как Apache Commons Sanselan Я не могу масштабировать изображение, но я вижу его в браузере правильно, как jpg без проблем. Получение информации изображения с помощьюJava не может прочитать изображение с помощью javax.imageio или Sanselan

Sanselan.getMetadata(fileData)

Я получаю эту информацию:

No Exif metadata. 
Photoshop (IPTC) metadata: 

Код

public static byte[] scale(byte[] fileData, int width, int height) { 

     ByteArrayInputStream in = new ByteArrayInputStream(fileData); 

     try { 

      BufferedImage img = javax.imageio.ImageIO.read(in); 

      .... 

      return buffer.toByteArray(); 

     } catch (IOException e1) { 

      System.out.println ("e1 -> " + e1.getMessage()); 

      try { 

       BufferedImage img = Sanselan.getBufferedImage(in); 

      } catch (ImageReadException | IOException e2) { 

       System.out.println ("e2 -> " + e2.getMessage()); 
      } 

     } 

     return fileData; 
    } 

, но я получил это исключения:

e1 -> Unsupported Image Type 
e2 -> Can't parse this format. 
+1

Вы очень сильно пометки. Что это значит с java-io или awt? Затем: какой файл изображений вы пытались загрузить? Вы пробовали другие форматы? Вы уверены, что файл является допустимым? – GhostCat

+0

Проблема, по-видимому, в JPEG, внутреннее 'JPEGImageReader' не может читать. Можете ли вы приложить проблематичное изображение? Вы также можете попробовать добавить мой [TwelveMonkeys ImageIO JPEG плагин] (https://github.com/haraldk/TwelveMonkeys#jpeg), который поддерживает файлы CMYK JPEG и другие форматы, которые внутренний читатель не может прочитать. – haraldK

ответ

1

Масштабирование изображения может быть выполнено без внешних библиотек.

Image img = ImageIO.read(URL); 
Image scaledImg = img.getScaledInstance(IMG_WIDTH, IMG_HEIGHT, Image.SCALE_DEFAULT); 

Смотрите docs для дальнейшего вдохновения.

+1

Код OP генерирует исключение из-за неподдерживаемого типа изображения, ваш код будет иметь одинаковую проблему в строке 1 ... Кроме того, если 'ImageIO.read()' преуспевает, он возвращает 'BufferedImage', и вы [должны не используйте 'getScaledInstance() в' BufferedImage' (https://community.oracle.com/docs/DOC-983611). – haraldK