简体中文

如何制作可实际扫描的二维码

纠错、安静区域、对比度和打印尺寸:这四件事决定了 QR 码在纸上是否有效或悄无声息地失效。

二维码是一张数据图片,它在某些方面是脆弱的

扫描仪不会像人读取文本那样“读取”QR 码。它将相机图像转换为黑白像素,找到角落里的三个大方块,计算出网格,然后读取每个单元格。一切对二维码有利或不利的因素都会回到这个过程:角落必须是可找到的,网格必须是规则的,每个单元格必须是明确的亮或暗。

这就是为什么代码在屏幕上看起来很完美,但一旦打印到菜单上就完全失败,以及为什么“使其更小以适应”是破坏代码的最常见方法。

纠错:保险,而非自由空间

QR 码携带冗余数据,因此当部分图像损坏时它们仍然可以解码。有四个级别:L 恢复符号的 7%,M 恢复 15%,Q 恢复 25%,H 恢复 30%。

权衡是尺寸。更高的冗余意味着更多的模块可用于相同的内容,而更多的模块意味着在给定的打印尺寸下每个模块的物理尺寸更小,这会使扫描变得更困难而不是更容易。提高水平并不意味着就自动更安全。

  1. 在屏幕上或保持平整的干净纸张上:L 或 M 就足够了。
  2. 在需要处理、折叠或泼溅的物品上——菜单、会员卡、包裹:问。
  3. 当您打算在中心放置徽标,或者表面确实充满敌意时:H.
  4. 如果代码在较高级别变得非常密集,请缩短内容而不是进一步提高级别。

安静区是代码的一部分

二维码周围的空白边距不是装饰。该规范要求每侧至少有四个模块的空白空间,扫描仪真正依赖它来找到符号的边缘。

这是 QR 设计中最常被忽视的要求。与边框、照片或文本块对接的代码会失去其安静区域,并可能完全停止工作 - 而且失败看起来是随机的,因为它取决于相机碰巧捕捉到的内容。

该工具默认有四个模块,如果您减少它,则会向您发出警告。如果布局没有留出边距的空间,请缩小代码而不是修剪边距。

对比比颜色更重要

扫描仪对图像进行二值化,因此重要的是代码与其背景之间的亮度差异,而不是颜色看起来是否令人愉悦地不同。两种颜色在肉眼看来可能明显不同,但转换为灰度后几乎完全相同。

白底黑字的对比度为 21:1。目标至少为 7:1;下面关于 4:1 代码在纸上和光线不好的情况下开始失败,这个工具会警告您。当您更改颜色时,预览旁边的实时对比度图会更新。

使代码比其背景更暗。许多扫描仪只寻找暗光模式,而反向代码(暗场上的光模块)就像在设备上抛硬币一样。如果您需要深色设计的代码,请将其放在浅色面板内。

避免代码中出现渐变,并注意透明背景:其后面的任何内容都必须满足相同的对比度要求。

根据扫描距离调整大小

一个广泛使用的经验法则是,代码的宽度应该大约是扫描距离的十分之一。在一定距离处读取的代码(例如 30 厘米)希望宽度约为 3 厘米。从三米处扫描的海报大约需要 30 厘米。

问题的另一半是模块大小。每个模块大约低于 0.4 毫米,普通手机摄像头开始陷入困境,廉价的热敏打印机会将相邻模块涂抹在一起。较短的内容意味着更少的模块,这意味着在相同的总体尺寸下每个模块都更大——这就是为什么保持有效负载较短比任何其他单一更改更有帮助。

选择正确的输出格式

将要打印的任何内容导出为 SVG。它是矢量,因此可以缩放到任何尺寸并具有完美锐利的边缘,这正是设计师或打印机所想要的。

为屏幕、文档和任何位图更容易的地方导出 PNG。选择较大的像素大小:该工具将模块大小四舍五入为整数像素,因此每个模块都是相同的,这避免了代码按分数缩放时出现的不均匀模块。

导出后切勿放大 PNG QR 码。相反,将其重新导出得更大——插值模糊了模块边缘,这正是扫描仪所需要的清晰效果。

在提交之前进行测试

在真实材料上以真实尺寸打印一份,然后用多部手机(最好是旧版 Android 手机和最新的 iPhone)扫描它,并根据代码实际存在的光线进行扫描。在台灯下的办公桌上可以使用的代码在窗边的桌子上可能会失败。

如果您将徽标放置在中心,请使其保持较小,使其远离三个角的方块,并测试结果,而不是假设纠错会覆盖它。

常见问题

我可以把我的标志放在中间吗?
通常,是的,如果您使用较高的纠错级别并将徽标保持在大约 20% 的区域下方,远离三个角查找器图案。该工具不会覆盖徽标,因为安全地执行此操作需要进行只有您才能进行的目视检查。导出 SVG,将徽标放入设计工具中,然后测试结果。
为什么我的代码在设计师使用后就停止工作了?
通常,安静区域会被裁剪掉,代码会被缩小到模块足够大的程度,或者会被重新着色为对比度太小的东西。以书面形式向他们提供 SVG 和四模块边距要求。
较长的链接是否会使代码更难扫描?
是的。更多的内容意味着更多的模块,因此在固定的物理尺寸下,每个模块都更小。使用有效的最短地址 - 但请注意,此工具故意不会为您缩短链接,因为这会将第三方置于您的代码与其目的地之间。
默认情况下我应该使用哪个纠错级别?
对于大多数用途来说,M 是一个合理的默认值。对于任何处理或打印较小的东西,请移至 Q,只有当您覆盖部分代码或表面确实很粗糙时,才移至 H。

该工具不会做什么