Java ImageIO IIOException: Nicht unterstützter Image-Typ?
Arbeiten mit Bildern in Java für die erste Zeit und bin immer einige bizarro Ausnahmen, die sind nicht sehr gut dokumentiert. Hier ist der code-Zeile, die fehlschlägt:
BufferedImage imgSelected = ImageIO.read(new File("/abs/url/to/file/image.jpg"));
Diese Zeile wirft eine IIOException mit Unsupported image type als Ausnahme-Nachricht. Ich habe überprüft und erneut überprüft, es ist tatsächlich dieser Linie werfen der Ausnahme, dass das File-Objekt ist gültig, dass die URL gültig ist, und dass die image.jpg
ist in der Tat eine gültige JPG lädt, die sich hervorragend in andere Bild-Betrachter.
Was könnte ich tun, um mehr Informationen über die Natur dieser Ausnahme? Dies ist die traditionelle Art und Weise für das laden von Bildern in Java 7, oder ist das einer alten/veralteten Methode? Es gibt einfach nicht sehr viele Infos über diese "Unsupported image type" Ausnahmen, und sicherlich, ImageIO unterstützt JPGs!
Vielen Dank für jede Hilfe!!!
InformationsquelleAutor der Frage IAmYourFaja | 2011-08-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, prüfen Sie die Codierung des JPEG.
ImageIO
nicht Lesen können, CMYK-kodierte jpeg-Bilder zum Beispiel.AFAIK, ImageIO wurde nicht aktualisiert, seit Jahren, so dass Sie möchten, um zu versuchen und verwenden Sie die offizielle alternative/Erweiterung: JAI ImageIO.
Unforutnately, JAI ImageIO braucht einige native Bibliotheken in der JRE, die möglicherweise unerwünscht sein.
Wir tun die folgenden:
JPEGCodec
:JPEGCodec.createJPEGDecoder(...)
BufferedImage
und manuell konvertieren (Sie können verwenden Sie ICC-profile, aber die manuelle Konvertierung passt unsere Bedürfnisse)Hier eine Frage von mir, führte zu der Tatsache, dass
ImageIO
unterstützt nicht alle Arten von JPEG-Bildern, und ich es erklärt ein wenig mehr von meinen Erkenntnissen, warum erhalten Sie diese Nachricht: Reine Java-alternative zu JAI ImageIO zur Erkennung der CMYK-BilderInformationsquelleAutor der Antwort Thomas
Habe ich leider begegnet eine Menge von standard verletzen JPEG-Dateien. ImageIO ist besonders wählerisch und weigern sich oft Bilder geladen, die sind oft geladen und scheinbar korrekt angezeigt, die von anderen software-mit weniger strengen Kontrollen auf die Datei format.
Es ist nicht sehr hübsch, aber eine Problemumgehung ist die Verwendung der Oracle-VM-internen JPEG-decoder direkt (com.Sonne.Bild.codec.jpeg.JPEGCodec), wie es scheint zu tolerieren Skillung mehr Abweichungen als die ImageIO-wrapper:
Dies ist natürlich keine ideale Lösung, da mit der Implementierung bestimmter Klassen zu sperren, Sie zu einer bestimmten VM-Hersteller und können brechen, mit neueren VM-Versionen, aber wenn Sie nur die software benutzt, die in einer kontrollierten Umgebung, ist es möglicherweise besser als gar keine Lösung.
InformationsquelleAutor der Antwort jarnbjo
Weitere option ist zu verwenden .jar-vorbereitet von Werner Randelshofer:
http://www.randelshofer.ch/blog/2011/08/reading-cmyk-jpeg-images-with-java-imageio/ oder Monte-Mediathek: http://www.randelshofer.ch/monte/
Sieht es ganz einfach und ähnlich wie ImageIO Nutzung und verfügbar unter der CC-Lizenz.
InformationsquelleAutor der Antwort Ravbaker