想象一下| 渐变映射

Ron*_*ald 1 php image filter imagick

我试图用imagick在图像上获得这种效果.在Photoshop中它被称为渐变映射,但我在想象中找不到任何类似的东西.

我想我首先需要把它变成黑白,但是这样做之后我就不知道如何添加颜色了.

希望你能帮忙!谢谢

---编辑:---

  • 我正在使用Imagick,而不是imagemagick.
  • 请注意,图像中有两种颜色,它不仅仅是着色.深蓝色为深色,浅绿色/浅色为浅色.

在此输入图像描述

Mar*_*ell 9

PHP Imagick版本

现在我了解了你的需求,我做了一个Imagick PHP版本:

<?php
   // Load input image
   $image = new Imagick('landscape.jpg');

   // Desaturate image
   $image->modulateImage(100,0,100);

   // Make duotone CLUT
   $clut = new Imagick();
   $clut->newPseudoImage(255,1,"gradient:darkblue-aqua");

   // Apply duotone CLUT to image
   $image->clutImage($clut);

   // Output result
   $image->writeImage('result.jpg');
?>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更新的答案

哦,我想你想要一个"双色调"而不是"色调".基本上,您需要将图像去饱和为单色,制作双色调CLUT(颜色查找表)并应用它.

以下是如何进行CLUT:

convert -size 1x256! gradient:navy-orange duotone-clut.png
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这个显然会让你的暗色调呈深蓝色,而你的亮点会变成橙色,但你可以随心所欲地使用这些颜色.您还可以使用以下语法指定RGB(或HSL)的任何阴影:

convert -size 1x256! gradient:"rgb(255,255,0)-rgb(23,45,100)" ...
Run Code Online (Sandbox Code Playgroud)

以下是如何将图像去饱和为灰色,然后应用CLUT:

convert landscape.jpg -modulate 100,0 \
  -size 256x1! gradient:navy-orange -clut result.jpg
Run Code Online (Sandbox Code Playgroud)

-modulate需要3个参数-色相,饱和度和亮度.通过指定100,0我已将Hue保持在100%的任何值,并将饱和度降低到零并使亮度保持不变.

在此输入图像描述

顺便说一下,如果你想要一个有三种颜色的"三色调",一个用于阴影,一个用于中间调,一个用于高光,你可以制作一个这样的:

convert -size 1x1! xc:yellow xc:magenta xc:cyan +append -resize 256x1! -scale x20 clut.png
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这给了这个:

在此输入图像描述

您还可以使用对比度拉伸或通过使用相同颜色填充更大比例的CLUT来移动CLUT中的交叉点.在这里,我通过2个黄色块使阴影颜色"更长".

convert -size 1x1! xc:yellow xc:yellow xc:magenta xc:cyan +append -resize 256x1!  clut.png
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这会产生"更长"的阴影:

在此输入图像描述

显然你也可以制作四音(四音).

原始答案

有许多方法可以达到这种效果.所以,从这张图片开始:

在此输入图像描述

你可以使用tint这样的,这相当于tintImage()在PHP中,描述在这里:

convert landscape.jpg -colorspace gray -fill "rgb(10,100,130)" -tint 100 result.png
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

或者,您可以克隆初始图像并使用您的色调填充克隆,然后将其合成到图像顶部.你可以使用colorizeImage()PHP中,描述在这里:

convert landscape.jpg -colorspace gray                  \
   \( +clone -fill "rgb(10,100,130)" -colorize 100% \)  \
   -compose overlay -composite result.png
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述