想像 |渐变贴图
imagick | Gradient map
我正在尝试使用 imagick 在图像上获得这种效果。在 photoshop 中它被称为渐变贴图,但我在 imagick 中找不到类似的东西。
我想我需要先把它变成黑白的,但我不知道这样做之后如何添加颜色。
希望对您有所帮助!谢谢
--- 编辑:---
- 我正在使用 Imagick,而不是 imagemagick。
- 请注意图像中有两种颜色,它不仅仅是彩色的。较深的颜色为深蓝色,较浅的颜色为浅 green/aqua。
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');
?>
更新答案
哦,我想你想要 "duotone" 而不是 "tint"。基本上,您需要将图像去饱和为单声道,制作双色调 CLUT(颜色查找 Table)并应用它。
以下是制作 CLUT 的方法:
convert -size 1x256! gradient:navy-orange duotone-clut.png
这个显然会让你的深色调变成海军蓝,高光变成橙色,但你可以随意调整颜色。您还可以根据需要使用以下语法指定任何 RGB(或 HSL)阴影:
convert -size 1x256! gradient:"rgb(255,255,0)-rgb(23,45,100)" ...
以下是将图像去饱和化为灰色然后应用 CLUT 的方法:
convert landscape.jpg -modulate 100,0 \
-size 256x1! gradient:navy-orange -clut result.jpg
-modulate
有 3 个参数 - 色调、饱和度和亮度。通过指定 100,0
,我将色相保持在原来的 100%,并将饱和度降低为零,并保持亮度不变。
顺便说一下,如果你想要一个有 3 种颜色的 "tritone",一种用于阴影,一种用于中间调,一种用于高光,你可以制作一个像这个:
convert -size 1x1! xc:yellow xc:magenta xc:cyan +append -resize 256x1! -scale x20 clut.png
这给出了这个:
您还可以在 CLUT 中四处移动交叉点,使用对比度拉伸或让更大比例的 CLUT 填充相同的颜色。在这里,我使用 2 个黄色块来制作阴影颜色 "longer"。
convert -size 1x1! xc:yellow xc:yellow xc:magenta xc:cyan +append -resize 256x1! clut.png
这给出了 "longer" 阴影:
显然你也可以制作四色调(quad-tone)。
原答案
有多种方法可以实现该效果。所以,从这张图片开始:
你可以这样使用tint
,对应PHP中的tintImage()
,描述here:
convert landscape.jpg -colorspace gray -fill "rgb(10,100,130)" -tint 100 result.png
或者您可以克隆您的初始图像并用您的色调填充克隆,然后将其合成在图像的顶部。您将在 PHP 中使用 colorizeImage()
,描述为 here:
convert landscape.jpg -colorspace gray \
\( +clone -fill "rgb(10,100,130)" -colorize 100% \) \
-compose overlay -composite result.png
PHP Imagick 有一个名为 pslayers 的库,它允许您进行您所描述的图像分层和合成。
它甚至允许您创建命令行脚本的界面,以便直接与命令行版本交互。
我正在尝试使用 imagick 在图像上获得这种效果。在 photoshop 中它被称为渐变贴图,但我在 imagick 中找不到类似的东西。
我想我需要先把它变成黑白的,但我不知道这样做之后如何添加颜色。
希望对您有所帮助!谢谢
--- 编辑:---
- 我正在使用 Imagick,而不是 imagemagick。
- 请注意图像中有两种颜色,它不仅仅是彩色的。较深的颜色为深蓝色,较浅的颜色为浅 green/aqua。
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');
?>
更新答案
哦,我想你想要 "duotone" 而不是 "tint"。基本上,您需要将图像去饱和为单声道,制作双色调 CLUT(颜色查找 Table)并应用它。
以下是制作 CLUT 的方法:
convert -size 1x256! gradient:navy-orange duotone-clut.png
这个显然会让你的深色调变成海军蓝,高光变成橙色,但你可以随意调整颜色。您还可以根据需要使用以下语法指定任何 RGB(或 HSL)阴影:
convert -size 1x256! gradient:"rgb(255,255,0)-rgb(23,45,100)" ...
以下是将图像去饱和化为灰色然后应用 CLUT 的方法:
convert landscape.jpg -modulate 100,0 \
-size 256x1! gradient:navy-orange -clut result.jpg
-modulate
有 3 个参数 - 色调、饱和度和亮度。通过指定 100,0
,我将色相保持在原来的 100%,并将饱和度降低为零,并保持亮度不变。
顺便说一下,如果你想要一个有 3 种颜色的 "tritone",一种用于阴影,一种用于中间调,一种用于高光,你可以制作一个像这个:
convert -size 1x1! xc:yellow xc:magenta xc:cyan +append -resize 256x1! -scale x20 clut.png
这给出了这个:
您还可以在 CLUT 中四处移动交叉点,使用对比度拉伸或让更大比例的 CLUT 填充相同的颜色。在这里,我使用 2 个黄色块来制作阴影颜色 "longer"。
convert -size 1x1! xc:yellow xc:yellow xc:magenta xc:cyan +append -resize 256x1! clut.png
这给出了 "longer" 阴影:
显然你也可以制作四色调(quad-tone)。
原答案
有多种方法可以实现该效果。所以,从这张图片开始:
你可以这样使用tint
,对应PHP中的tintImage()
,描述here:
convert landscape.jpg -colorspace gray -fill "rgb(10,100,130)" -tint 100 result.png
或者您可以克隆您的初始图像并用您的色调填充克隆,然后将其合成在图像的顶部。您将在 PHP 中使用 colorizeImage()
,描述为 here:
convert landscape.jpg -colorspace gray \
\( +clone -fill "rgb(10,100,130)" -colorize 100% \) \
-compose overlay -composite result.png
PHP Imagick 有一个名为 pslayers 的库,它允许您进行您所描述的图像分层和合成。
它甚至允许您创建命令行脚本的界面,以便直接与命令行版本交互。