Javascript PHP或JS:将图像转换为黑白时调整颜色通道级别
我正在寻找有关如何调整黑白(或灰度)图像的颜色通道级别的帮助。在photoshop中,此功能称为黑白滤镜 下面的例子演示了我的过程。红色衬衫(完美的中灰色)在最终图像中为黑色 原始图像 将色调更改为绿色 最终图像现在为黑白(中灰色/红色衬衫黑色)Javascript PHP或JS:将图像转换为黑白时调整颜色通道级别,javascript,php,image-processing,imagemagick,gd,Javascript,Php,Image Processing,Imagemagick,Gd,我正在寻找有关如何调整黑白(或灰度)图像的颜色通道级别的帮助。在photoshop中,此功能称为黑白滤镜 下面的例子演示了我的过程。红色衬衫(完美的中灰色)在最终图像中为黑色 原始图像 将色调更改为绿色 最终图像现在为黑白(中灰色/红色衬衫黑色) 使用Imagemagick,您可以使用操作符来调整黑白端点,这反过来又可以应用于特定的颜色 例如: convert source.png -level 45%,80% out.png convert green.png -fill gray2
使用Imagemagick,您可以使用操作符来调整黑白端点,这反过来又可以应用于特定的颜色 例如:
convert source.png -level 45%,80% out.png
convert green.png -fill gray20 -fuzz 30% -opaque hsl\(33%,100%,50%\) black80.png
convert black80.png -colorspace Gray bw_shirt.png
对于PHP,您将使用该方法
$img=newimagick('source.png');
$quantum=$img->getQuantumRange()['quantumRangeLong'];
$img->levelImage(0.45*$quantum、1.0、0.80*$quantum、Imagick::CHANNEL_ALL);
更新
要生成中间图像(绿色衬衫),可以使用“红色->绿色”色调调制。文档中的示例
现在要将颜色替换为黑色,只需使用和。但老实说,所有的绿色都让我想起了它被定义为
一旦隔离了遮罩,就可以很容易地交换颜色、背景或更复杂的图像
convert green.png -fx '1 * b - 1 * g + 1' mask.png
遮罩方法的主要优点是颜色细节(阴影、高光和线条)将保留在最终图像中。在PHP中将这一切结合在一起:
$img=newimagick(“source.jpg”);
$org=clone$img;//复制最终合成的源
$img->modulateImage(100100166.6);//将色调从红色转换为绿色
/*
应用外汇操作。记住:K0、K1和K2是常数
需要对其进行调整,以匹配所需的色度键
我想击倒你。
*/
$mask=$img->fxImage('1.35*b-0.95*g+1');
//将遮罩复制为新的alpha通道
$org->compositeImage($mask,Imagick::COMPOSITE_copycopacity,0,0,Imagick::CHANNEL_ALPHA);
用于将衬衫填充为黑色80%(或灰色20%)。在纯彩色图像上合成新图像,并降到灰度
$fin=new Imagick();
$fin->setSize($org->宽度,$org->高度);
$fin->readImage(“xc:gray20”);
$fin->compositeImage($org,Imagick::COMPOSITE_DEFAULT,0,0);
$fin->setImageColorspace(Imagick::COLORSPACE\U GRAY);
$fin->writeImage('fin.jpg');
下面是用图案填充衬衫的示例
$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\u GRAY);
$pattern->writeImage('pattern.jpg');
同样,如果您想保留细节,这是理想的。如果你想做一个完整的淘汰赛(如全绿到黑80%),只需使用,&
例如:
convert source.png -level 45%,80% out.png
convert green.png -fill gray20 -fuzz 30% -opaque hsl\(33%,100%,50%\) black80.png
convert black80.png -colorspace Gray bw_shirt.png
您要找的是这个命令吗
convert \
http://i.stack.imgur.com/QW5M0.jpg \
-colorspace gray \
b+w.jpg
结果(左侧为原始红色衬衫,右侧为黑色+白色图像):
还是你想让与原版不同的红色色调变成(几乎)纯黑色在这种情况下,添加一些-gamma
调整,可能:
convert \
http://i.stack.imgur.com/QW5M0.jpg \
-colorspace gray \
-level 0%,100%,0.5 \
b+w-2.jpg
或
以下是两张生成的图像:
当然,你可以用我在这里使用的精确参数玩得更多一些
更新
以下命令首先更改红色通道的颜色级别,然后将此中间结果转换为灰度:
convert \
red---QW5M0.jpg \
-channel R \
-level 0%,40% \
-colorspace gray \
-level 0%,100%,0.5 \
b+w-4.jpg
或
我在问题中的示例中添加了图像。我将示例中的中间(绿色)图像上载到Imagick库中,levelImage没有调整绿色。第二个图像(绿色色调)非常完美,正是我想要的!第三幅图像上的遮罩很好理解(特别是对于未来的项目),但我真的在寻找一种方法,使第三幅图像看起来像我的示例中的那样。有可能吗?顺便问一句,PHP语法是什么呢?convert green.png-fx'1*b-1*g+1'mask.png另一个想法。。。在色调变为绿色后,可以用80%的黑色来代替绿色吗?我不理解你的说法:“红色衬衫(这是一种完美的中灰色)”??在黑白摄影中,红色被认为是一种中灰色,是一种可以测量光线的好颜色。衬衫能在不使肤色和背景色变暗的情况下变暗吗?(这就是为什么我添加了一个中间层以将色调更改为绿色)@Jeffrey:那么你希望这件衬衫是(almoste)纯黑色(没有不同的灰色)但其他灰度应该保持大致不变?Photoshop中有一个名为“黑白”的过滤器,它可以将彩色照片更改为黑白,但仍然可以更改各个颜色级别。那正是我要找的for@Jeffrey:我没有可用的Photoshop,并且我不熟悉它,因此我不完全理解您关于它如何工作的解释,因此我无法真正将其重新实现为ImageMagick命令行…:-(基本上,我需要从第一张彩色图像转换到第三张黑白图像,并能够在转换过程中改变颜色通道。您的第二张到最后一张图像很接近。是否可以使用这种方法使用我的第二张图像(绿色)来获得我的第三张图像(黑白)?
convert \
red---QW5M0.jpg \
-channel R \
-level 0%,80% \
-colorspace gray \
-level 0%,100%,0.5 \
b+w-5.jpg