我有RGB的图像,我将其转换为CMYK:
$img->transformimagecolorspace(Imagick::COLORSPACE_RGB);
但是现在,我想将图像的所有白色部分转换为另一种颜色。所以 cmyk = 0%,0%,0%,0%至 cmyk = 0%,0%,3%,0%。但我不希望整个图像被转换,只有白色部分。
我该怎么办?
答案 0 :(得分:0)
有很多方法可以实现这一目标。例如FX expressions或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%
值。