The algorithm below, calculates and returns colors to make a gradient. The input colors must be in hexadecimal, like 000000 or FF0000 (without #).
The third parameter specifies the size of your gradient. By example, in an image of 100 pixels, the length is 100, and in a phrase of 3 characters the length is 3.
Usage
# it returns 3 colors, one per letter
color_a, color_b, color_c = gradient('000000', 'FF0000', len('abc'))
Code
def gradient(start, end, length):
# transform HEX to R G B
__sr = int(start[0:2].upper(), 16) # 0
__sg = int(start[2:4].upper(), 16) # 0
__sb = int(start[4:6].upper(), 16) # 0
__er = int(end[0:2].upper(), 16) # 255
__eg = int(end[2:4].upper(), 16) # 255
__eb = int(end[4:6].upper(), 16) # 255
# calculate distance to make gradient
stepr = (__er - __sr) / (length - 1) # 63
stepg = (__eg - __sg) / (length - 1) # 63
stepb = (__eb - __sb) / (length - 1) # 63
# a color per step
colors = [0] * length
for i in range(0, length):
if i == 0:
# first color
r = '%02X' % __sr
g = '%02X' % __sg
b = '%02X' % __sb
elif i == length - 1:
# last color
r = '%02X' % __er
g = '%02X' % __eg
b = '%02X' % __eb
else:
# middle color
r = '%02X' % (__sr + int(stepr) * i)
g = '%02X' % (__sg + int(stepg) * i)
b = '%02X' % (__sb + int(stepb) * i)
colors[i] = r + g + b
return colors