从数据到图案
生成二维码首先要选择适合数据的编码模式:数字、字母数字、字节或汉字。编码器把数据转成比特,切分成 8 位的码字,并按选定的等级加上里德-所罗门纠错码字,然后选择能容纳这些数据的最小版本。
码字按锯齿形路径排入网格,跳过固定图案。最后,编码器套用八种掩模图案之一,打散大片空白区域或容易混淆的形状,并把掩模和纠错等级记录在格式信息中。
- 选择编码模式
- 编码数据并加上纠错码字
- 选择版本(尺寸)
- 放置定位、时序和校正图案
- 填入数据模块
- 从八种掩模中选出最佳的一种,并写入格式信息
从相机图像到数据
解码就是把这些步骤倒过来。扫描器找到三个定位图案,它们深浅比例为 1:1:3:1:1,在大多数图像中都很显眼,再结合时序和校正图案来映射网格。接着读取格式信息,去除掩模,收集码字。
随后,里德-所罗门解码会修复被读错的码字,上限取决于纠错等级。如果损坏太多,二维码会读取失败,而不是返回错误数据,所以二维码很少出现乱码结果。
为什么尺寸和对比度很重要
每一步都依赖相机能分辨深色模块和浅色模块。模块太小、对比度低、反光、模糊或缺少静区,都会让更多模块变得难以判断,而纠错能吸收的损坏是有限的。保持数据简短、对比度强、边距清晰,就能让解码器的工作最轻松。