ImageIO не может читать определенные изображения


У меня есть следующая проблема. У нас есть веб-сервис с функцией загрузки изображений. Когда вы пытаетесь загрузить определенные изображения, это просто не удается. Эти образы имеют правильный тип MIME, они не CMYK (по крайней мере, GIMP говорят, что они в RGB). брошенное исключение: "неподдерживаемый тип изображения"! Проблема возникает, когда вы пытаетесь запустить эту команду:

BufferedImage img = ImageIO.read(new ByteArrayInputStream(image.getData()));

Я копаю немного глубже, и реальное исключение выбрасывается вместе с ImageIO.read(ImageInputStream stream), когда он пытается закрыть поток опять!

public static BufferedImage read(ImageInputStream stream)
    throws IOException {
    if (stream == null) {
        throw new IllegalArgumentException("stream == null!");
    }

    Iterator iter = getImageReaders(stream);
    if (!iter.hasNext()) {
        return null;
    }

    ImageReader reader = (ImageReader)iter.next();
    ImageReadParam param = reader.getDefaultReadParam();
    reader.setInput(stream, true, true);
    BufferedImage bi;
    try {
        bi = reader.read(0, param);
    } finally {
        reader.dispose();
        stream.close();
    }
    return bi;
}

Образ, бросающий исключение, это, например,:
Изображение, которое падает

Я надеюсь, что кто-то может помочь мне выяснить, почему это происходит и как это исправить!

1 3

1 ответ:

Прилагаемое изображение имеет цветовую модель CMYK. Попробуйте преобразовать его в RGB.

Этот вопрос может быть полезен: Как правильно преобразовать CMYK в RGB в Java?