- 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 6970 -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 7980 -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) * c84 -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