def rgb_to_hex(r, g, b, a=None, bg=255, prefix="#"): """ Convert given RGB color decimals or floats to Hex string. Parameters --- r, g, b: float | int Corresponding channel value. Support decimal or float. a: float | None, Default: None Alpha value for generate simulated transparent color. If specified, the returned hex color should looks like rendered as `a` alpha value, on the given background `bg`. Default to None, which means disable simuating transparent. bg: int, Default: 255 If `a` is specified, `bg` will be used as the background for render transparent color. Default to 255, which means 'white' background. Examples --- >>> rgb_to_hex(255, 0, 255) '#FF00FF' >>> rgb_to_hex(255, 255, 0, a=0.0625, bg=0) '#0F0F00' """ def to_decimal(v, base=255) -> int: if isinstance(v, float) and v <= 1: v *= base return int(v) def patch_alpha(v, alpha, bg=255): return int(v * alpha + bg * (1 - alpha)) r = to_decimal(r) g = to_decimal(g) b = to_decimal(b) if a is not None: r = patch_alpha(r, a, bg) g = patch_alpha(g, a, bg) b = patch_alpha(b, a, bg) if prefix is None: prefix = "" return f"{prefix}{r:02X}{g:02X}{b:02X}"