有誰知道調整層如何在Photoshop中工作?我需要從色調/飽和度調整圖層生成具有源圖像和HSL值的結果圖像。轉換爲RGB,然後與源顏色相乘不起作用。從Photoshop的色相/飽和度調整層的算法
或者是否有可能用適當設置的混合模式(Mulitiply,Screen,Hue,Saturation,Color,Luminocity,...)用普通圖層替換色相/飽和度調整圖層? 如果是的話那怎麼樣?
謝謝
有誰知道調整層如何在Photoshop中工作?我需要從色調/飽和度調整圖層生成具有源圖像和HSL值的結果圖像。轉換爲RGB,然後與源顏色相乘不起作用。從Photoshop的色相/飽和度調整層的算法
或者是否有可能用適當設置的混合模式(Mulitiply,Screen,Hue,Saturation,Color,Luminocity,...)用普通圖層替換色相/飽和度調整圖層? 如果是的話那怎麼樣?
謝謝
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;
我逆向工程的計算爲當「彩色化」複選框被選中。下面的所有代碼是僞代碼。
輸入是:
HSV(photoshop_hue, 100, 100).ToRGB()
photoshop_saturation/100.0
(即0..1)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)
凡blend2
和blend3
是:
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
我已經找到了如何亮度作品。
輸入參數亮度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
不過,如果你選擇一些間隔(如紅色,而不是碩士),亮度表現完全不同,更像是飽和度。
你好,我寫了彩色化着色器和我的方程式folows
inputRGB是這應該是在單色
(r+g+b) * 0.333
colorRGB是你的目標顏色
finalRGB是結果
僞代碼:
finalRGB = inputRGB * (colorRGB + inputRGB * 0.5);
我認爲這是快速和有效的
當「彩色化」複選框被選中,下層的光亮度與所述色調和飽和度的滑塊的值合併,並從HSL轉換根據方程爲RGB在https://en.wikipedia.org/wiki/HSL_and_HSV#From_HSL。 (Lightness滑塊只是將亮度重新映射到縮放的一個子集,正如您從觀看柱狀圖所看到的那樣;效果非常糟糕,我不明白爲什麼有人會使用它。)
非常感謝分享。我玩過你的代碼,看起來效果比預期的要好一點。然後我意識到這是因爲這條線2 *(1 +亮度)*(值)-1而發生的,如果我們不乘以(1 +亮度)*(值)與2,則問題得以解決。 – user65721 2013-08-15 11:29:53
謝謝,太棒了! – 2013-09-16 14:10:08