ImageIO.read (imagePath) mit dieser Datei gibt eine CMMException, warum kann Java mit dieser scheinbar gültigen Datei nicht umgehen Ссылка
%Vor%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.
Ü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.
>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:
Tags und Links java image-processing javax.imageio jpeg