知识文章 · 编写日期 2026-11-04

七色堂HSL与HSV的饱和度能照抄吗

不能直接照抄。HSL和HSV都用S表示饱和度,但计算方式不同。同一组RGB通道值可以得到HSL的60%和HSV的75%;数字不相等,不表示颜色变了。转移配色时应先确认模型与分量顺序,再转换完整坐标。

本页讨论归一化RGB数值的数学转换,采用Python官方colorsys所说明的HLS与HSV模型。HLS只是把HSL的分量按H、L、S排列;这里不把L或V当作人的视觉亮度,也不凭模型转换保证跨设备同色。

七色堂同一RGB色样的两套坐标:HSL为30度60%50%,HSV为30度75%80%,分母不同而色样相同
原创数值示意:同一RGB(0.8,0.5,0.2),HSL与HSV使用不同S坐标。 色块由同一RGB定义绘制,非调色前后或设备实测;公式仅在标明的区间使用。

先看模型名称,再看滑块上的S

在同一个模型里,改变S通常会改变RGB结果;但在不同模型之间,不能先把两项同名的S当成同一把尺。HSL的L取RGB最大值与最小值的平均,HSV的V取最大值。两种模型对鲜灰程度的坐标安排不同。

这和RGB色彩空间的选择还不是同一问题。本文固定输入数值及转换定义,只比较两套坐标;不做显示器校准、印刷转换或主观美感测试。软件若只写HSB等名称,应读它自己的定义,不能只凭缩写猜实现。

原创算例:一个RGB,两个不同的S

设输入RGB为(0.8, 0.5, 0.2),每个通道范围为0到1。最大值M=0.8,最小值m=0.2,差值D=0.6。这里红通道最大,换算色相为30°;两种模型在这个例子里的H相同。

HSV取V=M=0.8,S=D/M=0.6/0.8=0.75,因此写成H=30°、S=75%、V=80%。HSL取L=(M+m)/2=0.5;在L不大于0.5的这部分,S=D/(M+m)=0.6/1.0=0.6,因此写成H=30°、S=60%、L=50%。

图中两块色样使用完全相同的RGB绘制,旁边分别列两套正确坐标。它们不是一张调色前后图,也不是对真实设备的测量。此例的目的,是显示同色并不要求跨模型的S数字相等。

分母不能一直套用这个例子

上面的HSL简式有适用区间。当L大于0.5时,官方colorsys实现使用D/(2−M−m)。例如RGB=(0.9, 0.8, 0.7),D=0.2、L=0.8;HSL的S为0.2/0.4=0.5,HSV的S则为0.2/0.9,约22.22%。不能因为前一例HSL的S较小,就推导所有颜色都如此。

当三个通道相等时,D为0,属于无彩色情况。该实现直接将饱和度设为0,避免把黑色等边界送入零分母。程序给出的此时H=0是实现约定,不能解读为灰色真的具有红色色相。

记录顺序,避免算对后填错栏

Python的rgb_to_hls返回(H, L, S),不是(H, S, L)。本例程序返回约(0.08333, 0.5, 0.6),色相用一圈为1;写给读者的HSL则是(30°, 60%, 50%)。需要同时调换L与S的位置,并将色相与其他分量按各自单位显示。

rgb_to_hsv返回(H, S, V),本例约为(0.08333, 0.75, 0.8)。如果把上一行返回数组原样粘进HSV输入框,连分量含义都变了。较稳妥的配色交接记录应同时保存原始RGB、模型名、通道顺序、单位与转换方法,而不是仅留三串没有标签的数字。

什么时候用这项检查

适合把色卡从一种取色器转到另一种取色器、复核教程参数或编写配色笔记。先通过RGB转换,随后检查转换回来的RGB是否在预期舍入误差内一致,可以发现模型、顺序和百分比输入错误。

如果RGB往返一致而两个显示设备看起来不同,问题已超出本页坐标算例。不要继续盲调S来补偿所有差异;应另查色彩空间、配置与观看条件。数学往返核对能确认数值链路,不证明视觉体验完全一致。

动手核对

  1. 给原始RGB注明范围,并保留一份未转换数值。
  2. 核对目标是HSL、HLS还是HSV,写明每个返回值的位置。
  3. 使用完整模型转换,遇到灰色和高L值时按正确分支处理。
  4. 将结果转回RGB核对舍入误差,再记录显示单位与适用范围。

常见问题

HSL的60%和HSV的75%哪个才正确?

在本文给定RGB算例中,两者都正确,因为属于不同模型;不能脱离模型比较S的大小。

HLS和HSL是两种不同颜色吗?

本文所用HLS与HSL指同组色相、明度、饱和度分量,区别在标注或返回顺序;Python返回H、L、S。

HSL的S总比HSV的小吗?

不是。高L算例中HSL的S为50%,HSV约22.22%;关系取决于RGB值和各自分母。

数值转换正确就能保证屏幕和印刷同色吗?

不能。本文只核对模型坐标,设备、色彩空间和介质问题需要独立处理。

依据与延伸阅读

  • Python文档:colorsys — Conversion functions(Python Software Foundation,核验日期 2026-11-04)

    官方文档说明RGB、HLS、HSV转换及浮点范围,rgb_to_hls返回H、L、S,rgb_to_hsv返回H、S、V。

  • CPython官方实现:Lib/colorsys.py(Python Software Foundation,核验日期 2026-11-04)

    实际读取官方源文件中rgb_to_hls和rgb_to_hsv的最大最小值、分支分母及灰色处理;算例由本站按该定义独立计算。

继续阅读