Почему картинка меняет цветность при изменении средствами ImageMagick?
При редактировании изображения средствами PHP картинка иногда меняет цветность. Хоть цвета не трогали. Как выяснилось, что это не проблема PHP и вообще не проблема языка программирования. В linux-консоли при изменении через ImageMagick, эти картинки ведут себя точно также.
Что делать и как решить эту проблему?
Как проявляется проблема?
Вроде не особо важная проблема, но порой она является критической. К примеру, на сайте лакокрасочных товаров при ресайзе изображений, эта проблема будет заметна.
Вот так выглядит проблема, если взять портрет человека:
Слева оригинал, а справа «ресайз». Цвета становятся жухлыми и блеклыми. С цветом, повторяю, никаких манипуляций не делалось.
Решение
Проблема заключается в цветовом профиле, который прикреплен к изображению. Некоторые дизайнеры и фотографы при ретушировании используют цветовой профиль «по максимуму». И при сохранении готового результата не всегда меняют его на правильный.
В моем примере фотограф использовал для ретуши фотографии – ProPhoto RGB, а когда сохранял результат забыл поменять на sRGB. Всегда для сайта нужно сохранять изображения в цветовом пространстве sRGB. И ни в каком другом.
ImageMagick, который используется в PHP при ресайзе изображений, не знает про профиль ProPhoto RGB и приводит его к sRGB. Приводит как умеет и из-за этого меняются цвета.
Чтобы команды ниже работали нужно установить imagemagick
:
sudo apt install imagemagick
В Windows тоже можно поставить этот пакет. Команды идентичны.
Проверить какой профиль используется на Linux можно командой:
identify -verbose 001.jpg | grep Colorspace
Colorspace: ProPhoto
Чтобы заменить цветовой профиль у изображения, нужно:
- Загрузить профиль отсюда или с этого блога - "sRGB2014.icc":/file_download/63/sRGB2014.icc
- Выполнить команду (Внимание! Файл заменится на исправленный):
В примере выше сам профиль был в той же директории, что и изображения. Если у вас они в разных местах, то пути должны быть абсолютные.mogrify -profile sRGB2014.icc 001.jpg
Если необходимо поменять цветовой профиль у большого количества изображений, то используем команду:
for f in $(find НАЗВАНИЕ_ДИРЕКТОРИИ -name '*.jpeg'); do mogrify -profile sRGB2014.icc $f; done
Команда умеет рекурсивно ходить по вложенным директориям и менять цветовой профиль у картинок. В Windows не работает.
Иногда для ImageMagick не хватает ресуров. Добавить их можно так.
На будущее дизайнера/фотографа стоит попросить сохранять финальные версии фотографий в цветовом охвате – sRGB, который используется для web.
Немного теории по профилям цветности
Вообще, если вы хотите углубится в тему цветового пространства, когда использовать sRGB, а когда ProPhoto RGB, то за меня уже это сделали вот здесь.
Кратко:
sRGB
- Немного «усеченная» цветность. Но несмотря на это в 99% случаев ее достаточно.
- Все TN-мониторы до sRGB не дотягивают, а точнее не показывают практически 10-20% цветов.
- IPS мониторы максимально приближены к этому охвату.
- Все изображения для сайта сохранять в sRGB.
- Если используется другой профиль, браузер будет стараться подобрать подходящий и не всегда это будет выглядеть как в оригинале.
Adobe RGB
- Этот профиль стоит использовать только для полиграфии, так как печатающие устройства высокого качества имеют больший цветовой охват.
- Мониторы, поддерживающие цветовой охват до Adobe RGB стоят очень дорого.
- На ноутбуках такие матрицы не ставят.
ProPhoto RGB
- Цветовой профиль только для расчетов. Этот формат стоит использовать только для сложной и тяжелой ретуши, так как незачем ограничивать графический редактор в точности вычислений.
- Современные мониторы не поддерживают такой цветовой охват.
- После ретуши цветовой профиль нужно всегда менять на sRGB – для web или на Adobe RGB – для печати.
Теги: