2015-02-24 103 views
1

我正在嘗試找到正確的顏色。例如,如果我有深綠色,那麼我需要淺綠色,或者如果我有淺綠色,那麼我需要深綠色。我有一個代碼告訴我顏色是黑還是淺。尋找暗色/淺色

function calcBrightness(red,green,blue) { 
    return Math.sqrt(
     red * red * .299 + 
     green * green * .587 + 
     blue * blue * .114);   
} 

var brightness = calcBrightness(red, green, blue); 
var foreColor = (brightness < 130) ? "light" : "green"; 

我能夠檢測如果顏色太暗或太亮,但我怎麼能得到深色如果結果是光或顏色如果foreColor值是綠色的嗎?

回答

2

將RGB顏色轉換爲HSL(色調,飽和度,亮度)會使問題變得更容易。

您可以通過更改HSL中的L值輕鬆調整顏色的亮度。

該算法可here

(從問題Javascript convert HSB/HSV color to RGB accurately

+0

我使用代碼爲rgbToHsv(117,106,98),但我得到值爲0,1,2每種顏色 – user3754676 2015-02-24 03:33:29

1

從你的描述,我相信它會需要從RGB彩色空間轉換到HSL(色調,飽和度,亮度),變化亮度值適合您的需要,然後將新顏色轉換回RGB。你可以找到的代碼here 維基百科提供的HSL and HSV/HSB color spaces一個很好的解釋以及與RGB色彩空間關係

3

從技術上來說,它實際上是好做光/暗在HSL色彩空間。

爲了節省一些麻煩,有一些偉大的JavaScript庫,有各種顏色操作,如TinyColor

你真的不界定什麼是「光」和「黑暗」的顏色verisons的,但這裏有一個簡單的例子我扔在一起使用TinyColor:http://jsfiddle.net/cm00kb04/1/

實際上,這是這樣做的:

function findTextColor(backgroundColor) { 
    var c = tinycolor(backgroundColor); 
    return c.isDark() ? c.lighten(50) : c.darken(50); 
} 

您可以進行各種級別的照明/變暗,以及在其他操作中找到mostReadable()顏色。

將導致最好的結果是什麼要取決於具體情況:例如,如果這是處理任何可能的顏色,如果有一個主題,它必須與工作等

+0

爲了tinycolor.js我只需要使用tinycolor.js文件嗎?因爲Github上有這麼多文件 – user3754676 2015-02-24 03:37:54

+1

@ user3754676是的,它是一個獨立的庫。該項目中的其他文件用於演示,單元測試以及構建/打包庫本身(例如:for [npm](https://www.npmjs.com/package/tinycolor2))。聽起來你對web開發人員相當陌生,所以只需將bower和npm標記爲在路上看的東西即可。 – gregmac 2015-02-24 03:51:37