Jump to content

User:Kim Bruning/colorspace.py

From Wikipedia, the free encyclopedia
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

> 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) :
        value=int(triplet, 16)
        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)