二维码不是「随便生成」就行
你大概率遇到过这些二维码:
- 印在海报上,扫码死活识别不了
- 屏幕展示,手机摄像头一晃就过
- 颜色很好看,但永远扫不出结果
- 加了 Logo 后,扫码成功率时好时坏
这些问题几乎都源自 4 个关键参数没选对:容错等级、尺寸、颜色对比度、Logo 遮挡比例。本文系统讲解 QR Code 的设计规则,帮你做出既能稳定扫描又美观的二维码。
配套工具:二维码生成器
一、容错等级:7% / 15% / 25% / 30%
QR 码规范定义了 4 个容错等级(Error Correction Level),由 Reed-Solomon 纠错算法实现:
| 等级 | 数据恢复比例 | 适用场景 | 模块密度 |
|---|---|---|---|
| L | 约 7% | 电子屏幕展示、干净环境 | 较低 |
| M | 约 15% | 默认级别、一般打印 | 中等 |
| Q | 约 25% | 有少量污损的场景(外卖单、临时贴纸) | 较高 |
| H | 约 30% | 物流、工业、需嵌入 Logo | 最高 |
选型决策树
是否会被遮挡 / 污损?
├─ 否 → 是否纯电子展示?
│ ├─ 是 → 选 L(密度最低,最易扫描)
│ └─ 否 → 选 M(默认级别,平衡)
└─ 是 → 是否嵌入 Logo?
├─ 是 → 必选 H(Logo 会遮挡模块)
└─ 否 → 选 Q(25% 容错应对一般污损)
容错等级与模块数的关系
容错等级越高,相同数据下生成的二维码模块数越多(密度越大)。例如编码同一字符串 https://toolbox.example.com:
- L 等级 → v1(21 × 21 模块)
- M 等级 → v1(21 × 21 模块)
- Q 等级 → v2(25 × 25 模块)
- H 等级 → v2(25 × 25 模块)
模块数越多,在相同显示尺寸下每个模块的像素越少,扫描难度越大。因此不要无脑选 H,需根据场景权衡。
二、容量上限:4 种编码模式
QR 码有 4 种编码模式,按数据类型自动选择:
| 模式 | 字符集 | v40 L 容量 | 实际场景 |
|---|---|---|---|
| Numeric | 0-9 | 7089 字符 | 电话号码、订单号 |
| Alphanumeric | 0-9 + A-Z + 9 符号 | 4296 字符 | 大写字母 + 数字(URL 的小写会被转大写失效) |
| Byte | 任意字节(UTF-8) | 2953 字节 | 中文、Emoji、混合文本 |
| Kanji | Shift JIS 日文汉字 | 1817 字符 | 日文专有,中文不适用 |
中文为什么比英文少很多
中文按 UTF-8 字节模式编码,每个汉字占 3 字节。v40 L 下字节模式上限 2953 字节,约等于 984 个汉字。英文每个字符 1 字节,可放 2953 个字符。
长文本怎么办
- 用 URL 编解码 工具把长 URL 转为短链服务(如 bit.ly、t.cn)
- 文本类内容用 Base64 编码后再放入二维码(接收方需解码)
- 数据量超过 1000 字符时,建议拆分为多个二维码或使用 Data Matrix
三、尺寸与留白
尺寸(width)
QR 码是模块化结构,最小可扫描尺寸取决于每个模块的物理像素。手机摄像头主流分辨率下,单模块至少需 4 像素才能稳定识别:
| 显示尺寸 | 推荐最小像素 | 模块数参考 |
|---|---|---|
| 手机屏幕 | 240px | v1-v10(21-57 模块) |
| 网页嵌入 | 256px | v1-v15(21-77 模块) |
| A4 打印 | 512px | v1-v20(21-97 模块) |
| 海报印刷 | ≥ 1024px | v1-v40 任意 |
本工具默认 256px,可调 128-512px,覆盖大多数屏幕与小打印场景。
留白(margin)
QR 码规范要求四周留白(quiet zone)至少 4 个模块宽度。留白作用是让扫描器识别 QR 码边界:
- 留白 0-3:扫描器可能识别不到边界,扫描失败率明显升高
- 留白 4(默认):符合规范,主流扫描器兼容
- 留白 5-8:印刷场景建议,避免边缘污损影响识别
四、颜色对比度:扫描成败的关键
QR 码规范要求前景色(深色)比背景色(浅色)暗,且对比度 ≥ 3:1。对比度计算遵循 WCAG 相对亮度公式:
对比度 = (L_亮 + 0.05) / (L_暗 + 0.05)
其中 L 是 sRGB 亮度:L = 0.2126 * R + 0.7152 * G + 0.0722 * B,每个通道需做 gamma 解码。
常见失败案例
| 前景 | 背景 | 对比度 | 结果 |
|---|---|---|---|
| #000000 | #ffffff | 21:1 | 完美 |
| #2b6cff | #ffffff | 4.0:1 | 边缘可行,部分老扫描器失败 |
| #888888 | #ffffff | 3.5:1 | 不推荐 |
| #ff0000 | #ffffff | 4.0:1 | 红色前景,部分扫描器异常 |
| #000000 | #f5f5f5 | 19:1 | 接近白色,可接受 |
| #444444 | #333333 | 1.5:1 | 失败 |
反色(白前景 + 黑背景)
部分现代扫描器支持反色识别,但兼容性差。iOS 原生相机、微信、支付宝对反色支持不一致。不推荐生产环境使用。
渐变色
部分工具支持前景渐变(如蓝→紫),但低对比度区段会导致扫描失败。如需品牌色渐变:
- 选择亮度差 < 20% 的色阶
- 容错等级选 H
- 渐变方向与模块排列方向一致(避免单模块内亮度跳变)
五、Logo 嵌入规则
在二维码中央放 Logo 是高频需求,但会遮挡模块。规则:
1. 必选容错等级 H
H 等级可恢复 30% 数据,对应 Logo 遮挡面积上限约 30%。低于 H 时嵌入 Logo 几乎必然导致扫描失败。
2. Logo 面积控制
- 正方形 Logo:边长 ≤ QR 码总宽度的 22%
- 圆形 Logo:直径 ≤ QR 码总宽度的 25%
- 复杂图形 Logo:建议简化为单色剪影
3. Logo 周围留白
Logo 四周应留 2-3 模块宽度的纯背景色,避免与数据模块混淆。
4. 实现方式
- 推荐:下载 SVG 后用矢量编辑器(Inkscape / Illustrator)合成 Logo,矢量精度高
- 次选:下载 PNG 后用图像编辑器合成
- 不推荐:直接在前端用 CSS
position: absolute叠加 Logo,因为打印时会丢失
六、4 种常见预设格式
1. URL 二维码
最常见类型,扫码即跳转浏览器。注意:
- 必须包含协议(
https://而非example.com),否则部分扫描器无法识别为 URL - 长链接建议先用短链服务压缩
- 含查询参数的 URL 无需转义,QR 编码自动处理
&=等字符
2. WiFi 配置
格式:WIFI:T:WPA;S:网络名;P:密码;H:false;;
字段含义:
T:认证类型(WPA / WEP / nopass)S:SSID(网络名)P:密码H:是否隐藏 SSID(true / false)- 末尾必须以
;;结尾
兼容性:Android 原生相机支持,iOS 需「快捷指令」App 解析。
3. 邮件(mailto)
格式:mailto:邮箱?subject=主题&body=正文
- 中文需 URL 编码(
%E4%BD%A0= 「你」) - 可用 URL 编解码工具 一键编码
4. vCard 名片
格式:
BEGIN:VCARD
VERSION:3.0
FN:张三
TEL;TYPE=CELL:13800138000
EMAIL:zhangsan@example.com
END:VCARD
扫码后可一键导入通讯录。字符较多,建议容错选 H。
七、PNG 与 SVG 选型
| 维度 | PNG | SVG |
|---|---|---|
| 类型 | 位图(像素) | 矢量(路径) |
| 放大 | 模糊 | 不模糊 |
| 文件大小 | 2-10KB | 5-20KB |
| 适用 | 屏幕展示、小打印、微信分享 | 大型印刷、网页嵌入、需编辑 |
| 编辑 | 难 | 可用 Inkscape / Illustrator 编辑 |
建议:
- 海报、易拉宝、户外广告 → SVG
- 名片、外卖单、屏幕展示 → PNG
- 需嵌入 Logo → SVG(合成后导出 PNG)
八、工具矩阵联动
二维码常与其他工具配合使用:
- 生成 URL 二维码前,用 URL 编解码 工具校验 URL 合法性
- 含中文的邮件链接,用 URL 编解码 工具对中文做百分号编码
- 对二维码内容做加密传输,可配合 Base64 编解码
- 二维码生成时间戳,可参考 Unix 时间戳转换
- 二维码内容包含唯一标识,可用 UUID 生成器 生成
- 二维码内容做完整性校验,可用 Hash 计算 生成摘要
- 配色选择,可用 颜色格式转换 工具获取 HEX 值
- 设计可访问的二维码(含对比度评级),可用 颜色对比度检查 工具
九、扫描兼容性自检清单
发布二维码前,按以下清单自检:
- 容错等级是否匹配场景(电子 L / 打印 M / 污损 Q / Logo H)
- 尺寸 ≥ 240px(手机场景)或 ≥ 512px(打印场景)
- 留白 ≥ 4 模块
- 前景色比背景色暗
- 对比度 ≥ 3:1(用 颜色对比度检查 工具验证)
- URL 含
https://协议 - 含中文的 mailto 链接已 URL 编码
- 嵌入 Logo 时容错选 H 且面积 ≤ 30%
- 至少用 2 款手机(iOS + Android)实测扫描
- 至少用 2 款扫码 App(微信 + 系统相机)实测
总结
二维码看似简单,但做到「既好看又能扫」需要平衡 4 个维度:
- 容错等级:根据场景选 L/M/Q/H,不要无脑选 H
- 尺寸与留白:尺寸 ≥ 240px,留白 ≥ 4 模块
- 颜色对比度:前景比背景暗,对比度 ≥ 3:1
- Logo 遮挡:必选 H 等级,面积 ≤ 30%
立即用 二维码生成器 实操演练,配合 URL 编解码、Base64 编解码、颜色对比度检查 等工具,做出专业级二维码。