ImageMagick, ICC і PHP: коректна обробка кольорів та зображень на Linux
Для коректної обробки зображень на сервері важливо мати підтримку збереження пропорцій, обрізки, потрібних форматів і перетворення кольорів, зокрема AdobeRGB → sRGB. Нижче — приклад встановлення ImageMagick 7.1.2-0 із потрібними делегатами на Debian/Ubuntu.
Теги: #linux #images #imagemagick #php
1. Встановіть залежності для компіляції
sudo apt update
sudo apt install -y build-essential checkinstall libxml2 libxml2-dev liblcms2-dev libpng-dev libtiff-dev libwebp-dev libfreetype6-dev libjpeg-dev zlib1g-dev libzstd-dev
Перевірте, що встановлені XML і Little CMS:
dpkg -l | grep libxml2
dpkg -l | grep liblcms2
2. Завантажте та скомпілюйте ImageMagick 7.1.2-0
cd ~
wget https://imagemagick.org/archive/ImageMagick.tar.gz
tar xvzf ImageMagick.tar.gz
cd ImageMagick-7.*
Для пошуку бібліотек через pkg-config додайте шлях:
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH
Запустіть конфігурацію з підтримкою потрібних делегатів:
./configure --with-modules --with-xml --with-lcms --with-jpeg --with-png --with-tiff --with-webp --with-freetype --with-zlib --with-zstd
Скомпілюйте та встановіть:
make -j$(nproc)
sudo make install
sudo ldconfig /usr/local/lib
3. Перевірте версію та делегати
magick -version
У виводі очікується ImageMagick 7.1.2-0 і делегати на кшталт jpeg png tiff webp xml lcms. Якщо потрібного делегата немає, перевірте dev-пакет і повторіть configure та компіляцію.
4. Встановіть ICC-профілі
Завантажте профілі sRGB2014.icc та AdobeRGB1998.icc із color.org, після чого скопіюйте їх у системний каталог:
sudo mkdir -p /usr/local/share/icc
sudo cp ~/Downloads/sRGB2014.icc /usr/local/share/icc/sRGB2014.icc
sudo cp ~/Downloads/AdobeRGB1998.icc /usr/local/share/icc/AdobeRGB1998.icc
Під час конвертації AdobeRGB у sRGB застосовуйте профілі явно у вашому ImageMagick або PHP-коді. Це допомагає уникати тьмяних, перенасичених чи неправильно відображених кольорів у браузері.
5. Перевірте PHP Imagick
PHP-розширення imagick може бути зібране проти іншої версії ImageMagick, ніж CLI-команда magick. Перевірте версію з боку PHP:
php -m | grep imagick
php --ri imagick
Якщо PHP Imagick використовує стару бібліотеку, його потрібно оновити або перевстановити після встановлення ImageMagick. Переконайтеся, що PHP-процес має доступ до /usr/local/share/icc/.
Діагностика
- Увімкніть лог PHP, наприклад
/var/log/php_errors.log. - Перевірте права доступу до ICC-файлів для користувача PHP-FPM.
- Не довіряйте лише наявності CLI
magick— вебзастосунок може використовувати іншу бібліотеку. - Після зміни бібліотек перезапустіть PHP-FPM і вебсервер.
sudo systemctl restart php8.2-fpm
sudo systemctl reload nginx
Конкретну назву сервісу PHP-FPM замініть на ту, що використовується у вашій системі.
Коментарі (0)