你一定遇到过——二维码贴了个 Logo、破了一角、甚至被水印覆盖,居然还能扫出来。背后是 Reed-Solomon 纠错码,同一块数据会以冗余形式重复存储。容错等级决定了能破坏多少。
4 个容错等级
| 等级 | 可恢复损坏面积 | 数据容量 | 典型用途 |
|---|---|---|---|
| L(低) | 约 7% | 最大 | 纯链接、干净环境 |
| M(中) | 约 15% | 较大 | 默认推荐 |
| Q(四分位) | 约 25% | 较小 | 工业标签、户外 |
| H(高) | 约 30% | 最小 | 叠加 Logo 必选 |
所谓”面积”是整个码的模块数(小方块),不是像素。25% 大约相当于四分之一被覆盖或污损。
贴 Logo 的数学
常见做法是在码中央挖一块放 Logo。Logo 覆盖的面积不能超过容错等级能恢复的比例:
- L 级:Logo 占码面积 ≤ 7%,几乎看不出 Logo
- H 级:Logo 占码面积 ≤ 30%,能放显眼的品牌标
所以你看到的带 Logo 的二维码,几乎全是 H 级。提升容错会让码更密(同样的信息量需要更大的方块数),所以印刷面积也要更大。
容错 ≠ 免死金牌
三种情况容错也救不回来:
- 破坏了”定位码”(三个角的回字形方块)——扫码器连码在哪都找不到
- 连续大面积破坏——Reed-Solomon 擅长恢复分散错误,连续区域超过一定尺寸就失败
- 反色/低对比度——多数扫码器要求浅底深码,反过来的可能识别不了
贴 Logo 时要放中央,别碰三个定位角;遮挡时要分散而不是一整块。
版本和容量
二维码有 1-40 个版本,版本号越大方块越密、能存数据越多。常见场景:
- URL 链接(30-80 字符):版本 3-5,M 级
- 名片 vCard(200-400 字符):版本 7-10,M 级
- 长文本(1000+ 字符):版本 15+,考虑改用 URL 指向网页而不是硬塞
一个误区:数据越长,码越复杂,反而越容易出错。链接长度能压短尽量压短(用短链服务或自己 301 跳转),用户扫码体验会明显好。
颜色、边框、静区
- 静区:码周围必须留至少 4 个模块的空白,否则部分扫码器识别失败
- 颜色:深色方块的对比度要足够,前景色不是全黑也行,但不能和背景色亮度太接近
- 圆角/渐变:扫码器比你想的宽容,视觉设计空间很大
生成 + 配色
自定义容错等级、前景/背景色、边距,叠加 Logo 实时预览,生成的 PNG 可以直接打印或嵌入网页。