User:Kim Bruning/colorspace.py

> example run

  1. !/usr/bin/python
  2. colorspace.py
  3. calculates RGB, CMYK and HSV values from a hex triplet
  1. Diclaimer:
  2. I only just picked up python. No apologies are made for this code.
  3. Dysprosia and Chinasaur helped with formulas for CMYK and HSV respectively

def hextriplet2rgb(triplet) :

value=int(triplet, 16)

r=(value & 0xFF0000) / 0x10000

g=(value & 0x00FF00) / 0x100

b=(value & 0x0000FF)

return (r,g,b)

  1. 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]))

  1. 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\'\'\' (h, s, v) = ",rgb2hsv(rgb)