我只想通过编写一个 CUI 工具来替换 Photoshop 基于 HSL 的混合模式(颜色/色调/饱和度/亮度)。如果我可以通过 RMagick 做到这一点,那就更好了。
ImageMagick 可以管理 HSL 颜色空间,但 ImageMagick 的复合运算符 Colorize/Hue/Saturation/Luminize 被硬编码为基于 HSB 颜色空间。
有没有不编写逐像素处理代码的解决方法?谢谢。
我只想通过编写一个 CUI 工具来替换 Photoshop 基于 HSL 的混合模式(颜色/色调/饱和度/亮度)。如果我可以通过 RMagick 做到这一点,那就更好了。
ImageMagick 可以管理 HSL 颜色空间,但 ImageMagick 的复合运算符 Colorize/Hue/Saturation/Luminize 被硬编码为基于 HSB 颜色空间。
有没有不编写逐像素处理代码的解决方法?谢谢。
我尝试了分离和组合的方法。然后一个故事开始了。
ImageMagick-6.6.9-7 有一个 rgb<->hsl 计算的精确错误。Ubuntu 12.04 LTS 的软件包存储库提供了它... grrrr(ImageMagick 本身,固定在 r4431 并且适用于 >= 6.6.9-9)
然后我坐下来做数学运算,得到一个简单的 -fx 表达式。
colorize_hsl.fx:
ul = u.lightness; vl = v.lightness;
bias = (ul < .5 ? ul : 1 - ul)/(vl < .5 ? vl : 1 - vl);
(v - vl)*bias + ul
这是一个基于 rgb 的公式,用于设置新的亮度并保持其色调和饱和度。要获得 luminize_hsl,请交换 u 和 v。
临时变量(ul、vl 和 bias)在所有通道中都很常见,但 -fx 引擎可能会尝试 3 次。这不够...