我正在進行聊天,用戶可以在其中選擇自己喜歡的文本顏色。同一個聊天會顯示在網站的幾個地方。在某些地方,背景會變暗,而在其他地方 - 光線會變暗。因此,大多數選擇的顏色可能在某些聊天框中難以辨認。用於選擇類似於淺色的深色的算法
所以我正在尋找一種算法,給定一種顏色適用於某種背景(淺色或深色),可以產生另一種顏色,在相反類型的背景上看起來不錯,並且與第一種類似顏色儘可能(所以用戶得到的印象是他到處都使用相同的顏色)。
我知道這可能無法做到完美,但任何嘗試都是值得歡迎的。
我正在進行聊天,用戶可以在其中選擇自己喜歡的文本顏色。同一個聊天會顯示在網站的幾個地方。在某些地方,背景會變暗,而在其他地方 - 光線會變暗。因此,大多數選擇的顏色可能在某些聊天框中難以辨認。用於選擇類似於淺色的深色的算法
所以我正在尋找一種算法,給定一種顏色適用於某種背景(淺色或深色),可以產生另一種顏色,在相反類型的背景上看起來不錯,並且與第一種類似顏色儘可能(所以用戶得到的印象是他到處都使用相同的顏色)。
我知道這可能無法做到完美,但任何嘗試都是值得歡迎的。
查找到http://en.wikipedia.org/wiki/HSL_and_HSV
只要你保持色調和飽和度不變這似乎相同的顏色,你可以用亮度起到了相反的背景
爲了使較暗的顏色乘法例如,RGB分量減少0.5或0.75。
縮放RGB值,每個值都是相同的因子,具有在不改變色調的情況下使顏色更暗或更亮的效果。
是的,和Ofir建議的一樣,我已經嘗試過了......但是......不知道,對我來說看起來不一樣。 :P儘管如此,任何人都可以想出唯一(合理的)事情,但我想我會堅持這一點。 – 2013-02-24 13:37:22
@ Vilx-在HSV/HSL和RGB中使用更深的顏色,對於更淺的顏色,您不應該使用這種技巧(例如,乘以1.5),因爲如果您爲其中一個組件。一般來說,無論如何都要使用HSV/HSL方法,它可以在您的網站開發中多次幫助您。 – Vesper 2013-02-25 03:14:34
好的,在閱讀了這裏和那裏的一些事情之後。這是我迄今能夠發現的。
首先,我想強調幾點,並確保任何正在閱讀我的答案的人都能夠理解我在這裏談論的內容。
什麼是色彩空間?
一系列顏色可以由顏料的原色創建,然後這些顏色定義一個特定的顏色空間。顏色空間也稱爲顏色模型(或顏色系統),是一種抽象的數學模型,它簡單地將顏色範圍描述爲數字元組,通常爲3或4個值或顏色分量(例如:RGB)。基本上說,色彩空間是座標系和子空間的細化。系統中的每種顏色都由一個點表示。
我們大多數人開發使用下列顏色空間之一(HEX,RGB,RGBA)有的甚至去使用(CMYK,HSV & HSL,等)它可以爲您提供任何顏色,你想通過組合的主要顏色(紅色,綠,藍,α)。
如果我們想知道一種顏色是否接近另一種顏色,我們用我們的眼睛來看它,但是因爲我們希望讓計算機以編程方式爲我們做,所以我們用數學方式來看它。
由於顏色一個是紅在HEX色彩空間#FF0000和顏色乙是綠色在HEX色彩空間以及#00FF00,從我們的理解RGB我們有前兩個數值是紅色顏色的表示,第二個數值是的表示綠色顏色和最後兩個值是藍色顏色的表示,因爲我們知道每個這些值是它的值(0-9)的數字表示,則(A,B,C,D,F )=(10,11,12,13,14)。然後,我們可以繪製3D維度的顏色,並使用像歐幾里得這樣的規則計算它們之間的距離。
EX: A =(R1 = FF,G1 = 00,B1 = 00)
B =(R2 = 00,G2 = FF,B2 = 00)
我們這裏有我們這兩個點,現在我們可以使用歐幾里得法則
距離= sqrt((R2-R1)^ 2 +(G2-G1)^ 2 +(B2-B1)^ 2)
到目前爲止這麼好,對不對?
沒有。
我們使用HEX,RGBA,CMYK或任何其他顏色空間,我們將無法知道任何東西,除了顏色空間中兩種顏色之間的距離有時可能是完全不同的顏色,但距離介於他們是低的,因爲他們沒有考慮我們的眼睛如何看待顏色。
但是,還有其他色空間(科學),考慮到我們的眼睛看到的顏色和我們的心靈如何解釋他們的方式。其中之一是實驗室。
色彩變換
在一個絕對顏色空間中的顏色可以被轉換成另一種絕對顏色空間,然後再返回,在一般情況;但是,某些色彩空間可能具有色域限制,並且轉換位於該色域之外的顏色不會產生正確的結果。也可能存在舍入誤差,特別是如果使用每個組件(8位顏色)僅有256個不同值的流行範圍。
什麼是色域?
在包括計算機圖形和攝影在內的色彩再現中,色域或色域是某種完整的顏色子集。最常見的用法是指可以在給定情況下準確表示的顏色的子集,例如在給定的色彩空間內或通過某個輸出設備。
現在我們已經理解了要實現的基本功能,讓我們開始編碼,以瞭解以下等式。
HEX到RGB
我們有HEX爲十六進制值的色彩表現,我們只是要得到他們的十進制值,它,現在我們有我們的RGB色彩空間的顏色。
A = RGB(255,0,0)紅色
B = RGB(0,255,0)綠色
RGB到XYZ
我們必須遵循以下的數學規律
顏色=當前彩色/ 255
如果顏色> 0.04045
顏色=((顏色+ 0.055)/ 1.055)^ 2.4
別的
顏色=彩色/ 12.92
顏色=顏色* 100
X = colorRed * 0.4124 +顏色綠色* 0.3576 + colorBlue * 0.1805
Y = colorRed * 0.2126 +顏色綠色* 0.7152 + colorBlue * 0.0722
Z = colorRed * 0.0193 +顏色綠色* 0.1192 + colorBlue * 0.9505
那它
EX: - A = RGB(255,0,0)紅色
colorRed = 255/255
顏色綠色= 0/255
colorBlue = 0/255
if (colorRed > 0.04045){
colorRed = ((colorRed + 0.055)/1.055)^2.4
}else{
colorRed = colorRed/12.92
}
if (colorGreen > 0.04045){
colorGreen = ((colorGreen + 0.055)/1.055)^2.4
}else{<br/>
colorGreen = colorGreen/12.92
}
if (colorBlue > 0.04045){
colorBlue = ((colorBlue + 0.055)/1.055)^2.4
}else{
colorBlue = colorBlue/12.92
}
colorRed = colorRed * 100
顏色綠色=顏色綠色* 100
colorBlue = colorBlue * 100
X =(colorRed * 0.4124)+(顏色綠色* 0.3576)+(colorBlue * 0.1805)
Y = (colorRed * 0.2126)+(顏色綠色* 0.7152)+(colorBlue * 0.0722)
Z =(colorRed * 0.0193)+(顏色綠色* 0.1192)+(colorBlue * 0.9505)
甲XYZ(X,Y, Z)
XYZ至實驗室
//參考-X,參考-Y和參考-Z是指特定的發光體和觀察者。
X = X /參考-X
Y = Y /參考-Y
Z = Z /參考-Z
if (X > 0.008856) {
X = X^(1/3)
}else{
X = (7.787 * X) + (16/116)
}
if (Y > 0.008856) {
Y = Y^(1/3)
}else{
Y = (7.787 * Y) + (16/116)
}
if (Z > 0.008856) {
Z = Z^(1/3)
}else{
Z = (7.787 * Z) + (16/116)
}
CIE-L * =(116 * Y) - 16
CIE-A * = 500 *(X - Y)
CIE-b * = 200 *(Y - Z)
Refe分配辦法
// 1-20觀察員(CIE 1931)
// X2,Y2,Z2
CIE2_A = {109.850f,100F,35.585f} //白熾燈
CIE2_C = {98.074f,100F,118.232 F}
CIE2_D50 = {96.422f,100F,82.521f}
CIE2_D55 = {95.682f,100F,92.149f}
CIE2_D65 = {95.047f,100F,108.883f} //日光
CIE2_D75 = {94.972 f,100f,122.638f}
CIE2_F2 = {99.187f,100f,67.395f} //熒光燈
CIE2_F7 = {95.044f,100F,108.755f}
CIE2_F11 = {100.966f,100F,64.370f}
// 10O觀察員(CIE 1964)
// X2,Y2,Z2
CIE10_A = {111.144女,100F,35.200f} //白熾燈
CIE10_C = {97.285f,100F,116.145f}
CIE10_D50 = {96.720f,100F,81.427f}
CIE10_D55 = {95.799f,100F,90.926f}
CIE10_D65 = {94.811f,100f,107.304f} //日光
CIE10_D75 = {94.416f,100f,120.641f}
CIE10_F2 = {103.280f,100F,69.026f} //熒光
CIE10_F7 = {95.792f,100F,107.687f}
CIE10_F11 = {103.866f,100F,65.627f}
距離在Lap色空間中的兩種顏色之間
將顏色視爲3D維度,就像我們之前所做的一樣,現在我們具有相對於人眼的兩種顏色之間的確切距離。
要包括的
研究更多,我們應該使用以便改變顏色還具有相同的顏色,但感覺就像一個又一個的人的眼睛,通過它,我們可以看到一個技術背景以及使用相同顏色在其上繪製的東西。
看看[顏色的代碼面](http://coding.smashingmagazine.com/2012/10/04/the-code-side-of-color/)。 – 2013-02-24 16:49:45
我很想知道你是否能夠找出這個問題。 – hamada147 2018-03-06 13:08:05
@ hamada147 - 抱歉,不,只是下面寫的。 :( – 2018-03-06 13:54:40