NeuroNest / utils /luminance_contrast.py
lolout1's picture
Initial deployment to Hugging Face
6524e7a
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)