基本介紹
生成原理,推廣套用,類型分類,系統設計,二維碼識別,二維碼生成,
生成原理
二維碼其實就是由很多0、1組成的數字矩陣。二維條碼/二維碼 (2-dimensional bar code) 是用某種特定的幾何圖形按一定規律在平面(二維方向上)分布的黑白相間的圖形記錄數據符號信息的;在代碼編制上巧妙地利用構成計算機內部邏輯基礎的“0”、“1”比特流的概念,使用若干個與二進制相對應的幾何形體來表示文字數值信息,通過圖象輸入設備或光電掃描設備自動識讀以實現信息自動處理:它具有條碼技術的一些共性:每種碼制有其特定的字元集;每個字元占有一定的寬度;具有一定的校驗功能等。同時還具有對不同行的信息自動識別功能、及處理圖形旋轉變化等特點。 二維條碼/二維碼能夠在橫向和縱向兩個方位同時表達信息,因此能在很小的面積內表達大量的信息。
這個二維碼生成算法就是將組成二維碼的0、1數字矩陣進行組合,輸入二維碼生成器的信息不同,所得到的0、1數字矩陣組合也不相同,因此生成的二維碼樣式就各種各樣。
推廣套用
QR二維碼憑藉其高密度、容量大、糾錯能力強、安全性高等優 點,被人們廣泛套用於生活工作中。 本系統通過利用手機攝像頭進行二維碼圖像採集和手機處理器進行處理識別,克服了傳 統設備的價格高、體積大、攜帶不便等缺點。
二維碼和手機攝像頭以及二維碼和計算機的配合將產生多種多樣的套用,比如今後我們可以在自己的名片上印上二維碼,別人只需用安裝二維碼識別軟體的攝像手機輕鬆一拍,名片上的各種資料就全部輸入手機啦;如果超市的商品也印上二維碼,我們就可以在手機上獲得關於該商品的大量詳細信息。2011年初二維碼已經在日本和韓國獲得廣泛套用,台灣和大陸地區也已經開始推廣,今後我們可以用二維碼在自動販售機買可樂、繳費、網上購物等等,二維碼在我們以後的生活中將會越來越廣泛的套用。
類型分類
二維條碼/二維碼可以分為堆疊式/行排式二維條碼和矩陣式二維條碼。堆疊式/行排式二維條碼形態上是由多行短截的一維條碼堆疊而成;矩陣式二維條碼以矩陣的形式組成,在矩陣相應元素位置上用“點”表示二進制“1”, 用“空”表示二進制“0”,由“點”和“空”的排列組成代碼。
堆疊式/行排式二維碼
堆疊式/行排式二維條碼(又稱堆積式二維條碼或層排式二維條碼),其編碼原理是建立在一維條碼基礎之上,按需要堆積成二行或多行。它在編碼設計、校驗原理、識讀方式等方面繼承了一維條碼的一些特點,識讀設備與條碼印刷與一維條碼技術兼容。但由於行數的增加,需要對行進行判定,其解碼算法與軟體也不完全相同於一維條碼。有代表性的行排式二維條碼有:Code 16K、Code 49、PDF417等。
矩陣式二維碼
短陣式二維條碼(又稱棋盤式二維條碼)它是在一個矩形空間通過黑、白像素在矩陣中的不同分布進行編碼。在矩陣相應元素位置上,用點(方點、圓點或其他形狀)的出現表示二進制“1”,點的不出現表示二進制的“0”,點的排列組合確定了矩陣式二維條碼所代表的意義。矩陣式二維條碼是建立在計算機圖像處理技術、組合編碼原理等基礎上的一種新型圖形符號自動識讀處理碼制。具有代表性的矩陣式二維條碼有:Code One、Maxi Code、QR Code、 Data Matrix等。
在幾十種二維要碼中,常用的碼制有:G商通二維碼,PDF417二維條碼,Datamatrix二維條碼,Maxicode二維條碼,QR Code,Code 49,Code 16K,Code one等,除了這些常見的二維條碼之外,還有Vericode條碼、CP條碼、Codablock F條碼、田字碼、 Ultracode條碼,Aztec條碼。
QR Codeui也是一種二維碼,和傳統的一維碼(比如商品上的條形碼)不同,二維碼在橫縱兩個方向都存儲信息,因此信息容量大大提高。
系統設計
二維碼識別
系統先進行相機初始化並打開相機預覽界面,用戶將含有二維碼的圖像置於識別框內,系統間斷性地獲取一幀圖像,然後進行圖像預處理,主要有灰度化、中值濾波、二值化、定位旋轉等,最後調用解碼程式進行信息提取,返回顯示在手機上。流程圖如圖所示。其代碼流程主要為:調用CaptureActivity,開啟掃描,並在其中調用CaptureActivityHandler,啟動掃描執行緒DecodeThread和相機預覽界面,而在DecodeThread中的run()方法中調用DecodeHandler,DecodeHandler再調用MultiformatReader的decode()方法解碼捕獲圖像。相冊內部圖片識別和黑暗環境下識別,分別獲取手機外部存儲空間讀取許可權和閃光燈使用許可權,再通過調用相關Zxing內置函式和相關類似代碼即可實現功能。
二維碼生成
根據二維碼編碼的原理以及Zxing庫,將用戶輸入的文本內容通過調用Zxing庫中的方法MultiFormatWriter().encode(Stringcontents,BarcodeFormatformat,intwidth,intheight)將輸入的字元串文本轉換為BitMatrix格式(以bit位存儲二維碼數據),再通過相關編碼原理轉換成以Bitmap形式表示的圖片,最後顯示在手機螢幕上。若用戶需要保存,則通過File()、div.mkdir()和bitmap.compress()等方法對生成的二維碼圖像進行轉換壓縮寫入,最終在手機中存入按照規則命名的jpg格式的二維碼圖片。