-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgradient.py
More file actions
executable file
·36 lines (30 loc) · 1.14 KB
/
gradient.py
File metadata and controls
executable file
·36 lines (30 loc) · 1.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/env python3
import math
def html_hex(color):
hex_value = str(hex(int(color)))[2:]
if len(hex_value) == 1:
return '0' + hex_value
return hex_value
def decode_color(color):
return {
'r': int(color[1:3], 16),
'g': int(color[3:5], 16),
'b': int(color[5:7], 16)
}
def get_color_gradient(percentage, color_map):
for i in range(1, len(color_map)):
if percentage < color_map[i]['threshold']:
break
lower, upper = color_map[i-1], color_map[i]
diff = float(upper['threshold'] - lower['threshold'])
diff_percentage = (percentage - lower['threshold']) / diff
lower_percentage = 1 - diff_percentage
upper_percentage = diff_percentage
lower_color = decode_color(lower['color'])
upper_color = decode_color(upper['color'])
color = {
'r': math.floor( lower_color['r'] * lower_percentage + upper_color['r'] * upper_percentage ),
'g': math.floor( lower_color['g'] * lower_percentage + upper_color['g'] * upper_percentage ),
'b': math.floor( lower_color['b'] * lower_percentage + upper_color['b'] * upper_percentage )
}
return '#' + html_hex(color['r']) + html_hex(color['g']) + html_hex(color['b'])