Сначала я хотел бы объяснить ситуацию / требования, которые приводят к вопросу:
В нашем веб-приложении мы не можем поддерживать изображения CMYK (JPEG), поскольку IE 8 и ниже не может их отображать. Таким образом, нам нужно определить, когда кто-то хочет загрузить такое изображение, и отклонить это.
К сожалению, Java ImageIO не читает эти изображения или не позволяет мне получить обнаруженное цветовое пространство. Из-за отладки кажется, что JPEGImageReader
внутренне получает код цветового пространства 11 (что означает JCS_YCCK
), но я не могу безопасно получить доступ к этой информации.
Запрашивая у читателя типы изображений, я ничего не получаю для CMYK, поэтому могу предположить no image types = unsupported image
.
Я преобразовал исходное изображение CMYK в RGB с помощью инструмента обработки изображений, чтобы проверить, будет ли оно читаемым (я попытался смоделировать действия администратора при получении сообщения «Нет поддержки CMYK»). Однако JPEGImageReader
не будет читать это изображение, поскольку оно предполагает (комментарий в источнике!) 3-компонентное цветовое пространство RGB, но заголовок изображения сообщает о 4 компонентах (возможно, RGBA или ARGB), и, таким образом, IllegalArgumentException
является брошен.
Таким образом, ImageIO не является вариантом, поскольку я не могу надежно получить цветовое пространство изображения и не могу сказать администратору, почему в противном случае прекрасное изображение (оно может отображаться браузером) не будет принято из-за некоторых внутренних ошибка.
Это побудило меня попробовать JAI ImageIO, CLibJPEGImageReader
которого отлично справляется и правильно читает все мои тестовые изображения.
Однако, поскольку мы развертываем наше приложение в JBoss, на котором могут размещаться и другие приложения, мы хотели бы сохранить их как можно более изолированными. AFAIK, мне нужно установить JAI ImageIO в JRE или иным образом сделать доступными собственные библиотеки, чтобы использовать их, и, таким образом, другие приложения также могут получить к ним доступ, что может вызвать побочные эффекты (по крайней мере, у нас были бы много проверять, чтобы убедиться, что это не так).
Это объяснение вопроса, и вот оно снова: Есть ли чистая альтернатива Java JAI ImageIO, которая надежно обнаруживает и, возможно, конвертирует изображения CMYK?
Заранее спасибо,
Томас