ImageMagick';HSL上的s复合材料(非HSB或HSV)

ImageMagick';HSL上的s复合材料(非HSB或HSV),imagemagick,photoshop,color-space,hsl,hsb,Imagemagick,Photoshop,Color Space,Hsl,Hsb,我只想通过编写CUI工具来替换Photoshop基于HSL的混合模式(颜色/色调/饱和度/亮度)。 如果我能通过RMagick做就更好了 ImageMagick可以管理HSL颜色空间,但ImageMagick的复合操作符Colorize/Hue/Saturation/Luminize是基于HSB颜色空间硬编码的 在不编写逐像素处理代码的情况下,是否有任何解决方法? 谢谢。我尝试了分离和合并的方法。 然后一个故事开始了 ImageMagick-6.6.9-7在rgbhsl计算中存在一个精确定位错误

我只想通过编写CUI工具来替换Photoshop基于HSL的混合模式(颜色/色调/饱和度/亮度)。 如果我能通过RMagick做就更好了

ImageMagick可以管理HSL颜色空间,但ImageMagick的复合操作符Colorize/Hue/Saturation/Luminize是基于HSB颜色空间硬编码的

在不编写逐像素处理代码的情况下,是否有任何解决方法?
谢谢。

我尝试了分离和合并的方法。 然后一个故事开始了

ImageMagick-6.6.9-7在rgbhsl计算中存在一个精确定位错误。 Ubuntu12.04 LTS的包存储库提供了它。。。grrrr (ImageMagick本身,固定在r4431,并具有>=6.6.9-9的良好性能)

然后我坐下来做数学运算,得到一个简单的-fx表达式

着色\u hsl.fx:

ul = u.lightness; vl = v.lightness;
bias = (ul < .5 ? ul : 1 - ul)/(vl < .5 ? vl : 1 - vl);
(v - vl)*bias + ul
ul=u.亮度;vl=v.亮度;
偏差=(ul<0.5?ul:1-ul)/(vl<0.5?vl:1-vl);
(v-vl)*偏差+ul
这是一个基于rgb的公式来设置新的亮度并保持其色调和饱和度。 要获得luminize_hsl,请交换u和v

临时VAR(ul、vl和bias)在所有通道中都很常见, 但是-fx引擎可能会尝试3次。
这还不够……

ImageMagick将这些复合操作符转换为HSL(或HCL,Photoshop使用的HSL变体,称为luma/chroma/hue模型)。