2009-12-30 26 views
2

我正在探索一個我有一天的想法。如何確保用戶定義的顏色評論仍然可讀?

如果我允許網站上的註冊用戶爲自己的評論和帖子選擇自己的顏色,該怎麼辦?通過這種方式,他們的存在和個性的表現會更強烈,並且更容易發現(並忽略/禁止)肇事者(#000背景上#900個字符)。 ;)

我怎麼能仍然保證他們的帖子仍然可讀?你能推薦相關算法嗎?

我主要在尋找JavaScript和PHP解決方案,但其他方法也可能有用。

回答

3

非常非常好的公式計算顏色的感知亮度。爲了確保足夠的對比度,請確保對比度值的差異高於某個閾值。

Calculating the Perceived Brightness of a Color

在C#示例(我知道樓主想要一個JavaScript解決方案 - 這我目前還不是很熟悉):

bool ValidateContrast(Color foreColor, Color backColor) 
    { 
     double foreBrightness = CalcBrightness(foreColor), 
       backBrightness = CalcBrightness(backColor); 
     double threshold = 70; // Just a value, test this. 
     bool enoughContrast = Math.Abs(foreBrightness - backBrightness) > threshold; 
     return enoughContrast; 
    } 

    private double CalcBrightness(Color color) 
    { 
     double r = color.R, g = color.G, b = color.B; 
     double brightness = Math.Sqrt(.241 * r * r + .691 * g * g + .068 * b * b); 
     return brightness; 
    } 
+0

對不起,我不太瞭解JavaScript,可以在JS中編寫它。但公式仍然如此。 – 2009-12-30 15:16:28

+0

我很匆忙,不能這樣做,但應該可以通過刪除所有類型的提示將它移植到JS。即使Math.Abs​​和Math.Sqrt也應該是一樣的。如果沒有其他人做,我會在稍後發表一條建議作爲評論。 – 2009-12-30 16:23:02

2

您最近可以爲SO上的JS方法計算互補色I asked。這不會給你最佳的可讀性,一些補充是非常糟糕的閱讀。但它仍然始終可讀,並防止人們將#0000001文字放在#000000背景上。

我很想看看是否有算法提供最佳或接近最佳的對比度。

+0

查覈在我的答案後的公式,並檢查了其背後的推理中提供的鏈接,我認爲這是比線性加權和更好。 – 2009-12-30 14:41:51

2

你可以給用戶有限的一組顏色可供選擇。也許只允許白色或淺色作爲背景,並且只將黑色或深色作爲文字顏色。或者只是不要讓他們選擇背景顏色(如果每個評論都有不同的背景顏色,這可能會使您的網站看起來很骯髒)。

1

只是計算逆顏色的背景和前景:

function contrastingColor (color) { // color specified in #xxxxxx notation 
    var rgb = color.match(/(\d{2})/g); 
    for (var i=0;i<3;i++) { 
     rgb[i] = parseInt(rgb[i],16); 
     var new_color = 255-rgb[i]; 
     // if the color is too similar then shift to white (or black, your choice): 
     if (Math.abs(rgb[i]-new_color) < 20) { 
      new_color = 255; 
     } 
     rgb[i] = new_color.toString(16); 
    } 
    return '#'+rgb.join(); 
} 

// usage: 
contrastingColor('#123456'); 
相關問題