使用convert将亮度通道替换为另一个亮度通道

时间:2015-05-25 01:47:13

标签: imagemagick hsl

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

1 个答案:

答案 0 :(得分:2)

至少有两种方法可以做到......

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

convert 1.png 2.png -colorspace HSL -channel L -fx "v" -colorspace RGB result.png

这将加载两个图像,1.png和2.png,并将它们转换为HSL颜色空间。然后,它将使用图像v中的值生成新的Lighness通道(这是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的Hue,第2层将是1.png的饱和度,第3层将是1.png的亮度。 3-5层将是2.png的色调,饱和度和亮度。然后我们删除删除1.png的亮度和2.png的Hue&然后饱和度将三个通道合并为一个新图像,将其转换回RGB并将其保存为result.png

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

convert -size 256x256              \
      xc:red xc:lime +append       \
   \( xc:blue xc:black +append \)  \
     -append 1.png

enter image description here

和这个

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

enter image description here

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

convert 1.png 2.png -colorspace HSL -channel L -fx "v" -colorspace RGB result.png

我得到了这个

enter image description here

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