Не мог прочитать изображение JPEG с помощью ImageIO.read (Файл файла)

У меня есть проблемы при чтении этого файла JPEG с помощью ImageIO.read (Файл файла) - он выдает исключение с сообщением "Неподдерживаемый Тип изображения".

Я попробовал другие изображения JPEG, и они, кажется, хорошо работают.

Единственное различие, которое я смог определить, - то, что этот файл, кажется, включает миниатюру - который, как известно, вызывает проблемы с ImageIO.read ()?

Troublesome image

Править:

Добавленный получающееся изображение:

Strange colors

44
задан Eddie Curtis 14 July 2015 в 16:06
поделиться

1 ответ

Ваше изображение "Цветовая модель" - CMYK, JPEGImageReader (внутренний класс, который считывает ваш файл) читает только цветовую модель RGB.

Если вы настаиваете на чтении изображений CMYK, то вам нужно будет преобразовать их, попробуйте этот код.

UPDATE

Чтение изображения CMYK в RGB BufferedImage.

    File f = new File("/path/imagefile.jpg");

    //Find a suitable ImageReader
    Iterator readers = ImageIO.getImageReadersByFormatName("JPEG");
    ImageReader reader = null;
    while(readers.hasNext()) {
        reader = (ImageReader)readers.next();
        if(reader.canReadRaster()) {
            break;
        }
    }

    //Stream the image file (the original CMYK image)
    ImageInputStream input =   ImageIO.createImageInputStream(f); 
    reader.setInput(input); 

    //Read the image raster
    Raster raster = reader.readRaster(0, null); 

    //Create a new RGB image
    BufferedImage bi = new BufferedImage(raster.getWidth(), raster.getHeight(), 
    BufferedImage.TYPE_4BYTE_ABGR); 

    //Fill the new image with the old raster
    bi.getRaster().setRect(raster);

ОБНОВЛЕНИЕ - Март 2015 - Добавление имитационных изображений

Исходные изображения были удалены из dropbox OP. Поэтому я добавляю новые изображения (не оригиналы), которые имитируют проблему, которая с ними происходила.

Первое изображение — это то, как выглядит обычное RGB-изображение.

Image RGB

Второе изображение — это то, как будет выглядеть одно и то же изображение в цветовой модели CMYK.

Вы не можете увидеть, как он выглядит в Интернете, потому что он будет преобразован в RGB хостом. Чтобы точно увидеть, как он выглядит, возьмите RGB-образ и запустите его через конвертер RGB в CMYK.

Третье изображение — это то, как будет выглядеть изображение CMYK при чтении, а затем написании с использованием Java ImageIO.

Image CMYK read through Java RGB

Проблема, которая происходила с OP, заключалась в том, что у них было что-то вроде изображения 2, которое выдает исключение, когда вы пытаетесь его прочитать.

38
ответ дан 26 November 2019 в 21:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: