Поврежденное преобразование IMagick RGB в CMYK

Я конвертирую изображения из RGB в CMYK с помощью IMagick в PHP.

При конвертации на некоторых изображениях появляются черные сетки.

Код:

$IMagick = new IMagick();
$IMagick->clear();
$IMagick->readImage(SITE_ROOT . 'userfiles/image/products/' . $image); 
$IMagick->negateImage(false, Imagick::CHANNEL_ALL);
$IMagick->setImageColorspace(13);
$icc_cmyk = file_get_contents(dirname(__FILE__).'/USWebCoatedSWOP.icc'); 
$IMagick->profileImage('icc', $icc_cmyk); 
unset($icc_cmyk); 
$IMagick->setImageColorspace(12);
$IMagick->writeImage (SITE_ROOT . 'userfiles/image/products/cmyk/' . $image);

Картинки:

Исходный

Преобразовано

Я конвертирую около 80 изображений в цикле, и большинство из них в порядке. Есть идеи, почему это происходит?

РЕДАКТИРОВАТЬ: Рабочий код:

$IMagick = new IMagick();
$IMagick->clear();
$IMagick->readImage(SITE_ROOT . 'userfiles/image/products/' . $image); 
$icc_cmyk = file_get_contents(dirname(__FILE__).'/USWebCoatedSWOP.icc'); 
$IMagick->profileImage('icc', $icc_cmyk); 
unset($icc_cmyk); 
$IMagick->transformImageColorspace(12);
$IMagick->writeImage (SITE_ROOT . 'userfiles/image/products/cmyk/' . $image);

person Siim Somma    schedule 31.03.2015    source источник
comment
setImageColorspace Задает цветовое пространство изображения. Этот метод следует использовать при создании новых изображений. Чтобы изменить цветовое пространство существующего изображения, вы должны использовать Imagick::transformImageColorspace().   -  person Danack    schedule 31.03.2015
comment
Работал. Также исправлена ​​проблема с инвертированными цветами. Так что нет необходимости отрицать изображение. Не могли бы вы опубликовать это как ответ, чтобы я мог принять его.   -  person Siim Somma    schedule 31.03.2015


Ответы (1)


setImageColorspace следует использовать только при создании новых изображений либо через Imagick::newPseudoImage, либо при рендеринге экземпляра ImagickDraw в изображение.

Для существующих изображений правильным методом изменения цветового пространства изображения является Imagick::transformImageColorspace.

person Danack    schedule 31.03.2015