Mam metodę, która odczytuje obrazy, konwertuje je (rozmiar, format) i zapisuje je z powrotem. To zawsze działało bardzo dobrze, ale teraz natknąłem się na obrazy JPEG (z agencji prasowej), które oczywiście zawierają pewne metadane (IPTC). Podczas konwersji tych obrazów kolory są nieprawidłowe. Moim pierwszym przypuszczeniem było to, że są to obrazy CMYK, ale nie są.Obraz JPEG z niewłaściwymi kolorami
Problem musi pochodzić z czytania, ponieważ nie ma znaczenia, czy obraz zostanie przekonwertowany na mniejszy plik JPEG czy plik PNG, zawsze wygląda tak samo.
Najpierw użyłem ImageIO.read()
do odczytania obrazu. Dostaję teraz ImageReader
przez ImageIO.getImageReadersByMIMEType()
i próbuję powiedzieć czytelnikowi, aby zignorować dane meta poprzez ustawienie parametru ignoreMetadata
z ImageReader#setInput(Object input, boolean seekForwardOnly, boolean ignoreMetadata)
, ale nie powiodło się.
Następnie stworzyłem wersję obrazu bez metadanych (przy użyciu programu Fireworks). Ten obraz jest przekonwertowany poprawnie.
Jedyną różnicą mogłem dowiedzieć się, jest to, że z obrazem nie-roboczej wartość czytelnika zmienna colorSpaceCode
jest , whilest z obrazem pracy, wartość jest . Jest również outColorSpaceCode
, który jest dla obu obrazów.
Jako source comment of the reader tylko mówi Ustaw przez wywołanie zwrotne kodu natywnego setImageData. Zmodyfikowany kod przestrzeni kolorów IJG + NIFTY Naprawdę utknąłem. Więc każda pomoc będzie bardzo ceniona.
Możesz uzyskać oryginalny obraz (~ 3 MB), przechodząc here i klikając przycisk Pobierz. Lewy obrazek poniżej pokazuje, co dostaję z oryginalnego obrazu, po prawej pokazuje, jak powinien wyglądać.
Mam ten problem tak długo, jak pamiętam. Zdarza się to w około 0,1% plików jpg, które napotykam. Na przykład: http://chan.sankakustatic.com/data/cd/81/cd81a9fa1305b9c1887ab1ac4904d166.jpg Nie znalazłem jeszcze rozwiązania, które poprawnie wyświetliłoby je w panelu. Zgaduję, że to błąd w analizatorze Javy w Javie. –
Możliwe nakładanie się: [Obraz zmienia kolor po zapisaniu w Javie] (http://stackoverflow.com/questions/20789043/image-changes-color-when-saved-with-java) –