[+] Map ColorProfile to length
This commit is contained in:
parent
a2c8e99f39
commit
dfe67ecc78
1 changed files with 42 additions and 0 deletions
|
@ -16,3 +16,45 @@ class ColorProfile:
|
|||
:return: List of RGBs
|
||||
"""
|
||||
return [RGB.from_hex(c) for c in self.colors]
|
||||
|
||||
def with_weights(self, weights: list[int]) -> list[RGB]:
|
||||
"""
|
||||
Map colors based on weights
|
||||
|
||||
:param weights: Weights of each color (weights[i] = how many times color[i] appears)
|
||||
:return:
|
||||
"""
|
||||
colors = self.decode()
|
||||
return [c for i, w in enumerate(weights) for c in [colors[i]] * w]
|
||||
|
||||
def with_length(self, length: int) -> list[RGB]:
|
||||
"""
|
||||
Spread to a specific length of text
|
||||
|
||||
:param length: Length of text
|
||||
:return: List of RGBs of the length
|
||||
"""
|
||||
preset_len = len(self.colors)
|
||||
center_i = preset_len // 2
|
||||
|
||||
# How many copies of each color should be displayed at least?
|
||||
repeats = length // preset_len
|
||||
weights = [repeats] * preset_len
|
||||
|
||||
# How many extra space left?
|
||||
extras = length % preset_len
|
||||
|
||||
# If there is an even space left, extend the center by one space
|
||||
if extras % 2 == 1:
|
||||
extras -= 1
|
||||
weights[center_i] += 1
|
||||
|
||||
# Add weight to border until there's no space left (extras must be even at this point)
|
||||
border_i = 0
|
||||
while extras > 0:
|
||||
extras -= 2
|
||||
weights[border_i] += 1
|
||||
weights[-border_i] += 1
|
||||
border_i += 1
|
||||
|
||||
return self.with_weights(weights)
|
||||
|
|
Loading…
Reference in a new issue