资讯动态

kitty 宽色域颜色格式完全指南:在配置中使用 OKLCH 与 CIE LAB 精准指定颜色

发布时间:2026/9/10 7:17:41 来源:尧图企业网站定制
kitty 宽色域颜色格式完全指南在配置中使用 OKLCH 与 CIE LAB 精准指定颜色【免费下载链接】kittyIf you live in the terminal, kitty is made for you! Cross-platform, fast, feature-rich, GPU based.项目地址: https://gitcode.com/GitHub_Trending/ki/kittykitty 终端内置了对现代宽色域Wide Gamut颜色格式的原生支持允许你在配置文件中使用OKLCH与CIE LAB两种感知均匀perceptually uniform色彩空间来精确描述颜色并自动完成面向 sRGB 显示器的 CSS Color Module Level 4 规范色域映射。本文以 docs/wide-gamut-colors.rst 为主线结合 kitty/colors.c 的解析与转换实现以及 kitty_tests/datatypes.py 的测试用例讲解这两种格式的参数语义、写法规范、配置应用场景与底层的色域映射原理帮助你写出可跨显示器一致呈现的终端配色。适用范围任何接受颜色值的地方OKLCH 与 CIE LAB 格式可以用于配置文件中任何接受颜色值的位置包括但不限于foreground/background前景与背景色color0~color25516 色基础调色板与 256 色扩展调色板选中区域、光标、URL、Tab 栏、边框、标记等各类语义颜色在 kitty/options/definition.py 中可以看到这些选项统一通过option_typeto_color定义例如opt(foreground, #dddddd, option_typeto_color, ctypecolor_as_int, long_textThe foreground and background colors.) opt(color0, #000000, option_typeto_color, long_textblack)所有to_color类型的选项最终都会经过 kitty/colors.c 中parse_color()的统一入口解析。从源码结构看解析器按字符串首字母分派到不同的解析函数#开头走十六进制、rgb:走parse_rgb、rgbi:走parse_rgbi、o开头即oklch(...)走parse_oklch、l开头即lab(...)走parse_lab。因此你完全可以把宽色域格式与传统的#rrggbb、rgb:r/g/b写法混用在同一个配置文件中。OKLCH 颜色感知均匀的色彩设计利器OKLCH 是基于 OKLab 色彩空间的极坐标表达被设计为感知均匀——色值上的等量变化在人眼中产生等量感知差异是制作颜色主题color themes的理想选择。其书写格式为foreground oklch(0.9 0.05 140) color1 oklch(0.7 0.25 25)三个参数的语义如下参数含义取值范围LLightness明度0 表示纯黑1 表示纯白0 ~ 1CChroma彩度表示颜色饱和度0 为无彩色灰0 ~ 约 0.4理论上无上界HHue色相色相角0°红120°绿240°蓝0 ~ 360 度OKLCH 的典型优势感知均匀明度或彩度的等量增减人眼感知到的变化幅度一致调节明度不改变色相不像 HSL 那样调整明度会连带改变观感色相OKLCH 可以放心地在保持色相的同时微调明暗现代色彩设计的行业标准广泛用于现代配色工具与 CSS Color 4 规范生态。一个完整的主题示例foreground oklch(0.9 0.05 140) color1 oklch(0.65 0.25 29) # Vibrant red-orange color2 oklch(0.65 0.25 142) # Vibrant green color3 oklch(0.70 0.19 90) # Warm yellow解析细节分隔符、百分比与容错从 kitty/colors.c 的parse_oklch()实现可以看到几个值得注意的解析规则三个参数使用空格或逗号分隔均可strtok(buf, ,)因此oklch(0.5, 0.1, 180)、oklch(0.5,0.1,180)与oklch(0.5 0.1 180)等价L 支持百分比写法如oklch(50% 0.1 180)——parse_double_intensity会将带%的值除以 100 再使用参见 kitty/colors.cL 会被 clamp 到 0~1C 只保证不小于 0、上界不裁剪H 通过取模回绕到 0~360字符串内允许携带行尾注释例如oklch(0.5 0.1 180) # Cyan color注释从#开始截断见 kitty/colors.c。这些行为在 kitty_tests/datatypes.py 的test_oklch系列用例中都有验证例如oklch(0.9 0.05 265)解析为#CEDEFF而oklch(0.5 0.1 180)解析为#007565。CIE LAB 颜色面向设备无关的色彩规范CIE LAB也称 CIELAB 或 Lab是 CIE 制定的设备无关色彩空间其设计目标是近似人眼的视觉特性常被用于印刷、色彩管理等领域。书写格式为background lab(20 5 -10) color4 lab(50 0 -50)三个参数的语义如下参数含义取值范围L明度0 ~ 1000 黑100 白a绿负到红正的通道通常 -100 ~ 100b蓝负到黄正的通道通常 -100 ~ 100示例background lab(10 0 0) # Very dark neutral gray foreground lab(90 0 0) # Very light neutral gray color1 lab(50 60 40) # Red color4 lab(50 0 -50) # Blue从源码看LAB 的处理路径与 OKLCH 不同但殊途同归kitty/colors.c 的parse_lab()先把 LAB 转换到 XYZ 再到线性 sRGB此阶段刻意不做裁剪以保留越界信息见 kitty/colors.c 的lab_to_oklch()再折算成 OKLab/OKLCH 坐标最终同样交给统一的色域映射函数处理。与 OKLCH 类似LAB 的三个参数同样支持空格或逗号分隔、L 支持百分比写法且 L 会被 clamp 到 0~100测试用例kitty_tests/datatypes.py 中lab(50 0 0)→#C7C7C7、lab(70 50 -30)→#EA88E2也印证了这一点。Gamut Mapping越界颜色的自动降级OKLCH 与 CIE LAB 都能描述超出 sRGB 色域的颜色。当你指定的颜色落在 sRGB 显示范围之外时kitty 会按照CSS Color Module Level 4的色域映射算法自动转换其策略是尽量保持原始明度L与色相H不变只降低彩度C即饱和度直到颜色落入可显示范围以**感知色差deltaE OK**为判据将视觉上的变化降到最小在保证落在色域内的前提下最大化保留色彩饱和度。这一过程完全自动无需任何额外配置。例如文档中给出的oklch(0.7 0.4 25)对 sRGB 来说过于饱和kitty 会自动调整它以保留可感知的色相与明度。这样既能在宽色域显示器上充分发挥色彩表现力又能在普通 sRGB 屏幕上优雅降级。算法在源码中的落地色域映射的核心实现在 kitty/colors.c 的oklch_to_srgb_gamut_map()中其流程与文档描述一一对应边界情形纯黑L≤0直接返回 RGB 全 0纯白L≥1返回全 1无需映射无彩色情形C 接近 0小于EPSILON 0.00001时按灰阶处理色相无关先试原色直接转换若结果已落在0~1范围内in_gamut宏判断则原样返回二分搜索最大可显示彩度在[0, c]区间内二分逼近收敛精度MIN_CONVERGENCE 0.0001对越界结果先裁剪clamp再做 OKLab 空间中的欧氏距离计算作为 deltaE OK 的近似distance()见 kitty/colors.c感知阈值裁决若裁剪前后的感知色差小于JND 0.02Just Noticeable Difference人眼刚好可察觉的差异阈值则认为该彩度下视觉损失不可感知接受并继续增大彩度否则减小彩度继续逼近最终裁剪兜底用二分得到的最大彩度重新转换并 clamp确保输出严格落在 sRGB 范围内。测试 kitty_tests/datatypes.py 的test_oklch_gamut_mapping专门覆盖了这一行为oklch(0.5 0.1 180)这类色域内颜色解析结果不变而oklch(0.7 0.35 25)这类高彩度越界颜色会被映射——测试断言其结果红通道仍大于 200、绿通道小于 100验证了保持色相红感的映射意图。实战建议与校验手段主题设计优先用 OKLCH制作明暗主题、调节前景/背景对比度时OKLCH 的感知均匀特性让按明度统一提亮/压暗变得可预期文档中示例oklch(0.9 0.05 140)这类高 L、低 C 的写法非常适合柔和背景或前景。需要与外部设计工具如印刷/色彩管理对接时用 CIE LABLAB 是众多色彩管理流程的中间格式可直接把设计稿中的 Lab 值粘贴进配置。混用无忧#rrggbb、rgb:r/g/b、rgbi:r/g/b、oklch(...)、lab(...)五种写法在同一个配置文件中可以并存解析入口统一在 kitty/colors.c。校验语法格式不合法如缺少参数、参数为非数字时解析会直接失败测试用例如oklch()、lab(50 0)、oklch(a b c)均解析为None见 kitty_tests/datatypes.py配置加载时即会报错便于尽早发现问题。留意显示前提OKLCH/LAB 的完整表现力依赖宽色域显示器在标准 sRGB 屏幕上越界颜色会按上述算法自动降级这是设计预期而非缺陷。参考资料docs/wide-gamut-colors.rst本文档源CSS Color Module Level 4 规范文档引用色域映射算法的规范出处OKLab / OKLCH 色彩空间原始提案文档引用实现与测试kitty/colors.c、kitty/options/definition.py、kitty_tests/datatypes.py【免费下载链接】kittyIf you live in the terminal, kitty is made for you! Cross-platform, fast, feature-rich, GPU based.项目地址: https://gitcode.com/GitHub_Trending/ki/kitty创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价