Misplaced Pages

User:Kim Bruning/colorspace.py: Difference between revisions

Article snapshot taken from Wikipedia with creative commons attribution-sharealike license. Give it a read and then ask your questions in the chat. We can research this topic together.
< User:Kim Bruning Browse history interactively← Previous editContent deleted Content addedVisualWikitext
Revision as of 09:03, 7 April 2004 editKim Bruning (talk | contribs)Autopatrolled, Extended confirmed users, Pending changes reviewers, Rollbackers20,995 edits thanks for fixing the code, modified slightly for encyclopedic answers :)← Previous edit Latest revision as of 15:49, 8 May 2022 edit undoQwerfjkl (bot) (talk | contribs)Bots, Mass message senders4,012,478 editsm top: Replaced deprecated <source> tags with <syntaxhighlight>Tag: AWB 
(8 intermediate revisions by 2 users not shown)
Line 1: Line 1:
]
<pre>

<syntaxhighlight lang=python>
#!/usr/bin/python #!/usr/bin/python
# colorspace.py
# calculates RGB, CMYK and HSV values from a hex triplet



# Diclaimer: # Diclaimer:
# I only just picked up python. No apologies are made for this code. # 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) : def hextriplet2rgb(triplet) :
# assuming the triplet *isn't* prefixed with 0x value=int(triplet, 16)
value=eval("0x"+triplet)
r=(value & 0xFF0000) / 0x10000 r=(value & 0xFF0000) / 0x10000
g=(value & 0x00FF00) / 0x100 g=(value & 0x00FF00) / 0x100
Line 30: Line 35:


# Using a "undefined" instead of None # Using a "undefined" instead of None
# because: human readable input # because we want encyclopedic style output
h="undefined" #default h="undefined" #default
s="undefined" #default s="undefined" #default
Line 36: Line 41:
v=MAX v=MAX
if (v > 0) : if v > 0 :
s = (MAX - MIN) / MAX s = (MAX - MIN) / MAX


if (s > 0 and s != "undefined" ): if s > 0 and s != "undefined" :
if r == MAX: h=(0.0+( (g-b)/(MAX-MIN) ))*60 if r == MAX: h=(0.0+( (g-b)/(MAX-MIN) ))*60
if g == MAX: h=(2.0+( (b-r)/(MAX-MIN) ))*60 if g == MAX: h=(2.0+( (b-r)/(MAX-MIN) ))*60
Line 47: Line 52:
H=h H=h
if ( h != "undefined" ): if h != "undefined" :
if h < 0: h+=360 if h < 0: h+=360
H=int(h) H=int(round(h))
S=s S=s
if (s!= "undefined") : S=int(s*100) if s!= "undefined" : S=int(round(s*100))
V=int(v*100) V=int(round(v*100))
return (H,S,V) return (H,S,V)
Line 67: Line 72:




</syntaxhighlight>
</pre>

Latest revision as of 15:49, 8 May 2022

> 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/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), ))
# from http://en.wikipedia.org/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(" \'\'\']\'\'\' = #")
        rgb=hextriplet2rgb(hextriplet)
        print " \'\'\']\'\'\'    (r, g, b)    = ",rgb
        print " \'\'\']\'\'\'   (c, m, y, k) = ",rgb2cmyk(rgb)
        print " \'\'\']\'\'\'    (h, s, v)    = ",rgb2hsv(rgb)