Warum gibt das Laden dieses JPGs mit JavaIO CMMException?

8

ImageIO.read (imagePath) mit dieser Datei gibt eine CMMException, warum kann Java mit dieser scheinbar gültigen Datei nicht umgehen Ссылка

%Vor%     
Paul Taylor 17.12.2010, 13:38
quelle

3 Antworten

15

Ich glaube, ich habe Ihr Problem verstanden. Ich habe das Bild überprüft, das du verlinkt hast ( Ссылка ). Es ist aufgrund von Exif und JFIF Standard.

Wenn Sie etwas wie ImageIO.read('some file') tun, ruft es die standardmäßige sun jpeg-Implementierung com.sun.imageio.plugins.jpeg.JPEGImageReader auf. Was früher Probleme mit dem Laden von JFIF-Dateien hatte BUG 6488904 (Überprüfen Sie den Kommentar gegen Ende).

  

Gemäß spec müssen Exif und   JFIF verlangt, dass ihre jeweiligen   Anwendungsmarkersegment muss das sein   zuerst direkt nach SOI (APP1 und APP0)   , so ist es eigentlich nicht möglich per   Spezifizierung, damit eine JPEG-Datei kompatibel ist   mit beiden Standards.

Obwohl es lange zurück gemeldet wurde

Die Problemumgehung besteht darin, die JAI-Bibliothek zu verwenden ( Ссылка ). Ich verwende Java (keine native Beschleunigung) Version.

%Vor%

hoffe, das wird helfen.

    
Favonius 17.12.2010, 16:45
quelle
4

Übrigens, dieses Problem wurde in JDK8 behoben (beachten Sie das Commit am Ende von Ссылка ). Ich habe bestätigt, dass ein Vorabversions-Build von JDK8 ordnungsgemäß Bilder lädt, bei denen JDK7 wie oben beschrieben fehlschlägt.

>     
cemerick 09.10.2013 21:18
quelle
2

Alte Post, aber für zukünftige Referenz:

Inspiriert von dieser Frage und den hier gefundenen Links, habe ich ein JPEGImageReader-Plugin für ImageIO geschrieben, das JPEG-Bilder mit diesen "schlechten" ICC-Farbprofilen unterstützt (das "Problem" ist der Rendering Intent im ICC-Profil ist inkompatibel) mit Java ColorConvertOp). Es ist einfach Java und erfordert kein JAI. Der Quellcode ist frei verfügbar unter:

Ссылка

    
haraldK 22.04.2013 14:07
quelle