2016-11-03 1 views
1
nicht lesen

Ich möchte ein Bild lesen, um es mit Awt und Apache Commons Imaging, früher bekannt als Apache Commons Sanselan zu skalieren Ich kann das Bild nicht skalieren, aber ich kann es sehen im Browser richtig als jpg ohne jedes Problem. Erhalten des Bildinfo mitJava kann ein Bild mit javax.imageio oder Sanselan

Sanselan.getMetadata(fileData)

ich diese Informationen zu erhalten:

No Exif metadata. 
Photoshop (IPTC) metadata: 

Der Code

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; 
    } 

aber ich habe diese Ausnahmen:

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

Sie sind sehr viel over-Tagging. Was hat dieses todo mit java-io oder awt? Dann: Welche Art von Bilddatei haben Sie versucht zu laden? Hast du andere Formate getestet? Sind Sie sicher, dass die Datei ein gültiges Bild ist? – GhostCat

+0

Das Problem scheint ein JPEG zu sein, das der interne 'JPEGImageReader' nicht lesen kann. Kannst du das problematische Bild anhängen? Sie könnten auch versuchen, mein [TwelveMonkeys ImageIO JPEG-Plugin] (https://github.com/haraldk/TwelveMonkeys#jpeg) hinzuzufügen, das CMYK-JPEGs und andere Formate unterstützt, die der interne Leser nicht lesen kann. – haraldK

Antwort

1

Die Bildskalierung kann ohne externe Bibliotheken durchgeführt werden.

Weitere Informationen finden Sie unter docs.

+1

Der OP-Code löst eine Ausnahme aufgrund eines nicht unterstützten Image-Typs aus, Ihr Code wird genau das gleiche Problem in Zeile 1 haben ... Wenn 'ImageIO.read()' erfolgreich ist, wird ein 'BufferedImage' zurückgegeben und Sie sollten [] Verwenden Sie nicht 'getScaledInstance() auf einem' BufferedImage '] (https://community.oracle.com/docs/DOC-983611). – haraldK

Verwandte Themen