rgb_to_hex
python snippet.
#1
50
python/rgb_to_hex.py
Normal file
50
python/rgb_to_hex.py
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
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}"
|
Loading…
Reference in New Issue
Block a user