xiwal

Generate terminal color schemes
git clone https://git.ce9e.org/xiwal.git

commit
ac6dc55b52b12b945dd031ecbaf4591dcbf5095b
parent
621f9ba577819b4ef6847ce9951d77726277fe01
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2026-02-19 12:27
add lch.mix()

Diffstat

M xiwal/lch.py 23 +++++++++++++++++++----

1 files changed, 19 insertions, 4 deletions


diff --git a/xiwal/lch.py b/xiwal/lch.py

@@ -67,8 +67,8 @@ def lab2rgb(lab):
   67    67     return tuple(map(_rgb2srgb, (r, g, b)))
   68    68 
   69    69 
   70    -1 def rgb2lch(rgb):
   71    -1     l, a, b = rgb2lab(rgb)
   -1    70 def lab2lch(lab):
   -1    71     l, a, b = lab
   72    72     c = (a ** 2 + b ** 2) ** 0.5
   73    73     h = 0
   74    74     if abs(a) > 0.0001 or abs(b) > 0.0001:
@@ -77,11 +77,19 @@ def rgb2lch(rgb):
   77    77     return l, c, h
   78    78 
   79    79 
   80    -1 def _lch2rgb(lch):
   -1    80 def lch2lab(lch):
   81    81     l, c, h = lch
   82    82     a = math.cos(h) * c
   83    83     b = math.sin(h) * c
   84    -1     return lab2rgb((l, a, b))
   -1    84     return l, a, b
   -1    85 
   -1    86 
   -1    87 def rgb2lch(rgb):
   -1    88     return lab2lch(rgb2lab(rgb))
   -1    89 
   -1    90 
   -1    91 def _lch2rgb(lch):
   -1    92     return lab2rgb(lch2lab(lch))
   85    93 
   86    94 
   87    95 def lch2rgb(lch):
@@ -100,6 +108,13 @@ def lch2rgb(lch):
  100   108     return rgb
  101   109 
  102   110 
   -1   111 def mix(lch1, lch2, t):
   -1   112     # mixing hue is hard, so we mix in lab instead
   -1   113     return lab2lch([x + t * (y - x) for x, y in zip(
   -1   114         lch2lab(lch1), lch2lab(lch2), strict=True
   -1   115     )])
   -1   116 
   -1   117 
  103   118 def format_hex(rgb):
  104   119     return '#{:02x}{:02x}{:02x}'.format(*[int(x) for x in rgb])
  105   120