你也可以手绘二维码 (一) 基础篇

摘要:本文主要介绍二维码的基础知识,对二维码有一个基本了解,方便后面深入研究原理以及绘制。

近来工作需要,使用到了二维码相关到技术,趁此机会和大家分享一下我的一下体会,希望对你有所帮助。二维码在日常生活中到广泛应用,作为一名有追求到程序员,必然会有过一探究竟到想法。

二维码基础知识

我们最常见到的一种二维码就是 QR 图码(全称为快速响应矩阵图码;英语:Quick Response Code )。详细可以参考 维基百科 QR 码页面,看下面到图片可以了解的存储基本结构。
二维码结构

特别一提的是两个概念:

版本

QR 码一共提供 40 种不同版本存储密度的结构,版本 1 为 21×21 模块(模块为 QR 码中的最小单元),每增加一个版本,长宽各增加 4 个模块,最大的版本 40 为 177×177 模块。可以得到 4(V-1) + 21 ,V 是版本号的计算方式。版本和数据容量直接关联。

容错能力

QR 码图形如果有破损,仍然可以被机器读取内容,最高可以到 30%面积破损仍可被读取。

纠错等级 可恢复的码字比例
L 7%
M 15%
Q 25%
H 30%

级别越高,纠错能力也提高,但数据量会随之增加,图片尺寸也也会变大,识别速度下降。数据量较多的时候,可以选择级别 L。一般情况下选择级别 M (15%)。

对具体编码过程感兴趣对可以简单参考陈浩(左耳朵耗子)的文章 二维码的生成细节和原理,这里就不展开了,当然实现细节可以参考开源库 QrCode.Net。权威的就看下面的标准。

标准

二维码国际标准组织对应到版本号为 ISO 18004 ,最新可查到的是 ISO 18004:2015 ,QrCode.Net 是基于 ISO/IEC 18004:2006 实现。至于为什么,因为后面的版本授权不是免费的!

国内相关的标准是 GB/T 18284-2000 。这个标准是根据 ISO/IEC 18004:2000 ,但并非等价的,只采用了模式 2 的符号舍弃了模式 1 的内容,新增了汉字编码规则替代了日本汉字。

和最新版本的差异,算法上没有差别,只是更新了一部分符号说明,比较靠谱的说法:

Renames the QR Code 2005 symbol to QR Code and adds clarification to some procedures and minor corrections.

如何选择版本和容错级别

本质上还是根据内容大小决定。一种方法就是查表,具体不展开。另外一种就是标准里面描述的判断,可以参考在线生成二维码的 Demo自动计算二维码需要版本

感兴趣交流可以留言,共同探讨学习,限于作者水平有限,理解不到位,有错误的地方望不吝赐教,感谢!
你也可以关注公众号:ProgramLife042,公众号名称:风之程序人生。查看更多最新内容。

原文地址:https://www.cnblogs.com/lijinfeng042/p/9632534.html