62 lines
1.2 KiB
Python
62 lines
1.2 KiB
Python
'''functions to alter colors in hex format'''
|
|
import re
|
|
|
|
from colour import Color
|
|
|
|
from . import logging
|
|
|
|
|
|
check = lambda color: Color(f'#{str(color)}' if re.search(r'^(?:[0-9a-fA-F]{3}){1,2}$', color) else color)
|
|
|
|
def _multi(multiplier):
|
|
if multiplier > 100:
|
|
return 1
|
|
|
|
elif multiplier > 1:
|
|
return multiplier/100
|
|
|
|
elif multiplier < 0:
|
|
return 0
|
|
|
|
return multiplier
|
|
|
|
def lighten(color, multiplier):
|
|
col = check(color)
|
|
col.luminance += ((1 - col.luminance) * _multi(multiplier))
|
|
|
|
return col.hex_l
|
|
|
|
def darken(color, multiplier):
|
|
col = check(color)
|
|
col.luminance -= (col.luminance * _multi(multiplier))
|
|
|
|
return col.hex_l
|
|
|
|
|
|
def saturate(color, multiplier):
|
|
col = check(color)
|
|
col.saturation += ((1 - col.saturation) * _multi(multiplier))
|
|
|
|
return col.hex_l
|
|
|
|
|
|
def desaturate(color, multiplier):
|
|
col = check(color)
|
|
col.saturation -= (col.saturation * _multi(multiplier))
|
|
|
|
return col.hex_l
|
|
|
|
|
|
def rgba(color, transparency):
|
|
col = check(color)
|
|
|
|
red = col.red*255
|
|
green = col.green*255
|
|
blue = col.blue*255
|
|
trans = _multi(transparency)
|
|
|
|
return f'rgba({red:0.2f}, {green:0.2f}, {blue:0.2f}, {trans:0.2f})'
|
|
|
|
|
|
__all__ = ['lighten', 'darken', 'saturate', 'desaturate', 'rgba']
|