二维码扫不出来,多数不是工具坏了,而是纠错等级、导出尺寸、留白、配色这四项没设对。逐个讲清每个参数为什么会毁掉识别率,给出按用途取值的对照表,以及一套照着排查就能恢复的流程。
二维码生成器生成的码扫不出来,多半不是工具坏了,而是四个参数没设对:纠错等级、导出尺寸、留白、配色。按这个顺序逐项排查,往往改一处就恢复。
先说结论
能扫出来的码,四个参数都落在安全区间里。 按下面的顺序查,通常在前两项就能定位问题。
- 配色:必须深色码点、浅色背景。前景用浅色、中灰,或者干脆把前景背景反过来,很多手机直接不认。
- 留白:四周静区至少 2 个模块。裁到贴边,或者给码外面套一圈深色边框,识别率会明显下降。
- 尺寸:先看导出像素,再看它最终被显示或印刷成多大。屏幕展示不低于 400px,印刷按“每模块不小于 0.4mm”反推。
- 纠错等级:默认 M 就够。只有码面会被磨损、遮挡、贴歪时才升 Q 或 H,而且升了要同步把尺寸加大。
本地工具箱的二维码生成器 默认就是 M 级、400px、留白 2 模块、深藏青配纯白。这套默认值对应的是“通用场景一次过”,不确定时直接用默认再微调。
为什么会这样
二维码本质是一张黑白格子图,解码器干三件事:找到三个角上的定位图案,把图像二值化成黑白,再按格子读比特。四个参数分别作用在这三步上,坏哪一步都会表现为同一句话——扫不出来。
配色坏的是二值化。 解码器把深色当 1、浅色当 0,靠灰度阈值切分。前景用浅灰、浅黄,或者把前景背景反过来(浅码深底),二值化结果整体翻转,不少解码器并不做反色兼容,于是直接读不出内容。所以工具里一旦出现“对比度仅 x:1”的提示,其实已经是失败预警,不是提醒你好看不好看。
留白坏的是定位。 码四周那圈空白叫静区,是规范要求的,作用是把码的边缘跟周围环境隔开。留白设成 0,码点会顶到图片边界;再把它贴到深色背景、花哨照片或者带纹理的包装上,定位图案就和背景糊成一片,解码器找不到码在哪。
尺寸坏的是采样。 这里有两层尺寸,容易混:一层是导出像素,一层是它最终占多大。400px 的图放进 120px 的图标位,浏览器会重采样,模块边缘被插值成灰色过渡带,阈值判断随之漂移。所以“导出得很大”不等于“扫得出来”,关键在于每个模块最后分到多少像素或多少毫米。
纠错等级坏的是模块密度。 等级是冗余比例:L 约 7%、M 约 15%、Q 约 25%、H 约 30% 的破损面积可以被恢复。冗余要吃容量,同样的内容等级越高,二维码版本越高、模块数越多。同样是 400px 导出、留白 2 模块的情况下,版本 2(25×25 模块)每个模块 14px,到 33×33 模块时每个模块只剩 11px,再往上 41×41 模块就只剩 9px。格子密了,单格在屏幕上更小,远距离或低像素摄像头就更容易失败。
具体怎么做
按这个顺序调,每一步都在同一个页面上即时生效,不用来回切换。
- 先确认内容没超容量。中文按 UTF-8 每字三字节,一串带参数的推广链接很容易把码顶到高版本。超出时页面会直接提示“内容超出二维码容量”,这时该缩短链接或降低等级,而不是继续加大尺寸。
- 把纠错等级拨回 M。M 能扛约 15% 的破损面积,覆盖屏幕显示和普通打印的绝大多数情况;升到 H 等于把冗余翻倍,代价是模块更密。
- 留白设 2 个模块起步。下拉里 0、1、2、3、4、6 都能选,2 是静区的常规下限。想贴边排版,就在设计稿里自己留等效白边,别把这里设成 0 再靠容器补。
- 选导出尺寸。网页和 App 内展示用 400px 起;需要被聊天软件二次压缩、二次缩放的,用 640 或 800px 留余量。
- 配色回到深码浅底。点一下“默认配色”就是深藏青前景配纯白背景。自己改色后要回头看有没有对比度提示,出现就换回深色。
- 印刷场景导出 SVG。SVG 是矢量,放大到海报、易拉宝、包装尺寸模块边缘依然是直的;PNG 只适合小尺寸位图直接使用。
- 生成完先自己扫一遍,再用 二维码识别 把图传回去回读内容,确认换行、空格、链接参数没有被截断——这一步比肉眼核对靠谱。
参数对照
尺寸列是导出像素,印刷场景还要按成品物理尺寸复核一次:成品宽度 ÷(模块数 + 留白×2)应不小于 0.4mm。
| 使用场景 | 导出尺寸 | 留白 | 纠错等级 | 导出格式 |
|---|---|---|---|---|
| 网页、App 内展示 | 400 px | 2 模块 | M | PNG |
| 聊天软件转发图片 | 640 px | 2 模块 | M | PNG |
| 名片、贴纸、小标签 | 480 px | 2 模块 | Q | SVG |
| A4 传单、桌面立牌 | 640 px | 3 模块 | M | SVG |
| 海报、易拉宝、包装 | 800 px | 4 模块 | Q | SVG |
| 户外、易磨损或被遮挡 | 800 px | 4 模块 | H | SVG |
常见误区
- 以为纠错等级越高越保险 → 实际 H 只是把冗余从 15% 提到 30%,同样导出尺寸下模块更密、单格更小,印小了反而更难扫。等级要跟着尺寸一起加,单独调高是负优化。
- 以为留白只是排版好不好看 → 实际它是静区,解码器靠它界定码的边界。留白 0 再压到深色背景上,定位图案会跟背景连成一块。
- 以为导出越大越清晰 → 实际决定成败的是每个模块最终的物理尺寸。800px 的图塞进 120px 的图标位,重采样后跟直接生成 120px 没区别。
- 以为黑白反一下更有设计感 → 实际多数解码器按“深色为 1”的约定做二值化,浅码深底会读不出;深蓝、深绿配白底这类换色则通常没问题。
另外提一句合规:二维码本身不校验内容真伪,别用它做仿冒站点、他人收款码或伪造票据的入口,涉及收款、证件、票据的场景请走官方渠道生成。
常见问题
二维码生成器生成的码扫不出来,最可能是什么原因?
先看配色和留白,这两项坏了是“完全扫不出”;尺寸和纠错等级不够,表现是“时好时坏、离远一点就失败”。把前景改回深色、背景改回白色、留白调到 2 个模块,多数情况当场恢复。
二维码纠错等级选 L 还是 H?
通用场景选 M。L 只能恢复约 7% 的破损面积,容错偏低;H 能到约 30%,但模块数量明显增加。只有码面会被磨损、贴在不平整表面、或者中间要盖 Logo 时才用 Q 或 H,并且同步加大导出尺寸。
二维码留白设多少合适?设 0 行不行?
至少 2 个模块。设 0 时二维码顶到图片边缘,解码器可能找不到边界;确实需要贴边排版,就在设计稿里留等效白边,而不是把工具的留白设成 0。
二维码颜色可以改吗?什么配色扫得出来?
可以改,守住“深码浅底 + 足够对比度”即可。深蓝、深绿、深棕配白底一般没问题;浅灰、浅黄、浅粉做前景,或者前景背景明度接近,就会触发对比度不足提示,换回深色再试。
二维码会过期吗?改了内容旧码还能不能用?
这类静态二维码不含时效,图案不变就一直能扫,但内容也不会自动更新。要改内容只能重新生成,旧码仍然指向旧内容,所以印刷前一定要先验证再批量出图。印刷件导出 SVG 而不是 PNG,放大到海报尺寸模块边缘才不会发虚。
需要现调这几个参数,二维码生成器 里改完即时预览,确认扫得出来再导出。