首页 > 解决方案 > 更改 CMYK 图像的一种颜色

问题描述

我有一个 RGB 图像,我将其转换为 CMYK,如下所示:

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

但现在,我想将图像的所有白色部分转换为另一种颜色。所以 cmyk=0%,0%,0%,0%cmyk=0%,0%,3%,0%。但我不希望转换整个图像,只转换白色部分。

请问我该怎么办?

标签: phpimagickcmyk

解决方案


有很多方法可以实现这一目标。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 图像的一种颜色


推荐阅读