如何製作 QR Code #1:基本介紹
本文著重於介紹 QR Code 的各個組成部分(如版本、容錯等級),並補充一些自己的心得,主要為規範名詞使用,並不會涵蓋 QR Code 的歷史或應用方式等在網路上唾手可得的資訊。
對 QR Code 之技術細節有興趣者,請點擊下方連結以取得更多深入的資訊,Yeecy 相信讀者能從中可以得到滿意的說明。
首先,簡略提一下 QR Code 的產生和解碼流程,相關名詞會在下方 QR Code 的組成中解釋,並附有英文對照。
流程中的超連結會轉跳到相關文章,有需要的讀者可以善加利用。
QR Code 的產生流程
- 輸入原始訊息
- 選擇編碼模式
- 根據編碼模式與容錯等級,選擇使用的版本
- 使用原始訊息、編碼模式和版本,生成編碼後訊息
- 按照版本與容錯等級,產生編碼後訊息的錯誤校正碼
- 進行一些步驟,產生含 4. 和 5. 的最終訊息
- 根據版本,放置功能圖案
- 根據版本,增加版本資訊
- 根據容錯等級和遮罩,添加格式資訊
- 使用之字形排放 6. 的最終訊息
- 套用資料遮罩
- 根據規則挑選最優遮罩
- 添加靜默區域
- 完成圖片生成
QR Code 的解碼流程
- 讀取圖片,若圖片本身為 QR Code 產生器產生的圖片,則跳至 5.
- 辨識 QR Code 位於圖片中的位置
- 使用透視變換提取出 QR Code
- 重新採樣 QR Code
- 去除靜默區域
- 將原圖縮小至最小可能的尺寸
- 讀取格式資訊
- 修復格式資訊
- 由格式資訊獲得容錯等級和遮罩
- 讀取版本資訊
- 修復版本資訊
- 配合版本資訊確定版本
- 使用之字形讀取編碼區域
- 利用錯誤校正碼修正編碼後資料
- 讀取編碼模式和其他解碼必要訊息
- 解碼資料
- 獲得原始訊息
QR Code 的組成
碼元(module)
組成 QR Code 的基本單位是碼元,為正方形的黑白格子,其中黑色的格子表示數字 1,而白色的格子表示數字 0。
版本(version)
QR Code 一共有 40 個版本,最小的版本 1 可以乘載 21×21 = 441 個碼元,每多一個版本,其邊長各會增加 4 個碼元,由此我們不難算出版本 40 總共包含 177×177 = 31329 個碼元。
定位圖案(position pattern)
定位圖案可說是 QR Code 最令人印象深刻的特徵,每個 QR Code 上必定會有 3 個回字形的定位圖案,每個圖案都有著 1 : 1 : 3 : 1 : 1(黑:白:黑:白:黑)個碼元,是辨識 QR Code 時最重要的圖案。
分隔圖案(separator pattern)
分隔圖案簡單來說,就是位在定位圖案旁邊的連續白色碼元,為定位圖案的護城河,使定位圖案能與其他圖案分隔出來。
黑色碼元(dark module)
所有版本 QR Code 中都有,位於下方分隔圖案旁邊的黑色碼元,小小一個很可愛,但跟盲腸一樣沒有什麼用處,就只是佔個位子而已。
對齊圖案(alignment pattern)
除了版本 1 的 QR Code 外,其餘版本都需要加上對齊圖案,對齊圖案的個數依版本會有所不同,但樣式是確定的,每個對齊圖案皆有 1 : 1 : 1 : 1 : 1(黑:白:黑:白:黑)的碼元。
至於為何需要對齊圖案呢?我的猜想是當圖片中的 QR Code 並非處於一個平面(如寶特瓶的表面)時,對齊圖案可以用來作為修正 QR Code 形變的參考。
定時圖案(timing pattern)
定時圖案是所有版本 QR Code 都有,由一連串黑白相間的碼元所形成的直線,共兩條。
事實上我不確定這圖案的用處,我只想到兩種需要它的理由,一是因為定時圖案的變化是規律的,所以能用來確定一個碼元所佔的像素大小,二是可以用來定位版本資訊,理由下方會提到。
版本資訊(version information)
在版本 7 以上的 QR Code,需要在兩個位置放上長 18 碼元,以長方形放置的版本資訊,詳細內容請閱讀《如何製作 QR Code #7》。
由於版本資訊位於 QR Code 的邊緣到定時圖案之間,所以我才會在前面提到定時圖案可以用來定位版本資訊。
容錯等級(error correction level)
在 QR Code 中一共有 4 種容錯等級 L、M、Q 和 H,分別對應 4 種不同的容錯能力 7%、15%、25% 和 30%,當然,這些都是理論的最大值。
我們之所以會看到有些人在 QR Code 上增加自己的圖案,卻不會導致無法讀取的原因,正是因為 QR Code 能夠容忍錯誤發生。不過隨著容錯等級的增加,在相同版本下我們能儲存的資訊就會相對變少。
格式資訊 (format information)
所有版本的 QR Code 都需要加入格式資訊,格式資訊包含容錯等級和遮罩樣式,長 15 個碼元,共放置兩份在 QR Code 上,請閱讀《如何製作 QR Code #8》以取得更多說明。
結語
以上為 QR Code 各個組成部分的解說,通常我們把前述圖案(不含版本和格式資訊)統稱為功能圖案(function patterns),而剩下的版本資訊、格式資訊和尚未填入碼元的區域統稱為編碼區域(encoding region)。
下一篇文章將會探討 QR Code 標準中的四種基本編碼模式:Numeric、Alphanumeric、Byte 和 Kanji。
感謝你的閱讀,我是 Yeecy,我們下次見。