隨著信息化的發展及智能移動終端的普及,人們對于信息的承載、傳播、訪問的便捷性、快速性等需求進一步提高,二維碼是一種二維的條碼,相比于一維條碼只在水平方向上存儲有限信息,二維碼因為具有字符容量大、支持糾錯處理、編解碼速度快、信息承載量高、成本低廉、系統依賴度低等優點應運而生,其表示范圍不僅包括數字、英文、漢字甚至聲音、圖像等信息都能承載,因此二維碼在數據訪問、工業生產、流程跟蹤、移動支付、數據下載、電子憑證等領域廣泛使用。2017年7月由中國物品編碼中心牽頭起草的GB/T 33993-2017《商品二維碼》國家標準正式發布,標準規定了商品二維碼的數據結構、信息服務和符號印制質量標準,對二維碼的推廣、應用、管理等提供了重要的指導作用。二維碼的廣泛使用為人們的日常生活提供了極大的便利,是打通國民經濟線上與線下的重要渠道,因此針對二維碼的研究及實現具有重要意義。
QR碼
典型的QR碼如圖1所示,主要分為功能區與編碼區。定位區是”回”字形黑白框,至少且只需要三個定位區即可確定一個矩形位置及其大小,并且QR碼內不可能再出現與定位區相同形狀的圖案,同時分割區對定位區與編碼區進行分離以確保定位準確,快速準確的定位是QR碼能高速讀取的關鍵。定位圖形是一條單位為1個碼寬的黑白間隔條帶,起到標識橫豎坐標系及表明二維碼密度的作用。矯正區是較小的”回”字形黑白框,根據二維碼碼形的大小,矯正區存在數量不等,在印刷面不平整或拍照有畸變時起到矯正QR碼的作用。格式信息表示QR碼的糾錯級別分別是L、M、Q、H,糾錯能力分別是7%、15%、25%、30%。數據區使用8個黑白的二進制網格作為一個字節編碼數據內容,理論上QR碼的最大容量可達到7089個數字字符或4296個字母字符或2593個8位字節字符或1817個日本漢字、中國漢字字符,QR碼能夠編碼漢字也是其在中國廣泛使用的原因之一。
圖1
編碼實現
利用C#生成二維碼首先要添加對QRCoder的引用,使用其中的三個類,分別是生成二維碼存儲對象的QRCodeGenerator類,設置二維碼內容、容錯信息、版本等編碼格式或內容的QRCodeData類,及負責生成二維碼的QRCode類。
string coders = "http://www.xzcit.edu.cn/";//需要生成二維碼的內容
string filePath = @"F: \二維碼\";//二維碼圖片保存的路徑
string fileName = filePath + System.Guid.NewGuid() + ".jepg";//二維碼存儲圖片的命名
QRCoder.QRCodeGenerator qg = new QRCoder. QRCodeGenerator();//生成二維碼存儲對象
QRCoder.QRCodeData qd = qg.CreateQrCode(coders,QRCoder.QRCodeGenerator.ECCLevel.Q);
//設置版本信息,這里只做最簡單的二維碼內容設置和容錯級別
QRCoder.QRCode qrcod = new QRCoder.QRCode(qd);
Bitmap qrCodeImage = qrcod.GetGraphic(30);//像素的大小
qrCodeImage.Save(fileName, ImageFormat.Jpeg);//圖像存儲
以上是最簡易的二維碼實現方法,首先將一個網址作為二維碼的內容,規定二維碼生成的圖片存放的路徑,然后使用QRCodeGenerator創建二維碼的存儲對象,最后設置Q級的糾錯和像素大小就可以將網址信息生成一幅二維碼圖像。
實際使用中GetGraphic有4個重載函數,參數最多的一個定義為public Bitmap GetGraphic(int pixelsPerModule,Color darkColor,Color lightColor,Bitmap icon = null,int iconSizePercent = 15,int iconBorderWidth = 6,bool drawQuietZones = true);可見GetGraphic函數返回的直接就是Bitmap類型在Windows系統中標準的圖像文件格式,GetGraphic函數能夠設置二維碼的像素大小、深色域顏色、淺色域顏色、添加企業logo圖片等,在設置logo時會對二維碼產生一定程度的覆蓋,由于有糾錯碼的存在,在最大H級,logo覆蓋不大于30%的情況下仍然能正確識讀,如果在L級,遮蓋范圍必須控制在7%以內。
如圖2和圖3是深色域設置為紅色、淺色域設置為黃色的二維碼,區別在于圖2是H級別的糾錯,圖3是Q級別的糾錯,從圖中可見,Q級別下的二維碼比H級別的圖形含有更多糾錯碼因而碼字更加密集。在logo圖片大小相同情況下圖2可正確識讀,圖1無法讀取。
個性設置
在傳統一維條碼的基礎上增加綠色與藍色,根據顏色的順序滿足特定的算法來增加一個信息維度,從而實現每件商品ID號的確定,這種條碼稱之為彩虹碼。在二維碼中已有學者通過顏色的不同產生更多數據位的信息,在QR碼中彩色碼僅存在于編碼區,由于編解碼及掃碼器可讀性的限制并未廣泛使用,在視覺上影響不大,只是為了擴大二維碼的數據容量。受彩虹碼的啟發我們可以制作通過顏色突出標識的個性化二維碼,來增加人們感官上的視覺效果,這種二維碼也被稱為視覺二維碼。視覺二維碼的色彩、圖案、形狀等表現的越豐富其視覺沖擊力也越強,但不應該影響正常的識讀。
如圖4是將二維碼中黑色像素點設置為心形圖案,是對二維碼前景色的改變。圖5是將白色像素點設置為企業LOGO圖案,改變的是二維碼的背景色。圖6是以個人照片為底色的二維碼,需要注意的是頭發顏色與前景色相近會對識讀產生影響,圖7是異形二維碼,異形二維碼僅僅是改變了二維碼的外圍形狀,其本質與普通二維碼并無差別。無論何種情況,都不應影響二維碼的正常識讀。
二維碼是信息技術的產物,因其編碼范圍廣、成本低、易制作、信息容量大等優點在國民經濟各個領域被廣泛使用,如今二維碼已成為連接線上線下的關鍵入口。本文介紹了QR碼的相關規范,介紹了定位區、矯正區和數據區。給出了一種C#實現二維碼的編碼方法,對二維碼的前景色、背景色、LOGO覆蓋與二維碼糾錯之間關聯做了實驗。并介紹了二維碼的個性化設置,編碼實現了對二維碼的前景圖案、背景圖案的修改以及異形二維碼的實現,二維碼的視覺表現更加豐富。
在二維碼廣泛使用的今天,我們要清醒的認識到二維碼的本質是字符串,如果這個字符串是某個鏈接,二維碼就變成了訪問入口,因其不具有肉眼可讀性,不法分子會利用二維碼傳播病毒、木馬或偽裝支付的釣魚網站。因此我們要加強警惕,在完成生活便捷性的同時,注重使用的安全性。
(作者單位:徐州工業職業技術學院)
《中國自動識別技術》2019年第5期總第80期
參考文獻
[1]陳炯. QRcode編解碼技術的研究與實現[D].西安電子科技大學,2012.
[2]羅秋科.推進二維碼開放應用 共享全球數據 實現互聯互通[J].條碼與信息系統,2018(05):9-15.
[3]何秋蓉,孫遠明,毛宜軍,古萬榮,梁早清.新的柱形二維條碼生成方法及應用[J].計算機應用,2018(S2):317-320.
[4]武平平,秦曉輝,于希波.二維碼:O2O模式中的“高速通道”[J].條碼與信息系統,2018(05):16-17.
[5]中國物品編碼中心二維碼技術與應用第一版北京:中國標準出版社.2001
[6]楊毅,王嘉.彩虹碼的彩色從哪里來?[J].條碼與信息系統,2018(05):46-47.
[7]陳元枝,鄧艷,史紹亮,姜文英.基于Gzip壓縮算法的彩色QR碼生成與識別方法[J].電子技術應用,2015,41(12):116-119+128.
[8]趙曉瓊. 基于異形二維碼的商業防偽研究與實現[D].西安理工大學,2018.