Spaces:
Runtime error
Runtime error
#This file generates Complementary Colours palletes using three different alghoritms: | |
#Adjacent (https://itsphbytes.wordpress.com/2016/09/25/getting-adjacent-colors-python-code/), | |
#Complementary (https://www.101computing.net/complementary-colours-algorithm/) and Gradient. | |
#The Gradient alghoritm is based on the code from https://stackoverflow.com/questions/22607043/python-generate-color-palette-from-image | |
import colorsys | |
def gradient_colors(color1, color2): | |
""" | |
It takes two colors and returns a list of 5 colors that are | |
complementary to the two colors. Basically is a gradient between | |
the two colors. | |
""" | |
if color1.startswith('#'): | |
color1 = color1[1:] | |
if color2.startswith('#'): | |
color2 = color2[1:] | |
# Convert hex colors to RGB | |
color1_rgb = tuple(int(color1[i:i+2], 16) for i in (0, 2, 4)) | |
color2_rgb = tuple(int(color2[i:i+2], 16) for i in (0, 2, 4)) | |
# Calculate the difference between the two colors | |
diff = [c2 - c1 for c1, c2 in zip(color1_rgb, color2_rgb)] | |
# Generate the palette | |
palette = [] | |
for i in range(5): | |
r = color1_rgb[0] + diff[0] * i / 4 | |
g = color1_rgb[1] + diff[1] * i / 4 | |
b = color1_rgb[2] + diff[2] * i / 4 | |
palette.append('#%02x%02x%02x' % (int(r), int(g), int(b))) | |
return palette | |
def complementary_colors(hexcolor): | |
# Check if the input starts with '#'. If it does, remove it. | |
if hexcolor.startswith('#'): | |
hexcolor = hexcolor[1:] | |
# Convert hex to RGB | |
r = int(hexcolor[0:2], 16) | |
g = int(hexcolor[2:4], 16) | |
b = int(hexcolor[4:6], 16) | |
# Calculate complementary colors | |
comp_r = 255 - r | |
comp_g = 255 - g | |
comp_b = 255 - b | |
# Convert RGB back to hex | |
comp_hex = "#{:02X}{:02X}{:02X}".format(comp_r, comp_g, comp_b) | |
return comp_hex | |
# Module to convert rgb to hex | |
def rgb_to_hex(rgb): | |
return '#%02X%02X%02X' % (rgb) | |
# Module to convert hex to rgb | |
def hex_to_rgb(value): | |
value = value.lstrip('#') | |
return tuple(int(value[i:i+2], 16) for i in (0, 2 ,4)) | |
# This module gets the adjacent colors. | |
# They can be obtained by rotating the color by 30 and 360 | |
# degrees. | |
def adjacent_colors(color): | |
# List to hold two colors | |
adjacent_colors = [] | |
# Get the RGB | |
(r, g, b) = hex_to_rgb(color) | |
# Set the degree | |
d = 30/360 | |
# Values has to be between 0 to 1 | |
r = r / 255.0 | |
g = g / 255.0 | |
b = b / 255.0 | |
# Convert to HLS using colorsys | |
h, l, s = colorsys.rgb_to_hls(r, g, b) | |
# Rotate the color | |
h = [(h+d) % 1 for d in (-d, d)] | |
# For both the colors, convert back to RGB and | |
# load to list | |
for hi in h: | |
r, g, b = colorsys.hls_to_rgb(hi, l, s) | |
r = int(r * 255.0) | |
g = int(g * 255.0) | |
b = int(b * 255.0) | |
hex_val = rgb_to_hex((r,g,b)) | |
adjacent_colors.append(hex_val) | |
print(adjacent_colors) | |
return adjacent_colors | |
# # Test complementarty colors: | |
# color = "#771958" | |
# complementary = complementary_colors(color) | |
# print(f"Original color: {color}") | |
# print(f"Complementary color: {complementary}") | |
# # Test adjacent colors: | |
# print(f"Adjacent colors for {color}:") | |
# colors = adjacent_colors(color) | |
# # Test gradient colors: | |
# print(f"Gradient colors between {colors[0]} and {colors[1]}:") | |
# gradient = gradient_colors(colors[0], colors[1]) | |
# for color in gradient: | |
# print(color) |