標籤:
二維碼又稱 QR Code,QR 全稱 Quick Response,是一個近幾年來行動裝置上超流行的一種編碼方式,它比傳統的 Bar Code 條碼能存更多的資訊,也能表示更多的資料類型:比如:字元,數字,中文等等。今天就來跟大家分享一下我的二維碼產生解析工具,主要功能就是產生二維碼,並且可以添加自訂的Logo。當然,網路上面產生二維碼的工具多如牛毛,產生二維碼早已不再新鮮。這個工具的一個亮點就是可以識別二維碼,下面就來具體看看吧,不過首先要補充一點二維碼的知識。
一、二維碼基礎知識
一、二維碼的版本
首先,我們先說一下二維碼一共有 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 的正方形。
下面我們看看一個二維碼的執行個體:
二、QR碼的容錯處理
二維碼支援錯誤修正處理;錯誤修正處理相對複雜,按照QR碼的標準文檔說明,QR碼的錯誤修正分為4個層級,分別是:
- level L : 最大 7% 的錯誤能夠被糾正;
- level M : 最大 15% 的錯誤能夠被糾正;
- level Q : 最大 25% 的錯誤能夠被糾正;
- level H : 最大 30% 的錯誤能夠被糾正;
三、二維碼(QR Code)的容量
對於不同版本的二維碼,容量也是不同的。理論上內容經過壓縮處理後可以存7089個數字,4296 個字母和數字混合字元,2953個8位位元組資料,1817個漢字;在上面我們看到,不同的Version的QR Code是不同的矩陣,Version版本越過,也就意味著容量越大。關於容量的計算我沒有找到比較權威的演算法,這裡以第一版的來進行計算,第一版(21×21)的格式如下:
其中的只有黃色的是儲存資料的內容,在第一版本中只有217(21×21 - 8*9*3 -8)個儲存資料的數空間,而其中有用的資料是 217 - 1個資料結尾標誌 = 216 ,在216bit
216bit/8 = 27Byte 在版本一的QR碼中只能夠儲存27Byte的資料(要是有校正容錯就更少了),當然在不同的容錯層級下,容量也是有變化的。
所以,version為1的QR Code大概也就能容下十幾個字元。
四、二維碼的編碼
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 的編碼。
二、QRCode產生解析工具簡介
這個工具是用WPF基於ThoughtWorks.QRCode.dll開發的,沒有複雜的產生二維碼的演算法,無論你是新手還是大牛,都能看的懂。看到這裡有些使用過的ThoughtWorks.QRCode.dll的大牛們可能就失望了,不過研究二維碼產生的演算法確實需要學習很多的東西,還要參考很多的資料,大家有興趣的可以自己下載資料研究,下面給出了一些參考資料。下面來先來看看工具的:
介面很簡單,下面簡單來說明一下:
二維碼的內容:產生的二維碼內容,可以輸入任何的字串,比如網址之類的,支援中文。
二維碼尺寸:產生二維碼的大小,預設值為4,數字越大,產生的二維碼越大,可以根據需求填寫。
二維碼版本:二維碼的Version,值為1~40,version越高,二維碼資訊容量越大。但是目前30以上的版本產生的二維碼,由於手機網路攝影機等原因會造成手機無法識別。
產生:產生指定內容的二維碼,然後顯示在左下方的圖片框中。
儲存:儲存二維碼,將二維碼另存新檔png格式的圖片。
開啟二維碼:開啟二維碼圖片,顯示在左下方的圖片框中。
解析:解析左下方中圖片框中的二維碼,解析結果會顯示在二維碼內容後面。
自訂Logo:點擊添加圖片作為Logo,不添加則產生的二維碼中沒有Logo.
下面來產生一個二維碼看看吧,
然後我們添加一個Logo來看看吧,如:
由於Logo的尺寸可以自由調節,有時候Logo設定的過大,會覆蓋二維碼中的部分資訊,造成無法識別。這個時候,我們可以點擊解析按鈕,來測試我們的二維碼是否有效,
我們看到解析出來的內容出現了亂碼,這個就是因為我們的Logo尺寸太大了,我們可以減小Logo的尺寸或者增大二維碼的尺寸,這裡我修改二維碼尺寸為6,然後就可以正常識別了。然後我們點擊儲存按鈕,開啟另存新檔對話方塊,會儲存為png格式的圖片,實際生產的二維碼尺寸
下面我們來看一下解析二維碼,我們從百度上面隨便下載一個二維碼圖片,看看裡面儲存了什麼,
這裡我們可以滑鼠選擇文本複製,或者直接點擊複製到剪下板來複製二維碼的內容。
下面來說說一些Bug處理,首先要說的是二維碼的容量問題,Version為1的二維碼容量約為十幾個字元,超出容量就會出現下面錯誤,
當然,如果你隨便開啟一張無效的二維碼圖片當做二維碼來解析,會出現如下錯誤,
當然,如果圖片中含有二維碼還是可以解析成功的,
三、GitHub開源地址
Github地址:https://github.com/yunfeifei/QRCodeTools
當然,軟體還有很多要最佳化的地方,存在許多未知的Bug,後面會不斷修改更新。歡迎大家進行評測,指出bug和不足之處。經過測試,如果二維碼太大或者版本太高都會出現識別不了的情況,當然選擇合適的尺寸和版本還是正常使用的。
參考連結
二維碼的產生細節和原理
QR碼產生原理(一)
雲霏霏
QQ交流群:243633526
部落格地址:http://www.cnblogs.com/yunfeifei/
聲明:本部落格原創文字只代表本人工作中在某一時間內總結的觀點或結論,與本人所在單位沒有直接利益關係。非商業,未授權,貼子請以現狀保留,轉載時必須保留此段聲明,且在文章頁面明顯位置給出原文串連。
如果大家感覺我的博文對大家有協助,請推薦支援一把,給我寫作的動力。
[開源]C#二維碼產生解析工具,可添加自訂Logo