色盲模拟工具

输入一个颜色值,用 Machado 2009 的三组矩阵按严重度两段插值,实时算出它在红色系、绿色系、蓝色系三类色觉障碍下大约是什么颜色,并同时给出原色与模拟色的 HEX、RGB 以及对白、对黑两种背景的 WCAG 对比度。数据全部在浏览器本地计算,不上传。

100%
原色 #E53935 → 红色系 100% 模拟色 #544C34(对白 8.54:1 / 对黑 2.46:1)

本页的核心结论:色觉障碍改的是色相分辨,不是把画面调暗——参考色 #E53935 对白原本 4.23,protan 100% 后变成 #544C34 对白升到 8.54;而最常用的红绿涨跌色 #E53935 与 #43A047 对比度只有 1.28,deutan 后仍只有 1.42,始终分不开。所以纯色编码必须补一条明度差 ≥ 4.5:1 的第二通道。

使用方法

  1. 第一个框是取色器,默认危险红 #E53935;右侧 HEX 输入框与它双向联动,改哪一边都会立刻重算。HEX 接受 #RGB 与 #RRGGBB 两种写法,大小写与是否带井号都可识别。
  2. 「类型」下拉框在 protan(红色系,缺 L 锥)、deutan(绿色系,缺 M 锥)、tritan(蓝色系,缺 S 锥)之间切换,默认 protan。
  3. 「严重度」滑杆从 0 到 100、步长 5,默认 100。0 表示正常色觉、输出与原色相同,100 表示该类型的完全色盲,中间的 50 就是不完全色盲(色弱)的插值中点。
  4. 四个预设色块分别填入界面里最常见的危险红、成功绿、警告橙与链接蓝,点一下就把颜色换成它,省得手打 HEX。
  5. 结果区并排给出原色块与模拟色块,各自标出 HEX、RGB,以及对白、对黑两种背景下的 WCAG 对比度,第三张卡片给出前后变化。
  6. 底部对照表列出 12 行常用界面色在三种类型 100% 下的模拟结果,默认展开 6 行;「加载更多」展开其余,「复制对照表」取 TSV,「导出 CSV」下载带 BOM 的文件。HEX 输入框按 Enter 立即重算。

这个色盲模拟工具能解决什么问题

做界面配色时,最常被忽略的一类用户是色觉障碍人群:他们看到的红色可能接近褐色,绿色可能接近黄褐,红绿两色会被压成同一个色相。本页让你输入一个颜色值,立刻看到它在红色系、绿色系、蓝色系三类色觉下分别变成什么颜色,并连同模拟前后的对比度一起给出,方便判断这套配色对色觉障碍用户是否还成立。

典型用法有三种:设计图表时检查「红涨绿跌」的涨跌色在色盲眼里是否还分得开;做无障碍整改时核对文字与背景的对比度是否达标;挑品牌色时先把候选色跑一遍,看它模拟后在明度上是否与相邻色拉开了差距。与本页配套的还有 互补色查询 与 颜色名字查询 这类按色值做查询的工具,但把色值换算成某一类色觉看到的颜色只有本页做。

需要先说清边界:本页模拟的是三类先天性色觉障碍大约会看到的颜色,属于演示与自查用途,不能替代临床色觉检查,也不代表每位色觉障碍者的感受。

计算原理与变量说明

核心算法是 Machado、Oliveira 与 Fernandes 在 2009 年提出的三组 3×3 矩阵,每组给出「完全缺失」与「严重度 0.5」两档,其余严重度由这两档与单位矩阵线性插值得到。参考色 #E53935 即 rgb(229, 57, 53),正常对白对比度 4.23、对黑对比度 4.97。六个矩阵按行写在下面。

插值分两段:严重度 s 取 0 到 1。s 不大于 0.5 时在「单位矩阵与 0.5 档」之间插值,s 大于 0.5 时在「0.5 档与 1.0 档」之间插值。把 s = 0.5 代入,结果正好等于 0.5 档矩阵本身,所以 50% 与 100% 是两个独立的参考点,并不是把 100% 的结果打个对折。

插值后的矩阵作用在 rgb 三个通道上,每通道结果先截到 0 到 255 再四舍五入,得到模拟色的 HEX 与 RGB。出现 0 或 255 这样的上下限,来自矩阵里大于 1 的系数:tritan 1.0 的第一行 1.255528 会把红色的 R 通道推到 273.7,被截到 255,这就是红色在蓝色系色觉下看起来更红的来源。

一、矩阵到底乘在什么值上。 彩色图像的每个通道都是伽马编码值,不少资料因此主张先做 sRGB 线性化、乘完矩阵再编码回去。本页没有走这条路:Machado 参考值与上面六个矩阵的口径一致,都是把系数直接乘在 0 到 255 的编码值上,也只有这样才能复现出 #E53935 在 protan 100% 下等于 #544C34 这个基准;若改成线性化后再乘,同一组输入会得到明显偏亮的颜色。反过来,算对比度时又必须先线性化,两种口径不同,套错了就会得到偏亮或偏暗的错误数。

二、三种类型差在哪一锥细胞缺失。 人眼有三种视锥:L 锥敏感于长波偏红,M 锥敏感于中波偏绿,S 锥敏感于短波偏蓝。protan 缺 L 锥,deutan 缺 M 锥,tritan 缺 S 锥。L 锥与 M 锥的响应曲线高度重叠,缺了任何一个,红与绿就只剩一根曲线的信息,被压成近似的黄褐色,这正是红绿色盲的成因,也是 #E53935 在 protan 下变成 #544C34、在 deutan 下变成 #796933 的原因。S 锥与另外两种重叠很少,所以 tritan 是一条独立的蓝色系,红色 #E53935 在 tritan 100% 下仍是 #FF2B39。

三、红绿编码失效时靠什么补。 色觉障碍改的是色相分辨,不是亮度本身。最常用的涨跌色 #E53935 与 #43A047,正常对比度只有 1.28,deutan 后是 1.42,都远低于文字对比度的 4.5:1 门槛,这一对颜色从来就没靠亮度分开过。而单个颜色对背景的对比度却可能大幅变化:#E53935 对白原本 4.23,protan 100% 后升到 8.54,因为它变暗了。结论是,用颜色做编码时必须再补一条明度差 ≥ 4.5:1 的第二通道,例如涨用向上的箭头、跌用向下的箭头,或用加减符号、纹理、文字标注,让信息不依赖色相也能读出来。

四、严重度 0.5 到底代表谁。 完全缺失某一锥细胞在人群里并不常见:红绿色觉障碍合计约男性 8%、女性 0.5%,其中绿色盲与红色盲各约男性 1%。真正的大头是「弱」而不是「盲」:绿色弱约占男性 5%,红色弱约 1%,蓝色系在男女中都只有约 0.01%。所以严重度 50% 不是「一半人看得见」,而是不完全色盲的插值中点,覆盖面比 100% 大得多,只看 100% 会漏掉绝大多数色觉障碍用户。

完整示例(数值仅作演示)

示例条件:颜色取 #E53935 即 rgb(229, 57, 53),类型与严重度依次切换,结果由本页算法实时算出。

上面每个数字都由页面算法算出,填入同样的色值与类型即可复现。

常用界面色对照表

下表列出 12 行常用界面色在三种类型 100% 下的模拟结果,颜色名与色值都取界面里最典型的那一个。

用途原色protandeutantritan
危险红#E53935#544C34#796933#FF2B39
成功绿#43A047#A48D43#92824B#3B9A85
警告橙#FB8C00#BA8B00#D5A403#FF6F62
链接蓝#1E88E5#6585EA#4C6FE3#009EA4
高亮黄#FDD835#FFCC2C#FFDB3A#FFBDA7
紫色#8E24AA#193DB1#2C48A5#912F4D
青色#00ACC1#8E9AC3#687DC2#00BDB2
棕色#6D4C41#534F40#5B5541#774849
白色#FFFFFF#FFFFFF#FFFFFF#FFFFFF
黑色#000000#000000#000000#000000
灰色#9E9E9E#9E9E9E#9E9E9E#9E9E9E
靛蓝#3949AB#3251B0#2D49A8#235967

读表要抓三点。一是白 #FFFFFF、黑 #000000、灰 #9E9E9E 三行的模拟列与原色完全相同,灰阶在三种类型下都不变,说明模拟改的是色相分辨而不是亮度。二是红 #E53935 与绿 #43A047 在 protan 一列分别变成 #544C34 与 #A48D43,都落到黄褐一带,被压到了一起。三是蓝 #1E88E5 与青 #00ACC1 在 tritan 一列分别漂成 #009EA4 与 #00BDB2,蓝色系色觉对它们影响最明显。

结果边界、舍入与适用说明

常见问题

为什么一个红色模拟后变成 #544C34 这种黄褐色?

红色 #E53935 是 R 高、G 与 B 低。protan 缺 L 锥,矩阵把 L 的信息折算到 M 与 B 通道,结果 R 由 229 掉到 84、G 由 57 升到 76,三通道被拉近,看起来就是偏暗的黄褐。deutan 缺 M 锥同理,得到 #796933。

严重度 0.5 与 100% 差在哪里?

0.5 是「弱」(不完全色盲)的插值中点,用 0.5 档矩阵本身;100% 是完全缺失的 1.0 档矩阵。两者是独立参考点,不是把 100% 的结果乘 0.5。示例里 protan 50% 得 #884934、100% 得 #544C34,都明显偏离原色。

模拟后颜色变暗,是不是算错了?

不是。红绿类色觉把高饱和的红折算到黄褐后,三通道被拉近且整体偏暗,所以对白对比度反而升高:#E53935 对白从 4.23 升到 8.54。tritan 则不同,红色在 tritan 100% 下仍是 #FF2B39。

为什么白色、黑色和灰色怎么模拟都不变?

三个矩阵每一行的系数和都等于 1,所以纯白 255 与纯黑 0 乘完仍是 255 与 0;灰阶三通道相等,插值后仍相等,于是 #9E9E9E 保持不变。这可以作为检查矩阵是否写对的对照点。

红涨绿跌的配色到底该怎么改?

不要再让信息只靠红绿。示例里 #E53935 与 #43A047 的对比度正常只有 1.28,deutan 后是 1.42,始终低于 4.5:1。稳妥做法是补一条明度差 ≥ 4.5:1 的第二通道,例如涨用向上的箭头、跌用向下的箭头,或改用深浅两档明度再加符号、纹理与文字。

这个模拟和戴色盲矫正眼镜看到的一样吗?

不一样。本页是把颜色按矩阵换算成某一类色觉大约看到的颜色,用来做配色自查;色盲眼镜通过滤光改变入眼光谱分布,两者机制不同。本页结果不能替代临床色觉检查。

这个工具免费吗?

免费,无需注册即可使用。

输入的数据安全吗?

安全。计算在当前浏览器本地完成,不会上传输入内容。

相关工具