Изменить один цвет изображения CMYK

У меня есть изображение в RGB, которое я конвертирую в CMYK следующим образом:

$img->transformimagecolorspace(Imagick::COLORSPACE_RGB);

Но теперь я хочу преобразовать все белые части изображения в другой цвет. Так
= 0 CMYK%, 0%, 0%, 0% в = 0 CMYK%, 0%, 3%, 0%. Но я не хочу, чтобы конвертировалось все изображение, только белые части.

Как я должен сделать, пожалуйста?

0

Решение

Есть много способов достичь этого. FX выражения, или же Imagick::opaquePaintImage, например.

Если вы только начинаете с растровыми изображениями, я бы порекомендовал работать с пиксельными итераторами.

$img = new Imagick('wizard:');
// Force CMYK color channels.
$img->transformImageColorspace(Imagick::COLORSPACE_CMYK);
// Calculate `3%' once.
$yellowValue = $img->getQuantum() * 0.03;
// Copy pixel data into an iterator.
$pixelIter = $img->getPixelIterator();
// Iterate over pixel rows.
foreach($pixelIter as $row) {
// Iterate over pixels.
foreach($row as $pixel) {
/*
We can call `ImagickPixel::isPixelSimilar', but it might be quckier to
use an accumulator.
*/
$sumOfColors = $pixel->getColorValue(Imagick::COLOR_CYAN)
+ $pixel->getColorValue(Imagick::COLOR_MAGENTA)
+ $pixel->getColorValue(Imagick::COLOR_YELLOW)
+ $pixel->getColorValue(Imagick::COLOR_BLACK);
if ($sumOfColors == 0.0) { // Is `WHITE'?
$pixel->setColorValueQuantum(Imagick::COLOR_YELLOW, $yellowValue);
}
}
// Copy values back to image.
$pixelIter->syncIterator();
}

Обратите внимание, что мы рассчитываем & установка 3% значение против квантового цвета.

Изменить один цвет изображения CMYK

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]