你們好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給你們分享的是走進二維碼(QR Code)的世界專題的引言。html
現在二維碼能夠說是深刻走進你們的生活了,推送名片、掃碼支付都離不開它,你們幾乎天天都會和二維碼打交道。雖然你們都知道二維碼的各類應用,但不少人並不知道二維碼的原理。作嵌入式這行的人一大特質就是喜歡研究各類技術自己,痞子衡早就對二維碼技術感興趣了。上期《嵌入式半月刊》的最後,痞子衡介紹了一個基於i.MXRT1050的掃碼支付終端(QM50),這是一個二維碼識別的應用。這個應用完全激活了痞子衡對二維碼的好奇心,因此接下來痞子衡打算帶你們一塊兒深刻研究一下二維碼技術,從零開始認識二維碼,並最終在MCU上實現二維碼生成與識別的設計。
以下圖左邊所示的矩形二維碼是你們最常看到的類型,網上能夠找到不少資料,也有不少成熟的開源庫,痞子衡的最終目標不是研究這個已經沒啥祕密可言的二維碼,右邊那個放射狀的圓形二維碼纔是痞子衡更感興趣的,這是微信於2017年推出的全新設計的小程序二維碼,網上關於這種二維碼的設計資料很是少,也沒有開源庫,因此痞子衡打算實現一下這種圓形二維碼。數據庫
今天痞子衡就先給你們簡單介紹一下QR Code基本知識以及這個專題後續的推動計劃:小程序
在介紹二維碼以前,頗有必要先提一下它的老大哥條形碼(barcode),條形碼技術早在20世紀40年代就被髮明出來了,只不過到了70年代激光束掃描器的問世才使得條形碼技術真正落地。條形碼經常使用的碼制有EAN、UPC、Codabar、Code 3九、Code 128等。微信小程序
條形碼本質上屬於一維碼,一維碼所攜帶的信息量有限,如EAN-13碼僅能容納13位阿拉伯數字,更多的信息只能依賴數據庫的支持,離開了預先創建的數據庫,這種條形碼就沒有意義了,所以,在必定程度上也限制了條形碼的應用範圍。基於這個緣由,在20世紀80年代出現了二維碼。
二維碼依靠其龐大的信息攜帶量,可以把過去使用一維條形碼時存儲於後臺數據庫中的信息包含在二維條形碼中,能夠直接經過閱讀二維條形碼獲得相應的信息,而且二維條形碼還有錯誤修正技術及防僞功能,增長了數據的安全性。全球現有250多種二維碼,其中常見技術標準有PDF417,QRCode,Code4九、Code16K,CodeOne等20餘種。安全
目前最流行的二維碼非QR Code標準莫屬,這是來自日本的電裝公司發明的一種二維碼。關於QR Code的發展歷史能夠看電裝公司本身寫的軟文《QR碼的成功之路》。QR Code於2000年被正式採納爲ISO國際標準 (ISO/IEC18004)。微信
- 電裝公司官網:https://www.denso-wave.com/
- QR Code官網:https://www.qrcode.com/
這是QR Code的簡要標準,你們先睹爲快:ide
QR Code有三個基本概念你必需要知道,分別是模型、版本、糾錯能力。工具
QR Code一共有兩個模型,分別是模型1和模型2。模型1是最先製做的QR Code,最高版本爲14(73×73碼元),最多能夠處理1167位數字。模型2是模型1的改良版,它在二維碼變形的狀況下也能順利讀取數據。當二維碼被打印在曲面上,或者因爲讀取角度等緣由致使二維碼變形時,仍然能夠經過設置在二維碼內部的對齊模式有效讀取。模型2最高版本爲40(177×177碼元),最多能夠處理7089位數字。學習
如今市面上主流的就是QR Code模型2,後面文章所提的QR Code均指模型2。QR Code設有1到40的不一樣版本(種類),每一個版本都具有固有的碼元結構(碼元數)。(碼元是指構成QR Code的方形黑白點)。「碼元結構」是指二維碼中的碼元數。從版本1(21碼元×21碼元)開始,在縱向和橫向各自以4碼元爲單位遞增,一直到版本40 (177碼元×177碼元)。編碼
QR Code具備「糾錯功能」。即便編碼變髒或破損,也可自動恢復數據。這一「糾錯能力」具有4個級別,用戶可根據使用環境選擇相應的級別。調高級別,糾錯能力也相應提升,但因爲數據量會隨之增長,編碼尺寸也也會變大。
QR Code的糾錯功能是經過將Reed-solomon Codes(RS碼)附加到原數據中的方式實現的。RS編碼是應用於音樂CD等用途的數學糾錯方法。它能以字節爲單位進行糾錯,適合用於錯誤位置會集中的突發錯誤。
前面介紹的是最標準的QR Code樣式,但二維碼發展到如今已經出現了不少變種,有彩色圖片、動圖、甚至非矩形的。這些變異二維碼本質上與標準QR Code原理一致,只是在編碼排版上有所不一樣,所以生成和識別工具也不一樣。
微信小程序碼也是一種異形碼,這是騰訊2017年1月爲微信小程序專門設計的一種二維碼式樣,這種異形並非微信的獨創,Facebook、Snap等公司都已經推出過相似的異形碼。這種小程序碼相比標準二維碼有以下幾個優勢:
- 觀賞性:小程序碼與普通二維碼相比,看起來更美觀
- 掃碼預期:掃碼前能明確知道掃碼以後將會體驗到一個小程序
- 安全性:小程序碼目前只能經過微信產生,而且只能經過微信識別,安全性更高
- 品牌宣傳:每一個小程序碼右下角都是固定的微信小程序 Logo,每見到一次小程序碼,你們就能多一次聯想到微信小程序
- 高容錯性:當一張二維碼圖片中間嵌有某些 Logo 圖片時,其實至關因而把最中間部分有用的編碼信息挖掉,再貼一張 Logo 圖片上去。而小程序碼不一樣,中間的 Logo 區並不包含數據編碼的部分,所以小程序碼擁有更高的容錯性
目前小程序碼一共支持 3 種容量,分別是 36 射線、54 射線和 72 射線:
由於小程序碼的專用性,目前它的生成都只能經過調用微信官方API接口,關於小程序碼的設計文檔寥寥無幾,來自騰訊官方的文章《你必定不知道,小程序碼是這樣綻開的》只稍稍透露了一些。
鑑於以上介紹,痞子衡新開的這個專題後續推動計劃以下:
- 階段一:學習標準QR Code原理,使用Python搭建一個二維碼生成與識別平臺(基於現有開源庫)
- 階段二:深刻標準QR Code原理,純手工寫Python代碼實現Version1,ECC Level爲L的二維碼生成與識別
- 階段三:學習微信小程序碼原理,純手工寫Python代碼實現36射線小程序碼生成與識別
- 階段四:將Python端手工實現移植到MCU端,在i.MXRT1060-EVK板上實現二維碼生成與識別
- 階段五:移植一個成熟開源庫到MCU端,在i.MXRT1060-EVK板上實現二維碼生成與識別
至此,走進二維碼(QR Code)的世界專題的引言痞子衡便介紹完畢了,掌聲在哪裏~~~
文章會同時發佈到個人 博客園主頁、CSDN主頁、微信公衆號 平臺上。
微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就能夠在手機上第一時間看了哦。