我正在探索一個我有一天的想法。如何確保用戶定義的顏色評論仍然可讀?
如果我允許網站上的註冊用戶爲自己的評論和帖子選擇自己的顏色,該怎麼辦?通過這種方式,他們的存在和個性的表現會更強烈,並且更容易發現(並忽略/禁止)肇事者(#000背景上#900個字符)。 ;)
我怎麼能仍然保證他們的帖子仍然可讀?你能推薦相關算法嗎?
我主要在尋找JavaScript和PHP解決方案,但其他方法也可能有用。
我正在探索一個我有一天的想法。如何確保用戶定義的顏色評論仍然可讀?
如果我允許網站上的註冊用戶爲自己的評論和帖子選擇自己的顏色,該怎麼辦?通過這種方式,他們的存在和個性的表現會更強烈,並且更容易發現(並忽略/禁止)肇事者(#000背景上#900個字符)。 ;)
我怎麼能仍然保證他們的帖子仍然可讀?你能推薦相關算法嗎?
我主要在尋找JavaScript和PHP解決方案,但其他方法也可能有用。
非常非常好的公式計算顏色的感知亮度。爲了確保足夠的對比度,請確保對比度值的差異高於某個閾值。
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;
}
您最近可以爲SO上的JS方法計算互補色I asked。這不會給你最佳的可讀性,一些補充是非常糟糕的閱讀。但它仍然始終可讀,並防止人們將#0000001
文字放在#000000
背景上。
我很想看看是否有算法提供最佳或接近最佳的對比度。
查覈在我的答案後的公式,並檢查了其背後的推理中提供的鏈接,我認爲這是比線性加權和更好。 – 2009-12-30 14:41:51
你可以給用戶有限的一組顏色可供選擇。也許只允許白色或淺色作爲背景,並且只將黑色或深色作爲文字顏色。或者只是不要讓他們選擇背景顏色(如果每個評論都有不同的背景顏色,這可能會使您的網站看起來很骯髒)。
只是計算逆顏色的背景和前景:
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');
對不起,我不太瞭解JavaScript,可以在JS中編寫它。但公式仍然如此。 – 2009-12-30 15:16:28
我很匆忙,不能這樣做,但應該可以通過刪除所有類型的提示將它移植到JS。即使Math.Abs和Math.Sqrt也應該是一樣的。如果沒有其他人做,我會在稍後發表一條建議作爲評論。 – 2009-12-30 16:23:02