Я пытаюсь преобразовать RGB .gif в CMYK .gif, используя модуль IMagick PHP.
Я написал этот фрагмент кода
$i = new Imagick('mosaique.gif'); $i->setImageColorspace(Imagick::COLORSPACE_CMYK); $i->setImageFormat('gif'); $i->writeImage('mosaique-cmyk.gif');
Но результирующая «mosaique-cmyk.gif» все еще RGB … но с инвертированными цветами (O_O)
Что я делаю не так?
РЕДАКТИРОВАТЬ:
Я пробовал с .jpg, и изображение преобразуется в CMYK, но оно по-прежнему отрицательно.
EDIT 2:
Я попытался запустить мой скрипт, создавая .pdf на другом сервере, и он отлично работает.
Есть ли известная ошибка в IMagick? Есть ли какие-то варианты для установки в библиотеке php5?
Версия, которая возвращает мне перевернутое изображение, новее, чем тот, который работает правильно
НЕПРАВИЛЬНЫЙ РЕЗУЛЬТАТ PHP 5.3.3 IMagick 3.0.0RC1 ImageMagick 6.6.2
CORRECT RESULT PHP 5.2.10 IMagick 2.1.1 ImageMagick 6.5.1
Ошибка на самом деле это ошибка;)
Я сообщил об этом, другой подтвердил мой страх, и теперь он назначен разработчику для исправления: http://pecl.php.net/bugs/bug.php?id=22184
На данный момент решение заключается в использовании другой версии библиотек.
GIF – 256-цветной формат, также известный как «индексированный». Я не думаю, что можно сохранить gif как cmyk. Каждый из 256 цветов является значением RGB, но он не способен хранить полную гамму RGB.
Попробуй это:
$im->stripImage(); $icc_cmyk_profile_path='image_functions/cmyk_icc_profiles/USWebUncoated.icc'; //[http://www.mattbeals.com/icc/][1] $icc_cmyk = file_get_contents($icc_cmyk_profile_path); $im->profileImage('icc', $icc_cmyk); unset($icc_cmyk); $colorspace=$im->getImageColorspace(); if ($colorspace==12) { echo "CMYK"; } $im->stripImage(); $im->writeImage($destination); $im->clear(); $im->destroy();
с$im->stripImage(); $icc_cmyk_profile_path='image_functions/cmyk_icc_profiles/USWebUncoated.icc'; //[http://www.mattbeals.com/icc/][1] $icc_cmyk = file_get_contents($icc_cmyk_profile_path); $im->profileImage('icc', $icc_cmyk); unset($icc_cmyk); $colorspace=$im->getImageColorspace(); if ($colorspace==12) { echo "CMYK"; } $im->stripImage(); $im->writeImage($destination); $im->clear(); $im->destroy();
Я решил эту проблему: Посетите мой ответ на этой странице stackoverflow: Конвертируйте изображение из RGB в CMYK с помощью Imagick
(Kevin)
Это проблема negateImage (). Легко исправить.
см. здесь http://imagemagick.org/Usage/formats/#color_profile
конвертировать cmyk_image.jpg -colorspace rgb rgb_image.jpg