сначала я хотел бы объяснить ситуацию / требования, которые приводят к вопросу:
В нашем веб-приложении мы не можем поддерживать изображения CMYK (JPEG), поскольку IE 8 и ниже не могут отображать их,Таким образом, нам нужно определить, когда кто-то хочет загрузить такое изображение, и отрицать его.
К сожалению, ImageIO Java не будет читать эти изображения или не позволит мне получить обнаруженное цветовое пространство.После отладки кажется, что 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 на Java, которая надежно обнаруживает и, возможно, конвертирует CMYKизображения?
Заранее спасибо,
Томас