二維碼又稱 QR Code,QR 全稱 Quick Response,是一個近幾年來移動設備上超流行的一種編碼方式,它比傳統的 Bar Code 條形碼能存更多的信息,也能表示更多的數據類型:好比:字符,數字,中文等等。今天就來跟你們分享一下個人二維碼生成解析工具,主要功能就是生成二維碼,而且能夠添加自定義的Logo。固然,網絡上面生成二維碼的工具多如牛毛,生成二維碼早已再也不新鮮。這個工具的一個亮點就是能夠識別二維碼,下面就來具體看看吧,不過首先要補充一點二維碼的知識。git
1、二維碼的版本github
首先,咱們先說一下二維碼一共有 40 個尺寸。官方叫版本 Version。Version 1 是 21 x 21 的矩陣,Version 2 是 25 x 25 的矩陣,Version 3 是 29 的尺寸,每增長一個 version,就會增長 4 的尺寸,公式是:(V-1)*4 + 21(V是版本號) 最高 Version 40,(40-1)*4+21 = 177,因此最高是 177 x 177 的正方形。算法
下面咱們看看一個二維碼的實例:網絡
2、QR碼的容錯處理工具
二維碼支持糾錯處理;糾錯處理相對複雜,按照QR碼的標準文檔說明,QR碼的糾錯分爲4個級別,分別是:學習
3、二維碼(QR Code)的容量測試
對於不一樣版本的二維碼,容量也是不一樣的。理論上內容通過壓縮處理後能夠存7089個數字,4296 個字母和數字混合字符,2953個8位字節數據,1817個漢字;在上面咱們看到,不一樣的Version的QR Code是不一樣的矩陣,Version版本越過,也就意味着容量越大。關於容量的計算我沒有找到比較權威的算法,這裏以初版的來進行計算,初版(21×21)的格式以下:優化
其中的只有黃色的是存儲數據的內容,在初版本中只有217(21×21 - 8*9*3 -8)個存儲數據的數空間,而其中有用的數據是 217 - 1個數據結尾標誌 = 216 ,在216bit ui
216bit/8 = 27Byte 在版本一的QR碼中只可以存儲27Byte的數據(要是有校驗容錯就更少了),固然在不一樣的容錯級別下,容量也是有變化的。編碼
因此,version爲1的QR Code大概也就能容下十幾個字符。
4、二維碼的編碼
QR 碼支持以下的編碼:
Numeric mode 數字編碼,從 0 到9。若是須要編碼的數字的個數不是 3 的倍數,那麼,最後剩下的 1 或 2 位數會被轉成 4 或 7bits,則其它的每 3 位數字會被編成 10,12,14bits,編成多長還要看二維碼的尺寸(下面有一個表 Table 3 說明了這點)
Alphanumeric mode 字符編碼。包括 0-9,大寫的A到Z(沒有小寫),以及符號$ % * + – . / : 包括空格。這些字符會映射成一個字符索引表。以下所示:(其中的 SP 是空格,Char 是字符,Value 是其索引值) 編碼的過程是把字符兩兩分組,而後轉成下表的 45 進制,而後轉成 11bits 的二進制,若是最後有一個落單的,那就轉成 6bits 的二進制。而編碼模式和字符的個數須要根據不一樣的 Version 尺寸編成9, 11 或 13 個二進制(以下表中 Table 3)
Byte mode, 字節編碼,能夠是0-255 的 ISO-8859-1 字符。有些二維碼的掃描器能夠自動檢測是不是 UTF-8 的編碼。
這個工具是用WPF基於開源項目ThoughtWorks.QRCode.dll開發的,沒有複雜的生成二維碼的算法,不管你是新手仍是大牛,都能看的懂。看到這裏有些使用過的ThoughtWorks.QRCode.dll的大牛們可能就失望了,不過研究二維碼生成的算法確實須要學習不少的東西,還要參考不少的資料,你們有興趣的能夠本身研究一下ThoughtWorks.QRCode的源碼,下面給出了一些參考資料。下面來先來看看工具的截圖:
ThoughtWorks.QRCode源碼地址:http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library
ThoughtWorks.QRCodeGithub地址:https://github.com/aaronogan/QR.NET
界面很簡單,下面簡單來講明一下:
二維碼的內容:生成的二維碼內容,能夠輸入任何的字符串,好比網址之類的,支持中文。
二維碼尺寸:生成二維碼的大小,默認值爲4,數字越大,生成的二維碼越大,能夠根據需求填寫。
二維碼版本:二維碼的Version,值爲1~40,version越高,二維碼信息容量越大。可是目前30以上的版本生成的二維碼,因爲手機攝像頭等緣由會形成手機沒法識別。
生成:生成指定內容的二維碼,而後顯示在左下方的圖片框中。
保存:保存二維碼,將二維碼另存爲png格式的圖片。
打開二維碼:打開二維碼圖片,顯示在左下方的圖片框中。
解析:解析左下方中圖片框中的二維碼,解析結果會顯示在二維碼內容後面。
自定義Logo:點擊添加圖片做爲Logo,不添加則生成的二維碼中沒有Logo.
下面來生成一個二維碼看看吧,如圖:
而後咱們添加一個Logo來看看吧,以下圖:
因爲Logo的尺寸能夠自由調節,有時候Logo設置的過大,會覆蓋二維碼中的部分信息,形成沒法識別。這個時候,咱們能夠點擊解析按鈕,來測試咱們的二維碼是否有效,如圖:
咱們看到解析出來的內容出現了亂碼,這個就是由於咱們的Logo尺寸太大了,咱們能夠減少Logo的尺寸或者增大二維碼的尺寸,這裏我修改二維碼尺寸爲6,而後就能夠正常識別了。而後咱們點擊保存按鈕,打開另存爲對話框,會保存爲png格式的圖片,實際生產的二維碼尺寸如圖:
下面咱們來看一下解析二維碼,咱們從百度上面隨便下載一個二維碼圖片,看看裏面保存了什麼,如圖:
這裏咱們能夠鼠標選擇文本複製,或者直接點擊複製到剪切板來複制二維碼的內容。
下面來講說一些Bug處理,首先要說的是二維碼的容量問題,Version爲1的二維碼容量約爲十幾個字符,超出容量就會出現下面錯誤,如圖:
固然,若是你隨便打開一張無效的二維碼圖片當作二維碼來解析,會出現以下錯誤,如圖:
固然,若是圖片中含有二維碼仍是能夠解析成功的,如圖:
Github地址:https://github.com/yunfeifei/QRCodeTools
固然,軟件還有不少要優化的地方,存在許多未知的Bug,後面會不斷修改更新。歡迎你們進行評測,指出bug和不足之處。通過測試,若是二維碼太大或者版本過高都會出現識別不了的狀況,固然選擇合適的尺寸和版本仍是正常使用的。
做者:雲霏霏
QQ交流羣:243633526
博客地址:http://www.cnblogs.com/yunfeifei/
聲明:本博客原創文字只表明本人工做中在某一時間內總結的觀點或結論,與本人所在單位沒有直接利益關係。非商業,未受權,貼子請以現狀保留,轉載時必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
若是你們感受個人博文對你們有幫助,請推薦支持一把,給我寫做的動力。