二维码生成完全指南:原理、批量生成与艺术二维码
二维码已经无处不在,但你真的会做吗
扫码点餐、加微信、连 Wi-Fi、开发票、付钱——二维码早就渗进了日常。可一旦轮到「我要生成一个码」,很多人就随便搜个网站,出来的图要么丑、要么手机凑近了也扫不开,还隐隐担心:这东西会不会把我填的内容传走了?
我们在做工具库的二维码工具这几年,收到最多的问题不是「怎么生成」,而是「为什么我生成的码扫不动」。这篇文章把二维码的门道讲透,让你做出来的码既好看又一定扫得开。
如果你只想快点生成一个普通码,直接去二维码生成器;但想搞懂原理、避免翻车,下面值得读。
二维码到底是啥:一个被低估的工程杰作
二维码(QR Code,Quick Response)是 1994 年日本 Denso Wave(丰田旗下)为了追踪汽车零件发明的。它最牛的地方在于高速识读——相比一维条码,它能在任意方向、部分损毁的情况下被手机摄像头瞬间解析。
那一个个小方块叫「模块(module)」,整张图由黑白模块组成。关键结构有这几块:
| 结构 | 位置 | 作用 |
|---|---|---|
| 定位图案(Finder) | 三个角的大方块 | 摄像头判断码的位置、大小和角度 |
| 校正图案(Alignment) | 右下角附近的小方块 | 校正大尺寸码在曲面/变形下的失真 |
| 定时图案(Timing) | 横竖各一条 | 确定模块坐标网格 |
| 格式信息 | 定位图案旁 | 存纠错等级和掩码 |
| 数据区 | 中间大片 | 真正编码的内容 |
| 静区(Quiet Zone) | 四周留白 | 帮摄像头找到边界 |
几个关键数字:
- 版本 1–40:决定容量。版本 1 是 21×21 模块,每升一版边长加 4 个模块,版本 40 是 177×177。版本越高,能塞的信息越多,码也越密。
- 编码模式:数字模式(0–9)最省空间,其次是字母数字(A–Z、0–9 和少量符号),再是字节(中文、emoji、二进制走这里,最费空间)。
- 纠错码:这是二维码最聪明的地方——用 Reed-Solomon 编码,即使被污损、遮挡一部分,也能把信息还原出来。
冷知识:QR Code 的基础专利早已公开免费,Dense Wave 主动放弃了收费权,这也是它能全球普及的原因之一。
Reed-Solomon 纠错:为什么脏了也能扫
简单理解,Reed-Solomon 会在原始数据后面「附加一段冗余校验块」。假设原始数据是 100 个模块,纠错等级 H 会额外塞进约 30 个模块的冗余。手机扫到码时,即使这 30 个模块里有部分被咖啡渍盖住,算法也能靠剩余的信息把整段内容数学还原回来。
这就是为什么同样是「被遮住一块」,有的码还能扫、有的直接废——关键在纠错等级设得够不够高。
真正决定「扫不扫得开」的四件事
很多人以为码扫不开是手机问题,其实多半是生成时埋的雷。
1. 纠错等级 L / M / Q / H
| 等级 | 可恢复面积 | 模块密度 | 适用 |
|---|---|---|---|
| L | 约 7% | 最稀 | 印刷干净、不会被碰的环境 |
| M | 约 15% | 适中 | 绝大多数场景(默认推荐) |
| Q | 约 25% | 偏密 | 会贴在户外、易脏的地方 |
| H | 约 30% | 最密 | 码上要叠 logo、长期户外 |
经验值:日常用 M 就够了。要往码中间放 logo,至少提到 Q;户外长期暴露或要在码上做艺术处理,用 H。
2. 静区(Quiet Zone)
码四周必须留一圈空白,标准是至少 4 个模块宽。很多人把码贴到海报边缘、塞进窄边框,结果摄像头找不到边界,死活扫不开。留白比你想的更重要——宁可多留,别贴边。
3. 对比度
前景深、背景浅,这是铁律。浅灰底配白字、或者用低对比的品牌色,手机在稍微反光的环境下就抓瞎。最稳的是黑模块 + 白底。
4. 塞进去了多少内容
URL 几十个字符还好,你要是往里塞一整段自我介绍(vCard 全字段),版本直接飙到很高,模块密到小屏手机拉不远就扫不动。内容越短,码越稳。能用短链接就用短链接。
5. 打印尺寸与扫描距离
一个常被忽略的关系:最小打印边长 ≈ 扫描距离 ÷ 10。比如用户要隔着 30cm 扫,码至少得印到 3cm 见方;户外广告要隔 2 米扫,码得有 20cm 以上。模块太小,再高的纠错也救不回来。
不同用途,写法不一样
-
网址:直接放
https://example.com就行,别加多余文字。能短链就短链。 -
纯文本:一句标语、一段说明,短一点。
-
Wi-Fi:格式是
WIFI:S:网络名;T:WPA;P:密码;;。手动拼容易错(特殊字符要转义),直接用Wi-Fi 二维码工具,客人扫一下就连上,不用口述密码。 -
电子名片 vCard:适合放在简历、邮件签名里。完整格式示例:
BEGIN:VCARD VERSION:3.0 N:张;三;;; FN:张三 TEL;TYPE=CELL:13800000000 EMAIL:zhangsan@example.com ORG:某某公司 END:VCARD字段别太多,否则版本飙升、码变密。
-
邮件 / 短信:
mailto:someone@example.com?subject=Hi和SMSTO:13800000000:内容,扫完直接跳到对应 App。 -
地理位置:
geo:39.9042,116.4074,地图 App 会直接定位。
批量生成:当你要做一百个
有些场景真不是做一个两个:
- 活动入场券,每人一个专属码
- 商品溯源,每个批次一个码
- 餐厅桌号、会议桌签、设备资产管理标签
一个一个点开网页手敲,做到第三个就想砸键盘。我们的工具支持把一批内容一次性生成,导出图片或打包下载,几分钟搞定上百个。单张二维码适合随手做,批量需求就用它的批量模式——把清单(每行一个链接/文本)贴进去,一键出图。
实战:给 100 件商品做溯源码
准备 CSV:每行 = 一个商品链接
→ 粘贴进批量模式
→ 选纠错等级 Q(仓储环境易脏)
→ 统一尺寸 300×300,导出 ZIP
→ 印厂直接上版
艺术二维码:好看也不能牺牲可扫
品牌物料上放一个死板的黑方块,设计同学会皱眉。这时候艺术二维码工具就派上用场:圆点样式、渐变配色、中心 logo、自定义前景背景色,都能做。
但「艺术」和「能扫」之间有一条线,踩过去就翻车:
- 别把 logo 盖在三个定位角上:那三个大方块是摄像头定位用的,遮住一个就大概率扫不出。logo 放正中间,避开三角。
- 对比度不能丢:渐变再好看,前后景也得拉得开(深色模块 + 浅色底)。
- 纠错等级调高:艺术化处理本身会干扰识别,纠错提到 Q 或 H 更稳。
- 别用浅色当模块:浅灰模块在白底下基本扫不出,坚持深色前景。
开发者:用代码生成
Python 的 qrcode 库就能控制大部分参数:
import qrcode
qr = qrcode.QRCode(
version=None, # 自动选最小版本
error_correction=qrcode.constants.ERROR_CORRECT_H, # 高纠错,为 logo 留空间
box_size=10,
border=4, # 静区,至少 4
)
qr.add_data("https://example.com")
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save("qrcode.png")
JavaScript 侧,qrcode 库在浏览器/Node 都能跑,工具库的二维码工具底层也是同类逻辑,区别是全程本地、不上传。
反过来:手里有码图,想读出内容
不是只有生成,有时候你拿到一张二维码截图,想知道它到底指向哪。用二维码识别工具传图就能解析出里面的文本或链接,不用拿手机对着屏幕扫。它同样在本地用摄像头/图像识别算法跑,图不离开浏览器。
静态码 vs 动态码
这里有个容易混淆的概念:
| 类型 | 原理 | 能否改内容 | 能否统计 |
|---|---|---|---|
| 静态码 | 内容直接编码进图 | ❌ 改了就得重新生成 | ❌ |
| 动态码 | 图里只存一个短链接,跳转到后台配置的真实地址 | ✅ 可随时改 | ✅ 可统计扫描量 |
工具库的二维码工具生成的是静态码——没有后台、不依赖任何服务、永久有效、完全隐私。如果你需要「改了内容老码还能用」或扫码统计,那是另一套带服务器的方案,不在本地工具范畴。
隐私这件事
生成二维码本质是把一段文本编码成图,不需要任何服务器参与。工具库的二维码工具全程在浏览器本地算,你填的网址、密码、名片信息都不会上传。尤其是 Wi-Fi 码里含明文密码,本地生成才安心——你肯定不想把家里 Wi-Fi 密码发到某个陌生服务器上再生成码。
常见错误一览
| 错误 | 后果 | 正确做法 |
|---|---|---|
| 码贴到边缘、没有留白 | 扫不开 | 四周留 ≥4 模块空白 |
| 浅色底配浅色字 | 识别慢甚至失败 | 深前景、浅背景 |
| logo 盖住定位角 | 完全扫不出 | logo 放中心,避开三角 |
| 往里塞一整段长文 | 模块太密,小屏扫不动 | 用短链接,内容精简 |
| 纠错等级太低又 overlay | 一脏就废 | 要叠图就提到 Q/H |
| 打印太小 | 隔远了扫不动 | 边长 ≥ 扫描距离 ÷ 10 |
常见问题
纠错等级越高越好吗? 不是。越高越密、同等内容下码越大,打印出来才划算。日常 M 足够,叠 logo 或户外才需要 Q/H。
艺术二维码会不会容易扫不开? 只要保住定位角、对比度和足够纠错等级,手机一样秒扫。翻车的都是在这三点上省了功夫。
二维码能存多少? 理论最大约 7089 个数字 / 4296 个字母 / 2953 个字节(版本 40 + L)。但实话实说,塞这么多基本扫不动,实际用别超过几百字符。
生成的码会失效吗? 不会。静态二维码是静态图,不依赖任何服务,生成后永远有效——除非你打印的纸坏了。
能不能做成圆形/异形还能扫? 圆点样式可以(模块形状改了,定位图案保留即可);但砍掉角落或破坏定位图案的「异形」基本扫不出。艺术化处理要守住三条底线。
一句话决策
要做二维码?
├── 普通链接 / 文本 → /encode/qr
├── 让客人连 Wi-Fi → /encode/wifi-qr
├── 要品牌感、好看 → /utils/art-qr(纠错提到 Q 以上,logo 避开三角)
├── 要做一百个 → /encode/qr 的批量模式
└── 手里有码图要读内容 → /encode/qr-decode
下次要做码,先想清楚用途,照着上面的分支选工具,十分钟就能交付一批既漂亮又一定扫得开的码。相关图片格式的处理(比如把码导出成透明 PNG 去叠海报)可以参考图片格式转换指南。
本站提供浏览器本地工具,免注册即可试用 →