你也可以手绘二维码 (一) 基础篇
摘要:本文主要介绍二维码的基础知识,对二维码有一个基本了解,方便后面深入研究原理以及绘制。
近来工作需要,使用到了二维码相关到技术,趁此机会和大家分享一下我的一下体会,希望对你有所帮助。二维码在日常生活中到广泛应用,作为一名有追求到程序员,必然会有过一探究竟到想法。
二维码基础知识
我们最常见到的一种二维码就是 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,公众号名称:风之程序人生。查看更多最新内容。
- 博客是我学习和思考的输出,愿你有所收获。
- 有想法请留言,共同探讨学习。
- 由于博主能力有限,文中可能存在描述不当,恳请指正!
- 你也可以关注我的公众号:ProgramLife042,名称:风之程序人生,方便接收最新内容。