使用 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
我明白了
第二种方法给出了相同的结果。
如何使用 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
我明白了
第二种方法给出了相同的结果。