> example run
#!/usr/bin/python
# colorspace.py
# calculates RGB, CMYK and HSV values from a hex triplet
# Diclaimer:
# I only just picked up python. No apologies are made for this code.
# Dysprosia and Chinasaur helped with formulas for CMYK and HSV respectively
def hextriplet2rgb(triplet) :
# assuming the triplet *isn't* prefixed with 0x
value=eval("0x"+triplet)
r=(value & 0xFF0000) / 0x10000
g=(value & 0x00FF00) / 0x100
b=(value & 0x0000FF)
return (r,g,b)
# from http://en.wikipedia.org/wiki/CMYK
def rgb2cmyk (rgb) :
r,g,b=rgb
c,m,y=(1 - r / 255.0,1 - g / 255.0,1 - b / 255.0)
C,M,Y,K= (c-min(c,m,y),m-min(c,m,y),y-min(c,m,y),min(c,m,y))
# and additionally, *255 to convert proportion up to 8bits
return tuple(map (lambda proportion: int(proportion*255), [C,M,Y,K]))
# from http://en.wikipedia.org/wiki/HSV_color_space
def rgb2hsv (rgb) :
# formula takes fp, bother!
r,g,b = map (lambda x : x/255.0, rgb)
MAX=max(r,g,b)
MIN=min(r,g,b)
# Using a "undefined" instead of None
# because we want encyclopedic style output
h="undefined" #default
s="undefined" #default
v=MAX
if (v > 0) :
s = (MAX - MIN) / MAX
if (s > 0 and s != "undefined" ):
if r == MAX: h=(0.0+( (g-b)/(MAX-MIN) ))*60
if g == MAX: h=(2.0+( (b-r)/(MAX-MIN) ))*60
if b == MAX: h=(4.0+( (r-g)/(MAX-MIN) ))*60
# Format
H=h
if ( h != "undefined" ):
if h < 0: h+=360
H=int(round(h))
S=s
if (s!= "undefined") : S=int(round(s*100))
V=int(round(v*100))
return (H,S,V)
while True:
print "\n\n"
print "== Color Coordinates =="
hextriplet = raw_input(" \'\'\'[[Hex triplet]]\'\'\' = #")
rgb=hextriplet2rgb(hextriplet)
print " \'\'\'[[RGB]]\'\'\' (r, g, b) = ",rgb
print " \'\'\'[[CMYK]]\'\'\' (c, m, y, k) = ",rgb2cmyk(rgb)
print " \'\'\'[[HSV color space|HSV]]\'\'\' (h, s, v) = ",rgb2hsv(rgb)