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