gpt4 book ai didi

javascript - PHP 或 JS : adjust color channel levels when converting image to black and white

转载 作者:搜寻专家 更新时间:2023-10-31 20:39:13 25 4
gpt4 key购买 nike

我正在寻求有关如何调整黑白(或灰度)图像的颜色 channel 级别的帮助。在 photoshop 中,此功能称为黑白滤镜。

下面的例子展示了我的过程。最终图像中的红色衬衫(完美的中灰色)是黑色的。

原始图片 enter image description here

将色调更改为绿色 enter image description here

Final Image Now Black and White(中灰色/红色衬衫黑色) enter image description here

最佳答案

对于 Imagemagick,您将使用 -level运算符调整黑白端点,这反过来又可以应用于特定颜色 channel .

例子:

 convert source.png -level 45%,80% out.png

使用 PHP 的 Imagick library ,您将使用 Imagick::levelImage方法。

$img = new Imagick('source.png');
$quantum = $img->getQuantumRange()['quantumRangeLong'];
$img->levelImage(0.45 * $quantum, 1.0, 0.80 * $quantum, Imagick::CHANNEL_ALL);

更新

要生成中间图像(绿色衬衫),您可以将“红色 -> 绿色”色调调制与 -modulate 结合使用. Hue Modulation 中的示例文档。

convert source.jpg -modulate 100,100,166.6 green.png
// or in PHP
Imagick::modulateImage ( float $brightness , float $saturation , float $hue )

Red to Green modulate

现在要将颜色换成黑色,只需使用 -fuzz-opaque .但老实说,所有的绿色调让我想起了 Chroma Key定义为...

chroma key

隔离 mask 后,交换颜色、背景或更复杂的图像就非常简单。

convert green.png -fx '1 * b - 1 * g + 1' mask.png

shirt mask

蒙版方法的主要好处是颜色细节(阴影、高光和线条)将保留在最终图像中。在 PHP 中将所有这些整合在一起:

$img = new Imagick("source.jpg");
$org = clone $img; // Copy source for final composite
$img->modulateImage(100,100,166.6); // Convert hues from red to green
/*
Apply fx operations. Remember: K0, K1, & K2 are constants
that need to be adjusted to match the chroma-key that you
want to knockout.
*/
$mask = $img->fxImage('1.35 * b - 0.95 * g + 1');
// Copy the mask as the new alpha channel
$org->compositeImage($mask, Imagick::COMPOSITE_COPYOPACITY, 0, 0, Imagick::CHANNEL_ALPHA);

original image with alpha mask applied

用黑色 80%(或灰色 20%)填充衬衫。在纯彩色图像上合成新图像,然后降为灰度。

$fin = new Imagick();
$fin->setSize($org->width, $org->height);
$fin->readImage("xc:gray20");
$fin->compositeImage($org, Imagick::COMPOSITE_DEFAULT, 0, 0);
$fin->setImageColorspace(Imagick::COLORSPACE_GRAY);
$fin->writeImage('fin.jpg');

Black 80% with highlights

下面是用图案填充衬衫的示例。

$pattern = new Imagick();
$pattern->setSize($org->width, $org->height);
$pattern->readImage("pattern:VERTICALSAW");
$pattern->negateImage(false);
$pattern->compositeImage($org, Imagick::COMPOSITE_DEFAULT, 0, 0);
$pattern->setImageColorspace(Imagick::COLORSPACE_GRAY);
$pattern->writeImage('pattern.jpg');

Pattern Example

同样,如果您想保留细节,这是理想的选择。如果你想做一个完整的淘汰赛(例如,所有绿色到黑色 80%),只需使用 -fill , -opaque & -fuzz .

例子:

convert green.png  -fill gray20 -fuzz 30% -opaque hsl\(33%,100%,50%\) black80.png
convert black80.png -colorspace Gray bw_shirt.png

final shirt

关于javascript - PHP 或 JS : adjust color channel levels when converting image to black and white,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27514599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com