配色来源 https://xkcd.com/color/rgb/
任意两个颜色之间,RGB的欧氏距离大于120
1: (211, 44, 31), #d32c1f
2: (205, 140, 149), #CD8C95
3: (67, 107, 173), #436bad
4: (205, 173, 0), #CDAD00
5: (4, 244, 137), #04f489
6: (254, 1, 154), #fe019a
7: (6, 71, 12), #06470c
8: (97, 222, 42), #61de2a
9: (203, 248, 95), #cbf85f
10: (255, 187, 255), #FFBBFF
11: (127, 255, 212), #7FFFD4
12: (0, 0, 255), #0000FF
13: (2, 204, 254), #02ccfe
14: (153, 0, 250), #9900fa
15: (93, 20, 81), #5d1451
任意两个颜色之间,RGB的欧氏距离大于80
1: (211, 44, 31), #d32c1f
2: (172, 194, 217), #acc2d9
3: (86, 174, 87), #56ae57
4: (178, 153, 110), #b2996e
5: (168, 255, 4), #a8ff04
6: (137, 69, 133), #894585
7: (212, 255, 255), #d4ffff
8: (252, 252, 129), #fcfc81
9: (56, 128, 4), #388004
10: (239, 180, 53), #efb435
11: (12, 6, 247), #0c06f7
12: (55, 120, 191), #3778bf
13: (5, 255, 166), #05ffa6
14: (31, 99, 87), #1f6357
15: (12, 181, 119), #0cb577
16: (255, 7, 137), #ff0789
17: (255, 99, 233), #ff63e9
18: (67, 5, 65), #430541
19: (255, 178, 208), #ffb2d0
20: (173, 144, 13), #ad900d
21: (104, 50, 227), #6832e3
22: (133, 14, 4), #850e04
23: (64, 253, 20), #40fd14
24: (246, 104, 142), #f6688e
25: (118, 253, 168), #76fda8
26: (1, 70, 0), #014600
27: (65, 253, 254), #41fdfe
28: (12, 23, 147), #0c1793
29: (165, 0, 85), #a50055
30: (173, 3, 222), #ad03de
31: (174, 255, 110), #aeff6e
32: (255, 8, 232), #ff08e8
33: (255, 253, 1), #fffd01
34: (1, 101, 252), #0165fc
35: (249, 115, 6), #f97306
计算rgb欧式距离和可视化的代码
import matplotlib.pyplot as plt
import random
import math
def hex_to_rgb(hex_color):
# 去除 # 号并拆分RGB颜色码
r = int(hex_color[1:3], 16)
g = int(hex_color[3:5], 16)
b = int(hex_color[5:7], 16)
return r, g, b
def color_difference(color1, color2, threshold=100):
# 将十六进制颜色转换为RGB颜色
rgb_color1 = hex_to_rgb(color1)
rgb_color2 = hex_to_rgb(color2)
# 计算欧氏距离
distance = math.sqrt((rgb_color1[0] - rgb_color2[0])**2 + (rgb_color1[1] - rgb_color2[1])**2 + (rgb_color1[2] - rgb_color2[2])**2)
# 判断差异是否足够大
if distance > threshold:
return True
else:
return False
def vis_colors(diff_colors, num_per_row = 5):
num_rows = (len(diff_colors) + (num_per_row-1)) // num_per_row # 计算行数,每行显示num_per_row个颜色
fig, axs = plt.subplots(num_rows, num_per_row, figsize=(8, num_rows * 1.5))
axs = axs.ravel() # 将子图数组展平
for i, color in enumerate(diff_colors):
color_rgb = hex_to_rgb(color)
print(f"{i+1}: {color_rgb}, {color}")
color_plt = [i/255 for i in color_rgb]
axs[i].imshow([[color_plt]])
axs[i].axis('off')
axs[i].set_title(f"\n({color_rgb[0]},{color_rgb[1]},{color_rgb[2]})\n{color}")
# 隐藏多余的子图
for j in range(len(diff_colors), num_rows*num_per_row):
fig.delaxes(axs[j])
plt.tight_layout()
plt.show()
# 读取颜色文件
all_colors = []
with open("./rgb.txt", "r", encoding='utf-8') as f:
lines = f.readlines()
for line in lines:
line = line.strip()
res = line.rsplit("#", 1)
all_colors.append("#" + res[1])
random.shuffle(all_colors)
# 查找差异较大的颜色
diff_colors = ["#d32c1f"]
for color in all_colors:
flag = True
for mycolor in diff_colors:
if not color_difference(color, mycolor, 120):
flag = False
if flag and (color not in diff_colors):
diff_colors.append(color)
print(len(diff_colors))
vis_colors(diff_colors)