def test_rgb_to_hsl(self): calculator = Color("#123456") self.assertEqual((210, 65, 20), calculator.hsl()) calculator = Color("#D9832E") self.assertEqual((30, 69, 52), calculator.hsl()) calculator = Color("#107D41") self.assertEqual((147, 77, 28), calculator.hsl())
def color_name(hue): color = Color(hsl=(int(hue), 100, 50)) name = find_closest(color.rgb) try: return name + ' hue' except KeyError: return str(color) + ' hue'
def test_AAA_textcolors(self): bg_color = Color("#00ff00") calculator = TextColorCalculator() approved_colors = calculator.AAA_textcolors(bg_color) for color in approved_colors: self.assertIsInstance(color, Color) self.assertGreaterEqual(calculator.contrast(color, bg_color), 7)
def post_bgcolor(request): """Take a bg color, return a list of acceptable text colors""" bg_color = Color(request.data.get('color')) aa_colors = list(map(str, TextColorCalculator().AA_textcolors(bg_color))) aaa_colors = list(map(str, TextColorCalculator().AAA_textcolors(bg_color))) return Response({ 'background_color': str(bg_color), 'aa_colors': aa_colors, 'aaa_colors': aaa_colors, })
def test_analogous_colors(self): self.assertEqual( [Color(hsl=(105, 100, 50)).rgb, Color(hsl=(135, 100, 50)).rgb], list( map(lambda x: getattr(x, 'rgb'), Color(hsl=(120, 100, 50)).analogous_colors()))) self.assertEqual( [Color(hsl=(350, 100, 50)).rgb, Color(hsl=(20, 100, 50)).rgb], list( map(lambda x: getattr(x, 'rgb'), Color(hsl=(5, 100, 50)).analogous_colors()))) self.assertEqual( [Color(hsl=(165, 100, 50)).rgb, Color(hsl=(195, 100, 50)).rgb], list( map(lambda x: getattr(x, 'rgb'), Color(hsl=(180, 100, 50)).analogous_colors())))
def test_complementary_color(self): self.assertEqual( Color(hsl=(180, 100, 50)).rgb, Color(hsl=(0, 100, 50)).complementary_color().rgb) self.assertEqual( Color(hsl=(20, 100, 50)).rgb, Color(hsl=(200, 100, 50)).complementary_color().rgb) self.assertEqual( Color(hsl=(190, 100, 50)).rgb, Color(hsl=(10, 100, 50)).complementary_color().rgb)
def test_contrast_calculation(self): calculator = TextColorCalculator() self.assertAlmostEqual( 21, calculator.contrast(Color(rgb="#00000"), Color(hsl=(0, 0, 100)))) self.assertAlmostEqual( 5, calculator.contrast(Color(rgb="#cc3922"), Color(hsl=(120, 50, 100)))) self.assertAlmostEqual( 1, calculator.contrast(Color(rgb="#ffffff"), Color(hsl=(0, 0, 100))))
from django import template import webcolors from accessible_text_color.calculator import Color register = template.Library() HEX_LIST = {} for (key, value) in webcolors.css3_hex_to_names.items(): HEX_LIST[value] = Color(key).rgb def find_closest(rgb): distances = [] for (name, color) in HEX_LIST.items(): dist = pow(color[0] - rgb[0], 2) + \ pow(color[1] - rgb[1], 2) + \ pow(color[2] - rgb[2], 2) distances.append([name, dist]) distances.sort(key=lambda x: x[1]) return distances[0][0] @register.filter def color_name(hue): color = Color(hsl=(int(hue), 100, 50)) name = find_closest(color.rgb) try:
def test_luminance(self): self.assertEqual(0, Color('#000000').luminance()) self.assertEqual(1, Color('#ffffff').luminance()) self.assertEqual(0.7152, Color('#00ff00').luminance()) self.assertEqual(0.2126, Color('#ff0000').luminance()) self.assertEqual(0.0722, Color('#0000ff').luminance())
def test_init_method(self): self.assertEqual((171, 205, 239), Color(rgb="#abcdef").rgb) self.assertEqual((100, 100, 100), Color(rgb=(100, 100, 100)).rgb) self.assertEqual((169, 204, 239), Color(hsl=(210, 68, 80)).rgb) self.assertEqual((16, 126, 66), Color(hsl=(147, 77, 28)).rgb)