Ich habe eine Methode, die Bilder liest, sie konvertiert (Größe, Format) und zurückschreibt. Das hat immer sehr gut funktioniert, aber jetzt bin ich auf einige JPEG-Bilder gestoßen (von einer Presseagentur), die offensichtlich einige Metadaten (IPTC) enthalten. Bei der Konvertierung dieser Bilder sind die Farben völlig falsch. Meine erste Vermutung war, dass es sich um CMYK-Bilder handelt, aber das ist nicht der Fall.
Das Problem muss beim Lesen liegen, denn egal, ob ich das Bild in ein kleineres JPEG oder ein PNG konvertiere, es sieht immer gleich aus.
Am Anfang habe ich ImageIO.read()
um das Bild zu lesen. Ich erhalte jetzt die aktuelle ImageReader
vía ImageIO.getImageReadersByMIMEType()
und versucht, dem Leser mitzuteilen, dass er Metadaten ignorieren soll, indem er die ignoreMetadata
Parameter von ImageReader#setInput(Object input, boolean seekForwardOnly, boolean ignoreMetadata)
hatte aber keinen Erfolg.
Dann habe ich eine Version des Bildes ohne die Metadaten erstellt (mit Fireworks). Dieses Bild wurde korrekt konvertiert.
Der einzige Unterschied, den ich feststellen konnte, ist, dass bei dem nicht funktionierenden Bild der Wert der Variablen des Lesers colorSpaceCode
es 2 , während beim Arbeitsbild der Wert 3 . Außerdem gibt es eine outColorSpaceCode
das ist 2 für beide Bilder.
Da die Quelle: Kommentar des Lesers sagt nur Wird durch den nativen Code-Callback setImageData gesetzt. Ein geänderter IJG+NIFTY-Farbraum-Code Ich stecke jetzt wirklich fest. Jede Hilfe wäre also sehr willkommen.
Sie können das Originalbild (~3 MB) über folgende Adresse abrufen aquí und klicken Sie auf Herunterladen. Das linke Bild unten zeigt, was ich vom Originalbild erhalte, das rechte zeigt, wie es aussehen sollte.