更改CMYK图像的一种颜色

时间:2018-05-29 08:25:33

标签: php imagick cmyk

我有RGB的图像,我将其转换为CMYK:

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

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

我该怎么办?

1 个答案:

答案 0 :(得分:0)

有很多方法可以实现这一目标。例如FX expressionsImagick::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%值。

Change one color of CMYK image