Python不使用第三方库如何实现HSL颜色转HSV颜色?
无第三方库实现HSL转HSV的Python方案
核心转换逻辑
HSL和HSV的色相(H)取值完全相同,仅需对饱和度(S)、明度(V/L)做转换,转换前需先将HSL的S、L从百分比数值转换为0~1区间的小数:
- 计算HSV的明度V:
V = L + S_l * min(L, 1 - L) - 计算HSV的饱和度S:若V为0则S=0,否则
S = 2 * (1 - L / V) - 计算完成后将S、V转换回百分比数值,和原有HSL输出格式对齐
完整代码实现
def HEX2HSV(hex): hsl = HEX2HSL(hex) # 该函数返回Hex颜色码转换后的HSL值,格式如{'h': 300, 's': 67.0, 'l': 80.0} # 提取HSL参数,将百分比转成0~1区间小数计算 h = hsl['h'] s_l = hsl['s'] / 100 l = hsl['l'] / 100 # 计算HSV的v值 v = l + s_l * min(l, 1 - l) # 计算HSV的s值,处理v=0的边界情况 if v == 0: s_v = 0 else: s_v = 2 * (1 - l / v) # 转回百分比格式,保留1位小数 return { 'h': h, 's': round(s_v * 100, 1), 'v': round(v * 100, 1) } # 测试样例 convertedhsv = HEX2HSV('#eeaaee') # 输入对应HSL为{'h':300,'s':67.0,'l':80.0},转换后输出为 {'h': 300, 's': 28.7, 'v': 93.4}
注意事项
- 若你的
HEX2HSL函数返回的s、l是0~1区间的小数而非百分比数值,删除代码中s_l = hsl['s'] / 100和l = hsl['l'] / 100的除以100逻辑即可 - 可根据业务需求调整
round的参数修改数值保留的小数位数
内容的提问来源于stack exchange,提问作者Experi Ment
相关产品推荐
相关产品推荐

