Photoshop中的色相/饱和度调整层算法

lec*_*hec 12 photoshop hsl rgb colors image-processing

有谁知道调整图层在Photoshop中是如何工作的?我需要从Hue/Saturation调整图层生成具有源图像和HSL值的结果图像.转换为RGB然后与源颜色相乘不起作用.

或者是否可以使用适当设置的混合模式(多重,屏幕,色调,饱和度,颜色,亮度......)将Hue /饱和度调整图层替换为普通图层?如果是这样呢?

谢谢

Rom*_*kov 9

当我选中"Colorize"复选框时,我对计算进行逆向工程.下面的所有代码都是伪代码.

输入是:

  • hueRGB,这是一个RGB色彩HSV(photoshop_hue, 100, 100).ToRGB()
  • 饱和度,即photoshop_saturation / 100.0(即0..1)
  • 亮度,即photoshop_lightness / 100.0(即-1..1)
  • value,即pixel.ToHSV().Value缩放为0..1范围.

着色单个像素的方法:

color = blend2(rgb(128, 128, 128), hueRGB, saturation);

if (lightness <= -1)
    return black;
else if (lightness >= 1)
    return white;

else if (lightness >= 0)
    return blend3(black, color, white, 2 * (1 - lightness) * (value - 1) + 1)
else
    return blend3(black, color, white, 2 * (1 + lightness) * (value) - 1)
Run Code Online (Sandbox Code Playgroud)

在哪里blend2blend3是:

blend2(left, right, pos):
    return rgb(left.R * (1-pos) + right.R * pos, same for green, same for blue)

blend3(left, main, right, pos):
    if (pos < 0)
        return blend2(left, main, pos + 1)
    else if (pos > 0)
        return blend2(main, right, pos)
    else
        return main
Run Code Online (Sandbox Code Playgroud)


use*_*515 2

Photoshop,不知道。但理论通常是:通过特定层的内部方法将RGB图像转换为HSL/HSV;然后根据指定的参数修改每个像素的 HSL,并将所得结果以 RGB 形式返回(用于显示)。

\n\n

PaintShopPro7 用于以 30\xc2\xb0 (IIRC) 的离散增量分割 H 空间(假设范围为 0..360),因此如果您仅碰撞“黄色”,即仅 H 分量值为 45 的像素-75将被考虑进行操纵。

\n\n

红色 345..15、橙色 15..45、黄色 45..75、黄绿色 75..105、绿色 105..135 等。

\n\n
\nif (h >= 45 && h < 75)\ns += s * Yellow_percent;\n
\n\n

还有其他可能性,例如应用衰减过滤器,如下所示:

\n\n
\n/* 对于 h=60,令 m=1...并线性下降到 h=75 m=0。*/\nm = 1 - abs(h - 60) / 15;\nif (m < 0)\nm = 0;\ns += s * Yellow_percent * d;\n
\n