2011-01-28 2 views
3

Я пытаюсь преобразовать RGB .gif в CMYK .gif, используя модуль IMagick PHP.PHP IMagick RGB для CMYK инвертирует?

Я написал этот кусок кода

$i = new Imagick('mosaique.gif'); 
$i->setImageColorspace(Imagick::COLORSPACE_CMYK); 
$i->setImageFormat('gif'); 
$i->writeImage('mosaique-cmyk.gif'); 

Но в результате "Mosaïque-cmyk.gif" еще в RGB ... но с перевернутыми цветов (o_O)

Что я делаю неправильно?

EDIT:

Я попытался с .jpg и изображение преобразуется в CMYK, но замирает в отрицательной.

EDIT 2:

Я попытался запустить мой сценарий делает .pdf на другом сервере, и он работает отлично.

Есть ли известная ошибка в IMagick? Есть ли какие-то варианты для установки в библиотеке php5?

версия, которая возвращает меня перевернутое изображение новее, чем тот, который работает правильно

ошибочный результат PHP 5.3.3 Imagick 3.0.0RC1 ImageMagick 6.6.2

ПРАВИЛЬНЫЙ РЕЗУЛЬТАТ PHP 5.2 .10 IMagick 2.1.1 ImageMagick 6.5.1

ответ

3

Ошибка в том, что это ошибка;)

Я сообщил об этом, некоторые из них r подтвердил мой страх, и теперь он назначен разработчику для исправления: http://pecl.php.net/bugs/bug.php?id=22184

В этот момент решение будет использовать другую версию библиотек.

+0

У меня есть решение для этого. См. Мой ответ –

2

GIF 256-цветной формат, также известный как «индексированный». Я не думаю, что можно сохранить gif как cmyk. Каждый из 256 цветов является значением RGB, но он не способен хранить полную гамму RGB.

+0

Я пробовал с Illustrator и конвертировал ваш .gif в CMYK, но когда он сохраняет изображение как .gif, он вернулся на RGB, так что вы, вероятно, правы!Я тоже пробовал свой предыдущий пример на JPG, он преобразован в CMYK, но он все еще отрицателен: | – Riccardo

+0

CMYK jpg не поддерживается повсеместно. Photoshop делает, но не все программное обеспечение может справиться с этим. Кроме того, технически GIF не является RGB, а индексированным цветом. Вы сбиваете с толку условия. Всякий раз, когда вы конвертируете назад и вперед из rgb в cmyk, вы теряете точность воспроизведения цвета. – horatio

1

Попробуйте это:

$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(); 
-2

посмотреть здесь http://imagemagick.org/Usage/formats/#color_profile

новообращенный cmyk_image.jpg -colorspace rgb_image.jpg RGB

+0

Вопрос был о расширении php imagick, а не о командной строке «конвертировать» ImageMagick, поэтому этот ответ «не по теме». => -1 – griffin

+0

php imagick не делает этого, это просто оболочка для ImageMagick, и если вы знаете параметр командной строки, вы можете использовать его в своем php-коде. –

+0

Это оболочка для библиотеки ImageMagick, а не для инструмента преобразования. Это не то же самое. И оболочка не предоставляет все варианты. https://github.com/mkoppanen/imagick/ вы можете просмотреть исходный код и посмотреть, что он фактически не просто вызывает команды cli IM (см. imagick.c), но предоставляет функции по отдельности. – griffin

0

Я решил эту проблему: Пожалуйста, посетите мой ответ на эту StackOverflow странице: Convert image from RGB to CMYK with Imagick

(Kevin)

Это negateImage() вопрос. Легко исправить.

Смежные вопросы