二维码生成完全指南:原理、批量生成与艺术二维码

工具教程

二维码已经无处不在,但你真的会做吗

扫码点餐、加微信、连 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=HiSMSTO: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 去叠海报)可以参考图片格式转换指南

本站提供浏览器本地工具,免注册即可试用 →

#二维码#QR Code#批量生成#艺术二维码#Wi-Fi二维码#隐私