Spaces:
Sleeping
Sleeping
| import numpy as np | |
| from .contrast_detector import ContrastDetector | |
| class LuminanceContrastDetector(ContrastDetector): | |
| """WCAG luminance contrast detector""" | |
| def calculate_relative_luminance(self, rgb): | |
| """Calculate relative luminance according to WCAG 2.0""" | |
| rgb_normalized = np.array(rgb) / 255.0 | |
| rgb_linear = np.where( | |
| rgb_normalized <= 0.03928, | |
| rgb_normalized / 12.92, | |
| ((rgb_normalized + 0.055) / 1.055) ** 2.4 | |
| ) | |
| return 0.2126 * rgb_linear[0] + 0.7152 * rgb_linear[1] + 0.0722 * rgb_linear[2] | |
| def calculate_contrast(self, color1, color2): | |
| """Calculate WCAG contrast ratio""" | |
| luminance1 = self.calculate_relative_luminance(color1) | |
| luminance2 = self.calculate_relative_luminance(color2) | |
| # Ensure luminance1 is the lighter color | |
| if luminance1 < luminance2: | |
| luminance1, luminance2 = luminance2, luminance1 | |
| return (luminance1 + 0.05) / (luminance2 + 0.05) | |