Imagemagick 使用“转换”将亮度通道替换为其他亮度通道

Imagemagick 使用“转换”将亮度通道替换为其他亮度通道,imagemagick,hsl,Imagemagick,Hsl,如何使用ImageMagick将1.png的HSL亮度频道替换为2.png的HSL亮度频道?我几乎无法理解转换语法。至少有两种方法可以做到这一点 首先,最慢的是使用-fx,命令如下所示: convert 1.png 2.png -colorspace HSL -channel L -fx "v" -colorspace RGB result.png convert -size 256x256 \ xc:red xc:lime +append \

如何使用ImageMagick将1.png的HSL亮度频道替换为2.png的HSL亮度频道?我几乎无法理解转换语法。

至少有两种方法可以做到这一点

首先,最慢的是使用
-fx
,命令如下所示:

convert 1.png 2.png -colorspace HSL -channel L -fx "v" -colorspace RGB result.png
convert -size 256x256              \
      xc:red xc:lime +append       \
   \( xc:blue xc:black +append \)  \
     -append 1.png
这将加载两个图像,1.png和2.png,并将它们转换为HSL颜色空间。然后,它将使用image
v
中的值生成一个新的亮度通道(这就是ImageMagick如何引用序列中的第二个图像-第一个是
u
)。然后将生成的图像转换回RGB颜色空间

第二种方法看起来像这样,速度更快,尤其是在较大的图像上:

convert 1.png 2.png      \
  -colorspace HSL        \
  -separate              \
  -delete 2-4            \
  -combine               \
  -set colorspace HSL    \
  -colorspace rgb        \
  output.png
基本上,它将加载这两个图像,将它们转换为HSL,并将它们分离成层。第0层为1。png的色调,第2层为1。png的饱和度,第3层为1。png的亮度。第3-5层为2层。png的色调、饱和度和亮度。然后我们删除1.png的亮度和2.png的色调和饱和度,然后将三个通道合并成一个新图像,将其转换回RGB并保存为
result.png

为了测试它,我创建了两个虚拟输入图像,如下所示:

convert 1.png 2.png -colorspace HSL -channel L -fx "v" -colorspace RGB result.png
convert -size 256x256              \
      xc:red xc:lime +append       \
   \( xc:blue xc:black +append \)  \
     -append 1.png

还有这个

convert -size 512x512 gradient:black-white 2.png

然后我应用我的第一个技巧,即

convert 1.png 2.png -colorspace HSL -channel L -fx "v" -colorspace RGB result.png
我明白了

第二种技术给出了相同的结果