Преобразование цветового пространства DCI-P3 в sRGB с помощью Java ImageIO или Imagemagick

Я пытаюсь выполнить обработку изображения на скриншоте с iPhone-X, но у меня проблемы с красным каналом, который не попадает в ожидаемый диапазон. Проблемы связаны с цветовым пространством изображения, которое обеспечивает DCI-P3, в то время как большинство наших алгоритмов были написаны для стандартного цветового пространства sRGB более старых iPhone и Android, которыми мы владеем.

Область скриншота, дающая нам проблемы, имеет значения RGB r=59, g=125, b=236 в цветовом пространстве DCI-P3. Мы ожидаем, что красный канал будет меньше 30, и, конечно же, преобразование изображения с помощью параметра "Изменить-> Преобразовать в профиль" в Photoshop приведет к тому, что конкретный пиксель будет иметь значение красного цвета 22.

Мы выполняем эту обработку изображений на веб-сервисе Jax-RS, поэтому моей первой попыткой решения проблемы было использование javax.imageio.ImageIO и его друзей. К сожалению, типичная рекомендация скрыть цветовое пространство изображения с помощью приведенного ниже не работает (значения красного по-прежнему слишком высоки):

BufferedImage screenshotCopy = new BufferedImage(screenshot.getWidth(), screenshot.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = screenshotCopy.createGraphics();
g2d.drawImage(screenshot, 0, 0, null);
g2d.dispose();

Я также пытался использовать Imagemagick, но, будучи новичком в этом инструменте, у меня был только некоторый успех. Imagemagick может использовать цветовые пространства для преобразования, но когда я попытался это сделать, красный канал был еще выше 70+.

magick convert IMG_0812.PNG -profile ~/Desktop/srgb.icc IMG_0812_converted.PNG

Может ли кто-нибудь помочь мне правильно преобразовать эти цветовые пространства, используя ImageIO (предпочтительно) или ImageMagick, который создает результирующее изображение, похожее на инструмент Photoshop "Редактировать-> Преобразовать в профиль"?

1 ответ

Решение

Можете ли вы опубликовать ссылку на ваш вход PNG?

Если ваше входное изображение PNG не включает профиль DCI-P3, то вам необходимо добавить это также в команду ImageMagick, которая будет выглядеть так:

magick IMG_0812.PNG -profile ~/Desktop/DCI-P3-DCI.icc -profile ~/Desktop/srgb.icc IMG_0812_converted.PNG

or

magick IMG_0812.PNG -profile ~/Desktop/DCI-P3-D65.icc -profile ~/Desktop/srgb.icc IMG_0812_converted.PNG


Для профилей DCI-P3 см.: http://www.color.org/chardata/rgb/DCIP3.xalter

Обратите внимание, что в ImageMagick 7 магия заменяет конвертирование. Если вы используете магическое преобразование, то вы, вероятно, будете использовать ImageMagick 6.

Другие вопросы по тегам