Snippets

Andrei Zhlobich Mix 2 RGBA colors

Created by Andrei Zhlobich

def parse_color(c):
    assert c.startswith("#")
    return tuple(
        int(c[2 * i + 1 : 2 * i + 3], 16) / 256.
        for i in range(4))


def mix_colors(c1, c2):
    r1, g1, b1, a1 = c1
    r2, g2, b2, a2 =  c2
    ax = a2 * (1 - a1)
    a = a1 + ax
    r = (r1 * a1 + r2 * ax) / a
    g = (g1 * a1 + g2 * ax) / a
    b = (b1 * a1 + b2 * ax) / a
    return r, g, b, a


def print_color(c):
    return "#" + "".join("%02x" % int(x * 256) for x in c)


def pmp(a, b):
    return print_color(
        mix_colors(
            parse_color(a),
            parse_color(b)))

print(pmp('#f1f594cc', '#c6f67180'))
print(pmp('#f1f594cc', '#1d33b380'))

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.