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

Use convert to replace lightness channel with another lightness channel

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

至少有两种方法...

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

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

这将加载两个图像,1.png 和 2.png,并将它们都转换为 HSL 色彩空间。然后它将使用图像 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的Lightness和2.png的Hue & Saturation然后将三个通道组合成一个新图像,将其转换回RGB并保存为result.png

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

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

我明白了

第二种方法给出了相同的结果。