使用方法
- 第一个框是取色器,默认危险红
#E53935;右侧 HEX 输入框与它双向联动,改哪一边都会立刻重算。HEX 接受#RGB与#RRGGBB两种写法,大小写与是否带井号都可识别。 - 「类型」下拉框在 protan(红色系,缺 L 锥)、deutan(绿色系,缺 M 锥)、tritan(蓝色系,缺 S 锥)之间切换,默认 protan。
- 「严重度」滑杆从 0 到 100、步长 5,默认 100。0 表示正常色觉、输出与原色相同,100 表示该类型的完全色盲,中间的 50 就是不完全色盲(色弱)的插值中点。
- 四个预设色块分别填入界面里最常见的危险红、成功绿、警告橙与链接蓝,点一下就把颜色换成它,省得手打 HEX。
- 结果区并排给出原色块与模拟色块,各自标出 HEX、RGB,以及对白、对黑两种背景下的 WCAG 对比度,第三张卡片给出前后变化。
- 底部对照表列出 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。六个矩阵按行写在下面。
- protan 1.0:
[0.152286, 1.052583, -0.204868; 0.114503, 0.786281, 0.099216; -0.003882, -0.048116, 1.051998] - protan 0.5:
[0.458064, 0.679578, -0.137642; 0.092785, 0.846313, 0.060902; -0.007494, -0.016807, 1.024301] - deutan 1.0:
[0.367322, 0.860646, -0.227968; 0.280085, 0.672501, 0.047413; -0.011820, 0.042940, 0.968881] - deutan 0.5:
[0.498864, 0.674741, -0.173604; 0.205199, 0.754872, 0.039929; -0.011131, 0.030969, 0.980162] - tritan 1.0:
[1.255528, -0.076749, -0.178779; -0.078411, 0.930809, 0.147602; 0.004733, 0.691367, 0.303900] - tritan 0.5:
[1.127100, -0.141329, 0.014229; -0.157941, 1.076265, 0.081676; 0.038523, -0.211241, 1.172718]
插值分两段:严重度 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),类型与严重度依次切换,结果由本页算法实时算出。
- 正常色觉:仍是
#E53935,对白 4.23、对黑 4.97。 - protan 100%:矩阵直接作用后得到
#544C34即 rgb(84, 76, 52),对白 8.54、对黑 2.46,红被压成偏暗的黄褐。 - deutan 100%:得到
#796933即 rgb(121, 105, 51),对白 5.41、对黑 3.88,与 protan 类似,但绿色分量保留更多。 - tritan 100%:得到
#FF2B39即 rgb(255, 43, 57),对白 3.71、对黑 5.66,红色几乎不变,因为缺的是 S 锥。 - 严重度降到 50%:protan 得
#884934、deutan 得#8F5C33、tritan 得#FB1E3B。 - 不变性自查:白
#FFFFFF与黑#000000在任何类型、任何严重度下都保持原值——三个矩阵每一行的系数和都等于 1,纯白 255 与纯黑 0 乘完仍是 255 与 0。 - 红绿配对:
#E53935与#43A047正常 1.28,deutan 后仍是 1.42;换成深红深绿#D32F2F与#388E3C是 1.21 到 1.37;亮红亮绿#FF5252与#69F0AE是 2.23 到 2.24,三条都远在门槛以下。
上面每个数字都由页面算法算出,填入同样的色值与类型即可复现。
常用界面色对照表
下表列出 12 行常用界面色在三种类型 100% 下的模拟结果,颜色名与色值都取界面里最典型的那一个。
| 用途 | 原色 | protan | deutan | tritan |
|---|---|---|---|---|
| 危险红 | #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,蓝色系色觉对它们影响最明显。
结果边界、舍入与适用说明
- HEX 输入只接受 3 位或 6 位十六进制;写错时结果区不显示数字,错误提示给出格式要求并附
#E53935、#F00两个例子。 - 严重度 0 时输出与原色逐通道相同,页面提示这是正常色觉,不会额外套用任何矩阵。
- 纯黑、纯白与所有灰阶(R 等于 G 等于 B)在三种类型下都保持不变,页面会注明模拟改的是色相分辨而不是亮度。
- 模拟结果每通道先截到 0 到 255 再四舍五入,手算与页面偶尔差 1 个通道值,多来自中间步骤被提前取整。
- 对比度保留两位小数,按
(L1 + 0.05) / (L2 + 0.05)计算,L 由 sRGB 线性化后的0.2126R + 0.7152G + 0.0722B得到。 - 本页模拟的是先天色觉障碍,不覆盖眼病、外伤或药物引起的后天色觉变化,也不含随年龄增长出现的晶状体黄化。
- 人群比例只是量级参考:红绿色觉障碍合计约男性 8%、女性 0.5%,其中绿色弱约男性 5%、红色弱约 1%、绿色盲与红色盲各约 1%,蓝色系约 0.01%;不同人群与统计口径会有出入。
- 用于无障碍整改时,颜色对比以明度差为判据:正文文字与背景建议 ≥ 4.5:1,大号文字与非文字图形 ≥ 3:1;纯色编码则应补充第二通道。
常见问题
为什么一个红色模拟后变成 #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 的第二通道,例如涨用向上的箭头、跌用向下的箭头,或改用深浅两档明度再加符号、纹理与文字。
这个模拟和戴色盲矫正眼镜看到的一样吗?
不一样。本页是把颜色按矩阵换算成某一类色觉大约看到的颜色,用来做配色自查;色盲眼镜通过滤光改变入眼光谱分布,两者机制不同。本页结果不能替代临床色觉检查。
这个工具免费吗?
免费,无需注册即可使用。
输入的数据安全吗?
安全。计算在当前浏览器本地完成,不会上传输入内容。
相关工具
- 互补色查询:求出某个色的互补色,配色时用来挑对比色。
- 颜色名字查询:把色值换成它最接近的名字,核对它是不是真的「红」。
- HSL 转十六进制转换器:按色相饱和度明度取色,再转成 HEX 送进本页。
- RGB 转 HSL 转换器:看模拟前后的色相与明度到底动了多少。
- 十六进制转 HSL 转换器:把模拟结果从 HEX 拆成 HSL,便于微调明度。
- 颜色工具:查看全部颜色工具。