2010-12-10 143 views
12

有誰知道調整層如何在Photoshop中工作?我需要從色調/飽和度調整圖層生成具有源圖像和HSL值的結果圖像。轉換爲RGB,然後與源顏色相乘不起作用。從Photoshop的色相/飽和度調整層的算法

或者是否有可能用適當設置的混合模式(Mulitiply,Screen,Hue,Saturation,Color,Luminocity,...)用普通圖層替換色相/飽和度調整圖層? 如果是的話那怎麼樣?

謝謝

回答

3

Photoshop,dunno。但理論通常是:RGB圖像通過特定層的內部方法轉換爲HSL/HSV;然後根據指定的參數修改每個像素的HSL,並且將這樣獲得的結果提供回(用於顯示)RGB中。

PaintShopPro7用於以30°(IIRC)的離散增量分割H空間(假設範圍爲0..360),所以如果僅碰撞「黃色」,即只有H分量被估值的像素45-75將被考慮用於操縱。

紅色345..15,橘子15..45,黃色45..75,黃綠75..105,果嶺105..135等

 
if (h >= 45 && h < 75) 
     s += s * yellow_percent; 

有選擇的可能性,如應用衰減過濾器,如:

 
/* For h=60, let m=1... and linearly fall off to h=75 m=0. */ 
m = 1 - abs(h - 60)/15; 
if (m < 0) 
     m = 0; 
s += s * yellow_percent * d; 
9

我逆向工程的計算爲當「彩色化」複選框被選中。下面的所有代碼是僞代碼

輸入是:

  • hueRGB,其是用於HSV(photoshop_hue, 100, 100).ToRGB()
  • 飽和,這是photoshop_saturation/100.0(即0..1)
  • 亮度一個RGB顏色 ,即photoshop_lightness/100.0(即-1..1)
  • ,這是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) 

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 
+0

非常感謝分享。我玩過你的代碼,看起來效果比預期的要好一點。然後我意識到這是因爲這條線2 *(1 +亮度)*(值)-1而發生的,如果我們不乘以(1 +亮度)*(值)與2,則問題得以解決。 – user65721 2013-08-15 11:29:53

+0

謝謝,太棒了! – 2013-09-16 14:10:08

3

我已經找到了如何亮度作品。

輸入參數亮度b在[0,2]中,輸出是c(顏色通道)。

if(b<1) c = b * c; 
else c = c + (b-1) * (1-c); 

一些測試:

b = 0 >>> c = 0 // black 
b = 1 >>> c = c // same color 
b = 2 >>> c = 1 // white 

不過,如果你選擇一些間隔(如紅色,而不是碩士),亮度表現完全不同,更像是飽和度。

1

你好,我寫了彩色化着色器和我的方程式folows

inputRGB是這應該是在單色

(r+g+b) * 0.333 

colorRGB是你的目標顏色
finalRGB是結果

源圖像

僞代碼:

finalRGB = inputRGB * (colorRGB + inputRGB * 0.5); 

我認爲這是快速和有效的

0

當「彩色化」複選框被選中,下層的光亮度與所述色調和飽和度的滑塊的值合併,並從HSL轉換根據方程爲RGB在https://en.wikipedia.org/wiki/HSL_and_HSV#From_HSL。 (Lightness滑塊只是將亮度重新映射到縮放的一個子集,正如您從觀看柱狀圖所看到的那樣;效果非常糟糕,我不明白爲什麼有人會使用它。)

相關問題