二维码的创建过程及原理

  • 量子位
  • 2024-11-20 13:01:52
二维码的创建过程及原理

生活中随处可见的二维码,你知道其创建过程和对应的原理吗?

多伦多大学的工程师Nayuki做了一个JavaScript的网页Demo,分9步为我们解锁了其背后的原理:

1. 字符分析(Analyze Unicode characters):检测输入文本中的每个字符及其Unicode编码,评估并选择最适合的编码模式(如数字、字母数字、字节、汉字)。【图1】

2. 创建数据段(Create data segment):根据选择的编码模式,将输入的字符转换为对应的二进制位串,每个字符通常转换为8位二进制。【图2】

3. 选择版本号(Fit to version number):根据数据段的总比特长度和所需的纠错级别,选择合适的二维码版本(1到40)。每个版本支持不同数量的数据和纠错能力。【图3】

4. 连接数据段并添加填充(Concatenate segments, add padding, make codewords):将所有数据段的比特串连接起来,添加终止符和必要的比特填充,以确保总比特数符合所选二维码的版本容量。然后将比特串分割为8位一组的字节码。【图4】

5. 分割块、添加纠错码并交织(Split blocks, add ECC, interleave):将字节码分割为多个块,为每个块生成纠错码(使用Reed–Solomon算法),并将字节码与纠错码交织在一起,以增强二维码的抗损坏能力。【图5】

6. 绘制定位图案(Draw fixed patterns):在二维码的特定位置绘制定位图案(如三个角的寻址图)、时序图案和对齐图案,这些定位图案能帮助扫描设备正确定位二维码。【图6】

7. 绘制数据码字和剩余区域(Draw codewords and remainder):按照锯齿形扫描顺序,将字节码和纠错码的比特值填充到二维码的模块中,跳过功能模块(如定位图案和格式信息区域)。【图7】

8. 应用掩码模式(Try applying each mask):尝试使用不同的掩码模式(0到7),优化二维码的视觉效果,通过对数据模块进行异或操作,减少大面积相同颜色模块,提升扫描可靠性。【图8】

9. 评估并选择最佳掩码(Find penalty patterns & Calculate penalty points, select best mask):根据一系列规则(如同色模块的连续长度、2x2同色块、寻址图案样式、黑白比例等)计算每种掩码模式的惩罚分。选择惩罚分最低的掩码模式作为最终二维码,以确保二维码的可读性和美观性。【图9】

感兴趣的小伙伴可以点击:网页链接
二维码的创建过程及原理二维码的创建过程及原理二维码的创建过程及原理二维码的创建过程及原理二维码的创建过程及原理二维码的创建过程及原理二维码的创建过程及原理二维码的创建过程及原理二维码的创建过程及原理