मुझे लगता है कि सबसे अच्छा तरीका है Luminosity Contrast
एल्गोरिथ्म है:
की सलाह दें: अगले कार्यों काम करता है अच्छी तरह से समय की सबसे, लेकिन कभी कभी रंग हैं, जिसमें यह काम नहीं करता अच्छी तरह।
public function getContrastColor($hexColor) {
//////////// hexColor RGB
$R1 = hexdec(substr($hexColor, 0, 2));
$G1 = hexdec(substr($hexColor, 2, 2));
$B1 = hexdec(substr($hexColor, 4, 2));
//////////// Black RGB
$blackColor = "#000000";
$R2BlackColor = hexdec(substr($blackColor, 0, 2));
$G2BlackColor = hexdec(substr($blackColor, 2, 2));
$B2BlackColor = hexdec(substr($blackColor, 4, 2));
//////////// Calc contrast ratio
$L1 = 0.2126 * pow($R1/255, 2.2) +
0.7152 * pow($G1/255, 2.2) +
0.0722 * pow($B1/255, 2.2);
$L2 = 0.2126 * pow($R2BlackColor/255, 2.2) +
0.7152 * pow($G2BlackColor/255, 2.2) +
0.0722 * pow($B2BlackColor/255, 2.2);
$contrastRatio = 0;
if ($L1 > $L2) {
$contrastRatio = (int)(($L1 + 0.05)/($L2 + 0.05));
} else {
$contrastRatio = (int)(($L2 + 0.05)/($L1 + 0.05));
}
//////////// If contrast is more than 5, return black color
if ($contrastRatio > 5) {
return 'black';
} else { //////////// if not, return white color.
return 'white';
}
}
कुछ परिणाम:
नोट:फ़ॉन्ट रंग पिछले समारोह से निर्धारित होता है। ब्रैकेट्स में संख्या विपरीत अनुपात है।
एक और simpliest और कम सटीक तरीका (YIQ में क्योंकि यह आरजीबी रंग अंतरिक्ष धर्मान्तरित) YIQ
कहा जाता है:
public function getContrastColor($hexcolor) {
$r = hexdec(substr($hexcolor, 0, 2));
$g = hexdec(substr($hexcolor, 2, 2));
$b = hexdec(substr($hexcolor, 4, 2));
$yiq = (($r * 299) + ($g * 587) + ($b * 114))/1000;
return ($yiq >= 128) ? 'black' : 'white';
}
+1 luminance गिना जा रहा है या रंग की चमक औसत से कहीं बेहतर है आरजीबी मूल्य। # एफएफ 0000 चमकदार लाल है, अंधेरा रंग नहीं है कि 85 का औसत आपको विश्वास करने के लिए प्रेरित करेगा। एचएसबी सिस्टम (बी के लिए 0-100% स्केल) में, आपको उज्ज्वल लाल के लिए बी = 100 मिलता है। लैब सिस्टम में, आप केवल 54% प्राप्त करते हैं, शायद यह अधिक उपयोगी है, क्योंकि यह 50% बिंदु से ऊपर है, यह दर्शाता है कि आपको इसके खिलाफ काले रंग का उपयोग करना चाहिए, न कि सफेद। –
यह एक अच्छा खोज है! – Wilco