二维码扫不出来?尺寸、容错率和留白决定扫码成功率
上周帮一个做市场活动的朋友救场。他们印了 500 张海报铺会场,二维码贴在海报右下角的最边上,紧贴裁切线,连一圈白边都没留。开展第一天上午扫码率惨到老板亲自来问。我去看了一眼文件,二维码本体才 1.2cm 见方,矩阵密得像马赛克,周围还顶到出血线。三个毛病叠在一起,扫描器自然认不出来。
二维码扫不出,绝大多数不是手机或扫码 App 的问题,是图本身生成时就没考虑扫描器的工作方式。下面这四个因素是我这些年反复见过的高发原因,每个都能单独让一张看似正常的二维码报废。
因素一:尺寸太小,矩阵太密
二维码靠黑白模块组成的矩阵编码数据。模块越小越密,扫描器要从画面里把每个模块分辨出来就越费劲。手机摄像头分辨率再高,模块如果只占画面里的两三个像素,就分不清是黑还是白。
实操上的参考线:
- 屏幕显示:建议至少 256px,打印再放大一档。
- 纸质印刷:扫描距离对应的经验公式是「边长 ≥ 扫描距离 / 10」。海报贴墙上人站在 1 米外扫,边长至少 10cm;名片拿在手里 10cm 距离扫,1cm 就够。
- 不要把小图强行拉大。把 128px 的图在 PS 里拉伸到 500px,模块边缘会糊掉,比不拉还糟。要在生成阶段就指定更大尺寸。
展会上那张海报的二维码最终改到 4cm 见方,扫描距离 30 到 50cm,手机举起就能扫。
因素二:容错率选太低
二维码有容错机制,允许部分模块被遮挡或污损仍能读出。容错率分四档:
- L:可恢复 7% 的数据。
- M:可恢复 15%。
- Q:可恢复 25%。
- H:可恢复 30%。
代价是容错率越高,需要塞进去的冗余数据越多,同样内容生成的矩阵越密。
怎么选取决于使用场景:
- 屏幕显示、不会被遮挡:L 够用,矩阵最稀疏。
- 印海报、贴易拉宝,可能被人手挡、被折角:选 M 或 Q。
- 工业溯源、可能被污渍磨损、需要带 logo 叠在中间:选 H。
很多人喜欢在二维码中间贴一个 logo,相当于人为挖掉一块数据。这种情况如果不把容错率提到 H,挖掉的那块恰好盖住关键数据,扫码就会时灵不灵。建议要么不要叠 logo,要么 logo 面积控制在整体 10% 以内并选 H 容错。
因素三:紧贴边缘,没有留白
二维码三个角有「回」字形的位置探测图形,扫描器靠它们判断「这是一张二维码,方向是这样」。要让扫描器认出这三个角,二维码周围必须有一圈干净的白边,标准里叫 quiet zone,宽度至少 4 个模块。
海报里最常见的就是这个错误。设计师为了版面紧凑,把二维码紧贴图片或文字,甚至裁切线压上去。结果扫描器把周围的色块当成了二维码的一部分,定位失败,自然扫不出。
改起来很简单,生成时就把留白算进去。如果生成器没有单独的 quiet zone 选项,导出后在四周手动加白边,宽度按整图边长的 10% 给,留多不留少。前面那张海报的二维码挪到海报中央偏上的留白区,四周各空 1cm,问题当场解决。
因素四:对比度不足
扫描器要的是黑白分明的模块。深色模块配浅色背景是标准配置,扫描器对此最敏感。一旦对比度拉低,识别率会断崖式下降。
常见的踩雷配色:
- 深蓝模块配深红背景:人眼能分,扫描器看是接近的两块灰度,分不开。
- 浅灰模块配白底:看起来很高级很 minimal,但模块灰度太浅,扫描器认为它跟背景一样。
- 反色(白模块黑底):部分老扫描器不认,新版多数可以,但稳定性差一档。
- 渐变色或半透明:模块边缘不清晰,是最差选择。
稳妥做法是黑模块配白底,或者一种深色(黑、深蓝、深绿)配一种浅色(白、浅黄、米色),对比度拉满。要品牌色就得接受扫码成功率打折,并在量产前用三四个不同手机实测一遍。
顺带一提:内容越长矩阵越密
二维码编码的数据越多,矩阵版本越高,模块越密。一个长 URL 直接塞进去,生成的二维码版本可能很高,模块挤在一起,放大也扫不动。
实战做法是把长链接先用短链服务压一下再生成二维码。短链服务很多,挑一个稳定的,避免短链服务商日后倒闭导致二维码永久失效。如果是自己服务,搭一个短链子域最稳。
另外,纯数字比纯字母密度低,纯字母比 URL 密度低,能换成纯数字(比如编号、电话)就不要硬塞 URL。
实操:生成时就把参数调对
排查完原因,生成新二维码时直接选对参数最快。UPTools 二维码生成器 支持自定义尺寸,默认 256px,建议至少这个值起步,打印场景再放大。生成过程全在浏览器本地跑,不传任何数据,长链接或带敏感参数的 URL 也能放心用。
三句话总结
扫码扫不出,九成是图本身的问题,先查尺寸够不够大、容错率够不够高、四周有没有 4 个模块的留白。印海报、可能被遮挡的场景容错率选 M 或 Q,要叠 logo 选 H 并控制 logo 面积。配色坚持深色模块配浅色背景,长链接先用短链压一下再生成二维码,矩阵稀疏才好扫。
相关文章