在我們日常生活中,二維碼現在非常普遍,移動支付、倉儲物流中廣泛使用,拿出PDA輕輕一掃即可解決我們生活中的很多問題,那么您真的了解二維碼的結構嗎?本文就讓達席耳工程師為大家介紹二維碼QR Code結構詳解,生成方式以及解碼策略分析:
二維碼QR Code結構詳解:
1.版本信息:version1(21*21),version2,...,version40,一共40個版本。版本代表每行有多少模塊,每一個版本比前一個版本增加4個碼元,計算公式為(n-1)*4+21,每個碼元存儲一個二進制0或者 1。1代表黑色,0表示白色。比如,version1表示每一行有21個碼元。
2:格式信息:存儲容錯級別L(7%),M(15%),Q(25%),R(35%)。容錯:允許存儲的二維碼信息出現重復部分,級別越高,重復信息所占比例越高。目的:即使二維碼被圖標遮住一部分,一樣可以獲取全部二維碼內容。有圖片的二維碼, 圖片不算二維碼的一部分,它遮住一部分碼元,但還是可以掃描到所有內容。
3.數據和糾錯碼字:實際保存的二維碼信息,和糾錯碼字(用于修正二維碼損壞帶來的錯誤,就是說當碼元被圖片遮住,可以通過糾錯碼字來找回)。
4.位置探測圖形、位置探測圖形分隔符、定位圖形,校正圖形:用于對二維碼的定位。位置探測圖形用于標記矩形大小,3個圖形確定一個矩形。定位符是因為二維碼有40個版本尺寸,當尺寸過大后需要有根標準線,不然掃描的時候可能會掃歪。
二維碼QR Code的生成
信息按照一定的編碼規則后變成二進制,通過黑白色形成矩形。
1、根據version和糾錯級別(糾錯碼的數量)編碼生成一個二進制序列,序列包含
編碼類型的二進制(數字類型,字符類型有特定的編碼) 編碼內容的長度的二進制 編碼內容的二進制 結束符(4個0)
2、將序列按8bits為一組重排,如果所有的編碼加起來不是8個倍數,還要在后面加上足夠的0。
3、補碼。如果序列還沒有達到大的bits數的限制,還要加一些補齊碼(Padding Bytes),Padding Bytes就是重復下面的兩個bytes:11101100 00010001。每種版本的bits的位數是不同的。
4、生成糾錯碼??梢圆榭次臋n的第30頁到44頁的Table-13到Table-22的定義表,可以知道生成糾錯碼的過程。
5、穿插放置。把數據碼和糾錯碼的各個8位一組的十進制數(codewords)交替放在一起。如何交替呢,規則如下:
對于數據碼:把每個塊的第一個codewords先拿出來按順度排列好,然后再取第一塊的第二個,如此類推。
對于糾錯碼:規則也是一樣。
然后按數據碼在前糾錯碼在后合并起來。
6、加上Reminder Bits,對于某些Version的QR,上面的還不夠長度,還要加上Remainder Bits,比如:5Q版的二維碼,還要加上7個bits,Remainder Bits加零就好了。關于哪些Version需要多少個Remainder bit,可以參看文檔的第15頁的Table-1的定義表。
7、按照一定規則進行掩碼,就是進行異或,分散數據,進行畫圖。
二維碼QR Code的解析
1、定位圖形:首先尋找探測圖形,就是二維碼上的三個方塊。這三個方塊的作用就是不管在哪個方向掃描圖形,都可以掃到,不信可以將手機翻轉測試一下。在通過二維碼上的定位圖形和分隔符確定二維碼信息的圖像。定位圖形確定二維碼符號中模塊的坐標,二維碼中的模塊都是固定的,包括校正圖形,版本信息,數據和糾錯碼。分隔符呢,就是將探測圖形與二維碼信息圖像分開。
2、灰度化二維碼信息像素:手機拍到的圖像都是彩色的,所以拍攝到二維碼也不列外,它也是彩色的,只不過除了黑白,其他顏色非常淺而已?;叶然侵竿ㄟ^顏色的深淺來識別二維碼,就是說顏色深的按深灰處理,淺色的按淺灰處理,去掉其他顏色。
3、去掉二維碼信息像素的噪點:相機的傳感器在把光線作為接收信號和輸出過程產生的粗糙像素,這些粗糙的像素是照片中不應該出現的干擾因素。噪點就是指這些粗糙的像素。
4、二值化二維碼信息像素:二值化是說將圖像上像素灰度值設置為0或者255,也就是變成只有黑白兩種顏色。第一步已經灰度化變成只有深灰和淺灰兩種顏色,現在二值化是將深灰變成黑色,淺灰變成白色。為什么變成黑白色呢。因為二維碼圖像其實是由二進制的0或者1組成,0代表白色,1代表黑色。二維碼在二值化時會將二維碼圖像變成只有黑白色的條碼,然后根據解析公式什么的(因為像素是0-255之間,要全部轉變成0或者255,估計得經過一些計算,然后0就是0,255變為1)轉化成二進制信息。
5、二維碼譯碼和糾錯:將得到的二進制信息進行譯碼和糾錯。得到的二進制信息是版本格式信息、數據和糾錯碼經過一定的編碼方式生成的,所以譯碼是對版本格式信息,數據和糾錯碼進行解碼和對比。糾錯是和譯碼同時進行的,將數據進行糾錯。