public static function ContrastRatio($color1, $color2) { include_once AC_INCLUDE_PATH . "classes/ColorValue.class.php"; $color1 = new ColorValue($color1); $color2 = new ColorValue($color2); if (!$color1->isValid() || !$color2->isValid()) { return true; } $colorR1 = $color1->getRed() / 255; $colorG1 = $color1->getGreen() / 255; $colorB1 = $color1->getBlue() / 255; $colorR2 = $color2->getRed() / 255; $colorG2 = $color2->getGreen() / 255; $colorB2 = $color2->getBlue() / 255; if ($colorR1 <= 0.03928) { $colorR1 = $colorR1 / 12.92; } else { $colorR1 = pow(($colorR1 + 0.055) / 1.055, 2.4); } if ($colorG1 <= 0.03928) { $colorG1 = $colorG1 / 12.92; } else { $colorG1 = pow(($colorG1 + 0.055) / 1.055, 2.4); } if ($colorB1 <= 0.03928) { $colorB1 = $colorB1 / 12.92; } else { $colorB1 = pow(($colorB1 + 0.055) / 1.055, 2.4); } if ($colorR2 <= 0.03928) { $colorR2 = $colorR2 / 12.92; } else { $colorR2 = pow(($colorR2 + 0.055) / 1.055, 2.4); } if ($colorG2 <= 0.03928) { $colorG2 = $colorG2 / 12.92; } else { $colorG2 = pow(($colorG2 + 0.055) / 1.055, 2.4); } if ($colorB2 <= 0.03928) { $colorB2 = $colorB2 / 12.92; } else { $colorB2 = pow(($colorB2 + 0.055) / 1.055, 2.4); } $Lum1 = $colorR1 * 0.2126 + $colorG1 * 0.7151999999999999 + $colorB1 * 0.0722; $Lum2 = $colorR2 * 0.2126 + $colorG2 * 0.7151999999999999 + $colorB2 * 0.0722; $ContrastRatio = 0; if ($Lum1 > $Lum2) { $ContrastRatio = ($Lum1 + 0.05) / ($Lum2 + 0.05); } else { $ContrastRatio = ($Lum2 + 0.05) / ($Lum1 + 0.05); } return $ContrastRatio; }
/** * Check if the luminosity contrast ratio between $color1 and $color2 is at least 5:1 * Input: color values to compare: $color1 & $color2. Color value can be one of: rgb(x,x,x), #xxxxxx, colorname * Return: true or false */ public static function hasGoodContrastWaiert($color1, $color2) { include_once AC_INCLUDE_PATH . "classes/ColorValue.class.php"; $color1 = new ColorValue($color1); $color2 = new ColorValue($color2); if (!$color1->isValid() || !$color2->isValid()) { return true; } $colorR1 = $color1->getRed(); $colorG1 = $color1->getGreen(); $colorB1 = $color1->getBlue(); $colorR2 = $color2->getRed(); $colorG2 = $color2->getGreen(); $colorB2 = $color2->getBlue(); $brightness1 = ($colorR1 * 299 + $colorG1 * 587 + $colorB1 * 114) / 1000; $brightness2 = ($colorR2 * 299 + $colorG2 * 587 + $colorB2 * 114) / 1000; $difference = 0; if ($brightness1 > $brightness2) { $difference = $brightness1 - $brightness2; } else { $difference = $brightness2 - $brightness1; } if ($difference < 125) { return false; } // calculate the color difference $difference = 0; // red if ($colorR1 > $colorR2) { $difference = $colorR1 - $colorR2; } else { $difference = $colorR2 - $colorR1; } // green if ($colorG1 > $colorG2) { $difference += $colorG1 - $colorG2; } else { $difference += $colorG2 - $colorG1; } // blue if ($colorB1 > $colorB2) { $difference += $colorB1 - $colorB2; } else { $difference += $colorB2 - $colorB1; } return $difference > 499; }