1. 発端
資料を作っている時、「ベースのカラーコードは決まっているものの、同系色も欲しいな・・・」と思いました。さっと調べて、カラーコードからグラデーションを生成してくれるようなサイトが見つからなかったので自分でコードを書きました。
2. コード
def get_color_map(base_color: str, num: int, reverse: bool = False) -> list:
if len(base_color) != 7:
raise ValueError('Color must be #------')
r = int(base_color[1:3], 16)
g = int(base_color[3:5], 16)
b = int(base_color[5:7], 16)
color_map = []
for i in range(num):
if reverse:
r_tmp = int((255 - r) * i / num + r)
g_tmp = int((255 - g) * i / num + g)
b_tmp = int((255 - b) * i / num + b)
else:
r_tmp = int(r * (i + 1) / num)
g_tmp = int(g * (i + 1) / num)
b_tmp = int(b * (i + 1) / num)
color_map.append(f'#{r_tmp:02x}{g_tmp:02x}{b_tmp:02x}')
return color_map
def main():
print(get_color_map('#0a64b9', 4))
if __name__ == '__main__':
main()
3. 解説
ベースのカラーと何色のグラデーションにしたいかを指定すると、リスト形式でカラーコードを返してくれます。