GitHub - mattrobenolt/colors.py: Colors aren't that scary! (original) (raw)
colors.py
Convert colors between rgb, hsv, and hex, perform arithmetic, blend modes, and generate random colors within boundaries
Installation
$ pip install colors.py
Basic Uses
Importing
from colors import rgb, hsv, hex, random
Create an RGB color object
rgb(100, 100, 100) <RGBColor red: 100, green: 100, blue: 100>
Convert it to hexadecimal
rgb(100, 100, 100).hex <HexColor red: 64, green: 64, blue: 64>
Coerce the hexadecimal to a normal string
str(rgb(100, 100, 100).hex) 646464
Create a Hexadecimal color object
hex('646464') <HexColor red: 64, green: 64, blue: 64>
Extract the red/green/blue value from a hexadecimal
hex('646464').rgb.red 100
Convert a hexadecimal to HSV
hex('646464').hsv <HSVColor hue: 0.0, saturation: 0.0, value: 0.392156862745>
Coerce hsv/rgb values to a list/tuple of values
list(hex('646464').hsv) [0.0, 0.0, 0.39215686274509803]
Create an HSV color object
hsv(0, 1, 1) <HSVColor hue: 0, saturation: 1, value: 1>
Convert it to RGB
hsv(0, 1, 1).rgb <RGBColor red: 255, green: 0.0, blue: 0.0>
Gimme a random color, any color!
random() <HSVColor hue: 0.812436498638, saturation: 0.621033239007, value: 0.379850638405>
Coerce a hexadecimal color to a string with formatting
'#%s' % random().hex '#2f2336'
Coerce RGB/HSV objects to a string for formatting
'style="color: rgb(%s)"' % random().rgb 'style="color: rgb(80.3414147839, 124.403236079, 71.4620739603)"'
Compare color equality
rgb(100, 100, 100) == hex('646464') True hsv(0, 1, 1) == rgb(255, 0, 0) True
Arithmetic
Note: All arithmetic operations return rgb
color.
Multiply
hex('ff9999') * hex('cccccc') <RGBColor red: 204.0, green: 122.4, blue: 122.4> _.hex <HexColor red: cc, green: 7a, blue: 7a> rgb(100, 100, 100).multiply(hsv(0, 1, 1)).hex <HexColor red: 64, green: 00, blue: 00>
Add
hex('ff9999') + rgb(10, 10, 10) <RGBColor red: 255, green: 163, blue: 163> hex('aaffcc').add(rgb(10, 10, 10)) <RGBColor red: 180, green: 255, blue: 214>
Subtract
hex('ff9999') - rgb(10, 10, 10) <RGBColor red: 245, green: 143, blue: 143> hex('aaffcc').subtract(rgb(10, 10, 10)) <RGBColor red: 160, green: 245, blue: 194>
Divide
hex('ff9999') / rgb(10, 10, 10) <RGBColor red: 25.5, green: 15.3, blue: 15.3> hex('aaffcc').divide(rgb(10, 10, 10)) <RGBColor red: 17.0, green: 25.5, blue: 20.4> rgb(100, 100, 100) / hex('00ffff') Traceback (most recent call last): File "", line 1, in File "colors.py", line 73, in divide raise ZeroDivisionError ZeroDivisionError
Blend Modes
Note: All blend modes return rgb
color.
Screen
hex('ff9999').screen(rgb(10, 10, 10)).hex <HexColor red: ff, green: 9d, blue: 9d>
Difference
hex('ff9999').difference(rgb(10, 10, 10)).hex <HexColor red: f5, green: 8f, blue: 8f>
Overlay
hex('ff9999').overlay(rgb(10, 10, 10)).hex <HexColor red: ff, green: 9b, blue: 9b>
Invert
hex('000000').invert() <RGBColor red: 255, green: 255, blue: 255>
Color palettes
colors.py
current ships with three color palettes full of constants. See source for all available colors.
colors.primary
import colors.primary colors.primary.red <RGBColor red: 255, green: 0, blue: 0>
colors.rainbow
import colors.rainbow colors.rainbow.indigo <RGBColor red: 75, green: 0, blue: 130>
colors.w3c
import colors.w3c colors.w3c.ghostwhite <RGBColor red: 248, green: 248, blue: 255>
The Color Wheel!
The color wheel allows you to randomly choose colors while keeping the colors relatively evenly distributed. Think generating random colors without pooling in one hue, e.g., not 50 green, and 1 red.
from colors import ColorWheel wheel = ColorWheel()
Iterate the wheel to get the next value
ColorWheel is an iterable, but be careful if using inside any type of loop. It will iterate forever until you interject.
wheel.next() <HSVColor hue: 0.177410230076, saturation: 1, value: 0.8> wheel.next() <HSVColor hue: 0.278803914372, saturation: 1, value: 0.8> for color in wheel: ... print color.hex 00cca4 002ecc