如何用Python从HEX或RGB值判断基础颜色名称?
如何用Python判断HEX颜色是否为蓝色及匹配最接近的基础颜色
一、判断HEX颜色是否属于蓝色范畴
先把HEX颜色转成RGB格式,再通过通道值对比判断——你的场景不需要高精度,用蓝色通道值显著高于红、绿通道的简单规则即可。
实现代码
def hex_to_rgb(hex_color): # 去除HEX字符串的#前缀(如果存在) hex_color = hex_color.lstrip('#') # 按两位拆分转换为RGB整数元组 return tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4)) def is_blue(hex_color): r, g, b = hex_to_rgb(hex_color) # 自定义判断规则:蓝色通道是三者最大值,且比红、绿平均值高20(可按需调整阈值) return b > max(r, g) and b > (r + g) / 2 + 20
使用示例
print(is_blue("#0000FF")) # 纯蓝,返回True print(is_blue("#87CEEB")) # 天蓝色,返回True print(is_blue("#FF0000")) # 纯红,返回False print(is_blue("#FFFF00")) # 黄色,返回False
你可以根据实际场景调整判断逻辑,比如放宽阈值或修改通道对比条件。
二、匹配最接近的基础颜色
核心逻辑是:定义一组基础颜色的RGB值,计算输入颜色与每个基础颜色的欧氏距离(颜色空间中距离越小越相似),选取距离最小的基础颜色。
实现代码
def get_closest_base_color(hex_color): # 定义基础颜色集合(可按需添加、修改颜色) base_colors = { "红": (255, 0, 0), "绿": (0, 255, 0), "蓝": (0, 0, 255), "黄": (255, 255, 0), "紫": (128, 0, 128), "橙": (255, 165, 0), "黑": (0, 0, 0), "白": (255, 255, 255) } r, g, b = hex_to_rgb(hex_color) min_distance = float('inf') closest_color = None for color_name, (br, bg, bb) in base_colors.items(): # 计算RGB空间的欧氏距离 distance = ((r - br)**2 + (g - bg)**2 + (b - bb)**2)**0.5 if distance < min_distance: min_distance = distance closest_color = color_name return closest_color
使用示例
print(get_closest_base_color("#0066CC")) # 接近纯蓝,返回"蓝" print(get_closest_base_color("#FFCC00")) # 接近黄色,返回"黄" print(get_closest_base_color("#CC66FF")) # 接近紫色,返回"紫"
如果需要更贴合人眼感知的匹配效果,可以改用CIELAB颜色空间计算距离,但对于通用需求,欧氏距离已经足够。
内容的提问来源于stack exchange,提问作者Steve Melons
相关产品推荐
相关产品推荐

