php - 更改 CMYK 图像的一种颜色
问题描述
我有一个 RGB 图像,我将其转换为 CMYK,如下所示:
$img->transformimagecolorspace(Imagick::COLORSPACE_RGB);
但现在,我想将图像的所有白色部分转换为另一种颜色。所以 cmyk=0%,0%,0%,0%到cmyk=0%,0%,3%,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%
量子颜色计算和设置值。
推荐阅读
- ansible - 在 Ansible 中更改列表值
- python - 使用 openpyxl 加载/保存后合并的单元格被破坏
- android - Material Design 中的大纲编辑文本
- aurelia - 组件模型标记中的 Aurelia 组件插槽
- python - 本地 MSSQL 服务器与 pymssql 的数据库连接失败
- android - 使用 Jitpack 构建库 Github 包含依赖项
- r - 移动一列非数字变量
- node.js - MailChimp API - oauth2 access_token request error
- docker - 运行 DOCKER BUILD 时复制命令失败
- c# - HTTPClient to API, Certificate and SSL errors