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