|
@@ -0,0 +1,109 @@
|
|
|
+from colorsys import rgb_to_hsv, hsv_to_rgb
|
|
|
+
|
|
|
+def rgb_to_hex(r, g, b):
|
|
|
+ r = unicode(hex(int(r * 255))[2:]).zfill(2)
|
|
|
+ g = unicode(hex(int(g * 255))[2:]).zfill(2)
|
|
|
+ b = unicode(hex(int(b * 255))[2:]).zfill(2)
|
|
|
+ return r + g+ b
|
|
|
+
|
|
|
+
|
|
|
+def hex_to_rgb(color):
|
|
|
+ if len(color) == 6:
|
|
|
+ r, g, b = color[0:2], color[2:4], color[4:6]
|
|
|
+ elif len(color) == 3:
|
|
|
+ r, g, b = color[0], color[1], color[2]
|
|
|
+ else:
|
|
|
+ raise ValueError('"%s" is not correct HTML Hex Color.')
|
|
|
+
|
|
|
+ r, g, b = float(int(r, 16)), float(int(g, 16)), float(int(b, 16))
|
|
|
+
|
|
|
+ r /= 255.0
|
|
|
+ g /= 255.0
|
|
|
+ b /= 255.0
|
|
|
+ return r, g, b
|
|
|
+
|
|
|
+
|
|
|
+def spin(color, rad):
|
|
|
+ append_hex = False
|
|
|
+ if color[0] == '#':
|
|
|
+ append_hex = True
|
|
|
+ color = color[1:]
|
|
|
+
|
|
|
+ r, g, b = hex_to_rgb(color)
|
|
|
+ h, s, v = rgb_to_hsv(r, g, b)
|
|
|
+ if rad:
|
|
|
+ h += float(rad) / 360
|
|
|
+
|
|
|
+ r, g, b = hsv_to_rgb(h, s, v)
|
|
|
+
|
|
|
+ if append_hex:
|
|
|
+ return '#' + rgb_to_hex(r, g, b)
|
|
|
+ return rgb_to_hex(r, g, b)
|
|
|
+
|
|
|
+
|
|
|
+def desaturate(color, steps, step, minimum=0):
|
|
|
+ append_hex = False
|
|
|
+ if color[0] == '#':
|
|
|
+ append_hex = True
|
|
|
+ color = color[1:]
|
|
|
+
|
|
|
+ r, g, b = hex_to_rgb(color)
|
|
|
+ h, s, v = rgb_to_hsv(r, g, b)
|
|
|
+
|
|
|
+ minimum /= 100.0
|
|
|
+ scope = s - minimum
|
|
|
+ s = minimum + (scope / steps * (steps - step))
|
|
|
+
|
|
|
+ r, g, b = hsv_to_rgb(h, s, v)
|
|
|
+
|
|
|
+ if append_hex:
|
|
|
+ return '#' + rgb_to_hex(r, g, b)
|
|
|
+ return rgb_to_hex(r, g, b)
|
|
|
+
|
|
|
+
|
|
|
+def lighten(color, steps, step, maximum=100):
|
|
|
+ append_hex = False
|
|
|
+ if color[0] == '#':
|
|
|
+ append_hex = True
|
|
|
+ color = color[1:]
|
|
|
+
|
|
|
+ r, g, b = hex_to_rgb(color)
|
|
|
+
|
|
|
+ scope = maximum / 100.0 - min(r, g, b)
|
|
|
+ step = scope / steps * step
|
|
|
+
|
|
|
+ r += step
|
|
|
+ g += step
|
|
|
+ b += step
|
|
|
+
|
|
|
+ r = 1 if r > 1 else r
|
|
|
+ g = 1 if g > 1 else g
|
|
|
+ b = 1 if b > 1 else b
|
|
|
+
|
|
|
+ if append_hex:
|
|
|
+ return '#' + rgb_to_hex(r, g, b)
|
|
|
+ return rgb_to_hex(r, g, b)
|
|
|
+
|
|
|
+
|
|
|
+def darken(color, steps, step, minimum=0):
|
|
|
+ append_hex = False
|
|
|
+ if color[0] == '#':
|
|
|
+ append_hex = True
|
|
|
+ color = color[1:]
|
|
|
+
|
|
|
+ r, g, b = hex_to_rgb(color)
|
|
|
+
|
|
|
+ scope = minimum / 100.0 - max(r, g, b)
|
|
|
+ step = scope / steps * step
|
|
|
+
|
|
|
+ r += step
|
|
|
+ g += step
|
|
|
+ b += step
|
|
|
+
|
|
|
+ r = 0 if r < 0 else r
|
|
|
+ g = 0 if g < 0 else g
|
|
|
+ b = 0 if b < 0 else b
|
|
|
+
|
|
|
+ if append_hex:
|
|
|
+ return '#' + rgb_to_hex(r, g, b)
|
|
|
+ return rgb_to_hex(r, g, b)
|