二維碼生成解析工具主要功能就是生成二維碼,并且可以添加自定義的Logo。當(dāng)然,網(wǎng)絡(luò)上面生成二維碼的工具多如牛毛,生成二維碼早已不再新鮮。這個(gè)工具的一個(gè)亮點(diǎn)就是可以識(shí)別二維碼,下面就來具體看看吧,不過首先要補(bǔ)充一點(diǎn)二維碼的知識(shí)。
二維碼的版本
首先,我們先說一下二維碼一共有 40 個(gè)尺寸。官方叫版本 Version。Version 1 是 21 x 21 的矩陣,Version 2 是 25 x 25 的矩陣,Version 3 是 29 的尺寸,每增加一個(gè) version,就會(huì)增加 4 的尺寸,公式是:(V-1)*4 + 21(V是版本號(hào)) 最高 Version 40,(40-1)*4+21 = 177,所以最高是 177 x 177 的正方形。
下面我們看看一個(gè)二維碼的實(shí)例:
QR碼的容錯(cuò)處理
二維碼支持糾錯(cuò)處理;糾錯(cuò)處理相對(duì)復(fù)雜,按照QR碼的標(biāo)準(zhǔn)文檔說明,QR碼的糾錯(cuò)分為4個(gè)級(jí)別,分別是:
level L : 最大 7% 的錯(cuò)誤能夠被糾正;
level M : 最大 15% 的錯(cuò)誤能夠被糾正;
level Q : 最大 25% 的錯(cuò)誤能夠被糾正;
level H : 最大 30% 的錯(cuò)誤能夠被糾正;
二維碼(QR Code)的容量
對(duì)于不同版本的二維碼,容量也是不同的。理論上內(nèi)容經(jīng)過壓縮處理后可以存7089個(gè)數(shù)字,4296 個(gè)字母和數(shù)字混合字符,2953個(gè)8位字節(jié)數(shù)據(jù),1817個(gè)漢字;在上面我們看到,不同的Version的QR Code是不同的矩陣,Version版本越過,也就意味著容量越大。關(guān)于容量的計(jì)算我沒有找到比較權(quán)威的算法,這里以第一版的來進(jìn)行計(jì)算,第一版(21×21)的格式如下:
其中的只有黃色的是存儲(chǔ)數(shù)據(jù)的內(nèi)容,在第一版本中只有217(21×21 - 8*9*3 -8)個(gè)存儲(chǔ)數(shù)據(jù)的數(shù)空間,而其中有用的數(shù)據(jù)是 217 - 1個(gè)數(shù)據(jù)結(jié)尾標(biāo)志 = 216 ,在216bit
216bit/8 = 27Byte 在版本一的QR碼中只能夠存儲(chǔ)27Byte的數(shù)據(jù)(要是有校驗(yàn)容錯(cuò)就更少了),當(dāng)然在不同的容錯(cuò)級(jí)別下,容量也是有變化的。
所以,version為1的QR Code大概也就能容下十幾個(gè)字符。
二維碼的編碼
QR 碼支持如下的編碼:
Numeric mode 數(shù)字編碼,從 0 到9。如果需要編碼的數(shù)字的個(gè)數(shù)不是 3 的倍數(shù),那么,最后剩下的 1 或 2 位數(shù)會(huì)被轉(zhuǎn)成 4 或 7bits,則其它的每 3 位數(shù)字會(huì)被編成 10,12,14bits,編成多長還要看二維碼的尺寸(下面有一個(gè)表 Table 3 說明了這點(diǎn))
Alphanumeric mode 字符編碼。包括 0-9,大寫的A到Z(沒有小寫),以及符號(hào)$ % * + – . / : 包括空格。這些字符會(huì)映射成一個(gè)字符索引表。如下所示:(其中的 SP 是空格,Char 是字符,Value 是其索引值) 編碼的過程是把字符兩兩分組,然后轉(zhuǎn)成下表的 45 進(jìn)制,然后轉(zhuǎn)成 11bits 的二進(jìn)制,如果最后有一個(gè)落單的,那就轉(zhuǎn)成 6bits 的二進(jìn)制。而編碼模式和字符的個(gè)數(shù)需要根據(jù)不同的 Version 尺寸編成9, 11 或 13 個(gè)二進(jìn)制(如下表中 Table 3)
Byte mode, 字節(jié)編碼,可以是0-255 的 ISO-8859-1 字符。有些二維碼的掃描器可以自動(dòng)檢測(cè)是否是 UTF-8 的編碼。
QRCode生成解析工具簡介
這個(gè)工具是用WPF基于開源項(xiàng)目ThoughtWorks.QRCode.dll開發(fā)的,沒有復(fù)雜的生成二維碼的算法,無論你是新手還是大牛,都能看的懂?吹竭@里有些使用過的ThoughtWorks.QRCode.dll的大牛們可能就失望了,不過研究二維碼生成的算法確實(shí)需要學(xué)習(xí)很多的東西,還要參考很多的資料,大家有興趣的可以自己研究一下ThoughtWorks.QRCode的源碼,下面給出了一些參考資料。下面來先來看看工具的截圖:
ThoughtWorks.QRCode源碼地址:http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library
界面很簡單,下面簡單來說明一下:
二維碼的內(nèi)容:生成的二維碼內(nèi)容,可以輸入任何的字符串,比如網(wǎng)址之類的,支持中文。
二維碼尺寸:生成二維碼的大小,默認(rèn)值為4,數(shù)字越大,生成的二維碼越大,可以根據(jù)需求填寫。
二維碼版本:二維碼的Version,值為1~40,version越高,二維碼信息容量越大。但是目前30以上的版本生成的二維碼,由于手機(jī)攝像頭等原因會(huì)造成手機(jī)無法識(shí)別。
生成:生成指定內(nèi)容的二維碼,然后顯示在左下方的圖片框中。
保存:保存二維碼,將二維碼另存為png格式的圖片。
打開二維碼:打開二維碼圖片,顯示在左下方的圖片框中。
解析:解析左下方中圖片框中的二維碼,解析結(jié)果會(huì)顯示在二維碼內(nèi)容后面。
自定義Logo:點(diǎn)擊添加圖片作為Logo,不添加則生成的二維碼中沒有Logo.
下面來生成一個(gè)二維碼看看吧,如圖:
然后我們添加一個(gè)Logo來看看吧,如下圖:
由于Logo的尺寸可以自由調(diào)節(jié),有時(shí)候Logo設(shè)置的過大,會(huì)覆蓋二維碼中的部分信息,造成無法識(shí)別。這個(gè)時(shí)候,我們可以點(diǎn)擊解析按鈕,來測(cè)試我們的二維碼是否有效,如圖:
我們看到解析出來的內(nèi)容出現(xiàn)了亂碼,這個(gè)就是因?yàn)槲覀兊腖ogo尺寸太大了,我們可以減小Logo的尺寸或者增大二維碼的尺寸,這里我修改二維碼尺寸為6,然后就可以正常識(shí)別了。然后我們點(diǎn)擊保存按鈕,打開另存為對(duì)話框,會(huì)保存為png格式的圖片,實(shí)際生產(chǎn)的二維碼尺寸如圖:
下面我們來看一下解析二維碼,我們從百度上面隨便下載一個(gè)二維碼圖片,看看里面保存了什么,如圖:
這里我們可以鼠標(biāo)選擇文本復(fù)制,或者直接點(diǎn)擊復(fù)制到剪切板來復(fù)制二維碼的內(nèi)容。
下面來說說一些Bug處理,首先要說的是二維碼的容量問題,Version為1的二維碼容量約為十幾個(gè)字符,超出容量就會(huì)出現(xiàn)下面錯(cuò)誤,如圖:
當(dāng)然,如果你隨便打開一張無效的二維碼圖片當(dāng)做二維碼來解析,會(huì)出現(xiàn)如下錯(cuò)誤,如圖:
當(dāng)然,如果圖片中含有二維碼還是可以解析成功的,如圖: