Today's Question:  What are you most afraid of as a programmer?

# Python: calculate lighter/darker RGB colors

Chase Seibert      2012-02-13 05:29:22      4,940    0

Many times color palettes have lighter and darker variations of the same color. This may be used to convey relative importance, or for something as simple as a gradient. Usually the designer will specify both colors. However, if you have a site that needs to allow user configurable styling, you may not want to ask the user for two variations of the same color.

Here is some Python code to take a single color in RGB, and output an artitrarily lighter or darker variation of the same color. You could wrap this in a filter and use it right in your Django templates.

1. def color_variant(hex_color, brightness_offset=1):
2.     """ takes a color like #87c95f and produces a lighter or darker variant """
3.     if len(hex_color) != 7:
4.         raise Exception("Passed %s into color_variant(), needs to be in #87c95f format." % hex_color)
5.     rgb_hex = [hex_color[x:x+2for x in [135]]
6.     new_rgb_int = [int(hex_value, 16) + brightness_offset for hex_value in rgb_hex]
7.     new_rgb_int = [min([255, max([0, i])]) for i in new_rgb_int] # make sure new values are between 0 and 255
8.     # hex() produces "0x88", we want just "88"
9.     return "#" + "".join([hex(i)[2:] for i in new_rgb_int])