import sys # oops, actually we could use import colorsys def hex2int(s): return int(str(s),base=16) def int2RGB(x): r=(x>>16)&255 g=(x>>8)&255 b=x&255 return r/255, g/255, b/255 def _RGB2HC(r,g,b): M=max(r,g,b) m=min(r,g,b) C=M-m if C==0: H_=0 elif M==r: H_=(g-b)/C % 6 elif M==g: H_=(b-r)/C + 2 elif M==b: H_=(r-g)/C + 4 H=60*H_ return H,C def RGB2HSV(r,g,b): H,C=_RGB2HC(r,g,b) V=max(r,g,b) S=C/V if V!=0 else 0 return H,S,V def RGB2HSL(r,g,b): H,C=_RGB2HC(r,g,b) L=(max(r,g,b)+min(r,g,b))/2 S=C/(1-abs(2*L-1)) if L!=1 else 0 return H,S,L def RGB2HSI(r,g,b): H,C=_RGB2HC(r,g,b) I=(r+g+b)/3 S=1-min(r,g,b)/I return H,S,I if not len(sys.argv)>1: sys.exit("no data file provided") f=open(sys.argv[1]) data=[line.split() for line in f] f.close() print("img\tstate\thex\tR\tG\tB\tH\tSl\tL\tSv\tV\tSi\tI") for rec in data: color=hex2int(rec[2]) R,G,B=int2RGB(color) H,Sl,L=RGB2HSL(R,G,B) H,Sv,V=RGB2HSV(R,G,B) H,Si,I=RGB2HSI(R,G,B) args=[R,G,B,H,Sl,L,Sv,V,Si,I] args=map(lambda x: round(x,3), args) print(rec[0],rec[1],rec[2],*args,sep="\t")