大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是走進二維碼(QR Code)的世界專題的引言。
如今二維碼可以說是深入走進大家的生活了,推送名片、掃碼支付都離不開它,大家?guī)缀趺刻於紩投S碼打交道。雖然大家都知道二維碼的各種應(yīng)用,但很多人并不知道二維碼的原理。做嵌入式這行的人一大特質(zhì)就是喜歡研究各種技術(shù)本身,痞子衡早就對二維碼技術(shù)感興趣了。上期《嵌入式半月刊》的最后,痞子衡介紹了一個基于 i.MXRT1050 的掃碼支付終端(QM50),這是一個二維碼識別的應(yīng)用。這個應(yīng)用徹底激活了痞子衡對二維碼的好奇心,所以接下來痞子衡打算帶大家一起深入研究一下二維碼技術(shù),從零開始認識二維碼,并最終在 MCU 上實現(xiàn)二維碼生成與識別的設(shè)計。
如下圖左邊所示的矩形二維碼是大家最常看到的類型,網(wǎng)上可以找到很多資料,也有很多成熟的開源庫,痞子衡的最終目標不是研究這個已經(jīng)沒啥秘密可言的二維碼,右邊那個放射狀的圓形二維碼才是痞子衡更感興趣的,這是微信于 2017 年推出的全新設(shè)計的小程序二維碼,網(wǎng)上關(guān)于這種二維碼的設(shè)計資料非常少,也沒有開源庫,所以痞子衡打算實現(xiàn)一下圓形二維碼。
今天痞子衡就先給大家簡單介紹一下 QR Code 基本知識以及這個專題后續(xù)的推進計劃:
一、QR Code 入門
1.1 二維碼起源與種類
在介紹二維碼之前,很有必要先提一下它的老大哥條形碼(barcode),條形碼技術(shù)早在 20 世紀 40 年代就被發(fā)明出來了,只不過到了 70 年代激光束掃描器的問世才使得條形碼技術(shù)真正落地。條形碼常用的碼制有 EAN、UPC、Codabar、Code 39、Code 128 等。
條形碼本質(zhì)上屬于一維碼,一維碼所攜帶的信息量有限,如 EAN-13 碼僅能容納 13 位阿拉伯數(shù)字,更多的信息只能依賴數(shù)據(jù)庫的支持,離開了預(yù)先建立的數(shù)據(jù)庫,這種條形碼就沒有意義了,因此,在一定程度上也限制了條形碼的應(yīng)用范圍。基于這個原因,在 20 世紀 80 年代出現(xiàn)了二維碼。
二維碼依靠其龐大的信息攜帶量,能夠把過去使用一維條形碼時存儲于后臺數(shù)據(jù)庫中的信息包含在二維條形碼中,可以直接通過閱讀二維條形碼得到相應(yīng)的信息,并且二維條形碼還有錯誤修正技術(shù)及防偽功能,增加了數(shù)據(jù)的安全性。全球現(xiàn)有 250 多種二維碼,其中常見技術(shù)標準有 PDF417,QRCode,Code49、Code16K,CodeOne 等 20 余種。
1.2 QR Code 發(fā)明人
目前最流行的二維碼非 QR Code 標準莫屬,這是來自日本的電裝公司發(fā)明的一種二維碼。關(guān)于 QR Code 的發(fā)展歷史可以看電裝公司自己寫的軟文《QR 碼的成功之路》。QR Code 于 2000 年被正式采納為 ISO 國際標準 (ISO/IEC18004)。
- 電裝公司官網(wǎng):https://www.denso-wave.com/QR Code 官網(wǎng):https://www.qrcode.com/
這是 QR Code 的簡要標準,大家先睹為快:
- 規(guī)范手冊:ISO/IEC 18004:2015 Information technology — Automatic identification and data capture techniques — QR Code bar code symbology specification 在線閱讀:https://www.doc88.com/p-3847760679293.html 中文譯本:https://www.jianshu.com/p/7f0f30f20ef5
?
1.3 QR Code 基本概念
QR Code 有三個基本概念你必須要知道,分別是模型、版本、糾錯能力。
QR Code 一共有兩個模型,分別是模型 1 和模型 2。模型 1 是最早制作的 QR Code,最高版本為 14(73×73 碼元),最多可以處理 1167 位數(shù)字。模型 2 是模型 1 的改良版,它在二維碼變形的情況下也能順利讀取數(shù)據(jù)。當二維碼被打印在曲面上,或者由于讀取角度等原因?qū)е露S碼變形時,仍然可以通過設(shè)置在二維碼內(nèi)部的對齊模式有效讀取。模型 2 最高版本為 40(177×177 碼元),最多可以處理 7089 位數(shù)字。
現(xiàn)在市面上主流的就是 QR Code 模型 2,后面文章所提的 QR Code 均指模型 2。QR Code 設(shè)有 1 到 40 的不同版本(種類),每個版本都具備固有的碼元結(jié)構(gòu)(碼元數(shù))。(碼元是指構(gòu)成 QR Code 的方形黑白點)?!按a元結(jié)構(gòu)”是指二維碼中的碼元數(shù)。從版本 1(21 碼元×21 碼元)開始,在縱向和橫向各自以 4 碼元為單位遞增,一直到版本 40 (177 碼元×177 碼元)。
QR Code 具有“糾錯功能”。即使編碼變臟或破損,也可自動恢復(fù)數(shù)據(jù)。這一“糾錯能力”具備 4 個級別,用戶可根據(jù)使用環(huán)境選擇相應(yīng)的級別。調(diào)高級別,糾錯能力也相應(yīng)提高,但由于數(shù)據(jù)量會隨之增加,編碼尺寸也也會變大。
QR Code 的糾錯功能是通過將 Reed-solomon Codes(RS 碼)附加到原數(shù)據(jù)中的方式實現(xiàn)的。RS 編碼是應(yīng)用于音樂 CD 等用途的數(shù)學糾錯方法。它能以字節(jié)為單位進行糾錯,適合用于錯誤位置會集中的突發(fā)錯誤。
二、QR Code 變種:微信小程序碼
2.1 QR Code 變種
前面介紹的是最標準的 QR Code 樣式,但二維碼發(fā)展到現(xiàn)在已經(jīng)出現(xiàn)了很多變種,有彩色圖片、動圖、甚至非矩形的。這些變異二維碼本質(zhì)上與標準 QR Code 原理一致,只是在編碼排版上有所不同,因此生成和識別工具也不同。
2.2 微信小程序碼
微信小程序碼也是一種異形碼,這是騰訊 2017 年 1 月為微信小程序?qū)iT設(shè)計的一種二維碼式樣,這種異形并不是微信的首創(chuàng),F(xiàn)acebook、Snap 等公司都已經(jīng)推出過類似的異形碼。這種小程序碼相比標準二維碼有如下幾個優(yōu)點:
- 觀賞性:小程序碼與普通二維碼相比,看起來更美觀掃碼預(yù)期:掃碼前能明確知道掃碼之后將會體驗到一個小程序安全性:小程序碼目前只能通過微信產(chǎn)生,并且只能通過微信識別,安全性更高品牌宣傳:每個小程序碼右下角都是固定的微信小程序 Logo,每見到一次小程序碼,大家就能多一次聯(lián)想到微信小程序高容錯性:當一張二維碼圖片中間嵌有某些 Logo 圖片時,其實相當于是把最中間部分有用的編碼信息挖掉,再貼一張 Logo 圖片上去。而小程序碼不同,中間的 Logo 區(qū)并不包含數(shù)據(jù)編碼的部分,因此小程序碼擁有更高的容錯性
- ?
目前小程序碼一共支持 3 種容量,分別是 36 射線、54 射線和 72 射線:
因為小程序碼的專用性,目前它的生成都只能通過調(diào)用微信官方 API 接口,關(guān)于小程序碼的設(shè)計文檔寥寥無幾,來自騰訊官方的文章《你一定不知道,小程序碼是這樣綻放的》只稍稍透露了一些。
三、走進 QR Code 世界之路
鑒于以上介紹,痞子衡新開的這個專題后續(xù)推進計劃如下:
- 階段一:學習標準 QR Code 原理,使用 Python 搭建一個二維碼生成與識別平臺(基于現(xiàn)有開源庫)階段二:深入標準 QR Code 原理,純手工寫 Python 代碼實現(xiàn) Version1,ECC Level 為 L 的二維碼生成與識別階段三:學習微信小程序碼原理,純手工寫 Python 代碼實現(xiàn) 36 射線小程序碼生成與識別階段四:將 Python 端手工實現(xiàn)移植到 MCU 端,在 i.MXRT1060-EVK 板上實現(xiàn)二維碼生成與識別階段五:移植一個成熟開源庫到 MCU 端,在 i.MXRT1060-EVK 板上實現(xiàn)二維碼生成與識別
- ?
至此,走進二維碼(QR Code)的世界專題的引言痞子衡便介紹完畢了,掌聲在哪里~~~