二維碼生成完全指南:原理、批次生成與藝術二維碼
二維碼已經無處不在,但你真的會做嗎
掃碼點餐、加微信、連 Wi-Fi、開發票、付錢——二維碼早就滲進了日常。可一旦輪到「我要生成一個碼」,很多人就隨便搜個網站,出來的圖要么醜、要么手機湊近了也掃不開,還隱隱擔心:這東西會不會把我填的內容傳走了?
我們在做工具庫的二維碼工具這幾年,收到最多的問題不是「怎麼生成」,而是「為什麼我生成的碼掃不動」。這篇文章把二維碼的門道講透,讓你做出來的碼既好看又一定掃得開。
如果你只想快點生成一個普通碼,直接去二維碼生成器;但想搞懂原理、避免翻車,下面值得讀。
二維碼到底是啥:一個被低估的工程傑作
二維碼(QR Code,Quick Response)是 1994 年日本 Denso Wave(豐田旗下)為了追蹤汽車零件發明的。它最牛的地方在於高速識讀——相比一維條碼,它能在任意方向、部分毀損的情況下被手機攝影機瞬間解析。
那一個個小方塊叫「模組(module)」,整張圖由黑白模組組成。關鍵結構有這幾塊:
| 結構 | 位置 | 作用 |
|---|---|---|
| 定位圖案(Finder) | 三個角的大方塊 | 攝影機判斷碼的位置、大小和角度 |
| 校正圖案(Alignment) | 右下角附近的小方塊 | 校正大尺寸碼在曲面/變形下的失真 |
| 定時圖案(Timing) | 橫豎各一條 | 確定模組座標網格 |
| 格式資訊 | 定位圖案旁 | 存糾錯等級和遮罩 |
| 資料區 | 中間大片 | 真正編碼的內容 |
| 靜區(Quiet Zone) | 四周留白 | 幫攝影機找到邊界 |
幾個關鍵數字:
- 版本 1–40:決定容量。版本 1 是 21×21 模組,每升一版邊長加 4 個模組,版本 40 是 177×177。版本越高,能塞的資訊越多,碼也越密。
- 編碼模式:數字模式(0–9)最省空間,其次是字母數字(A–Z、0–9 和少量符號),再是位元組(中文、emoji、二進位走這裡,最費空間)。
- 糾錯碼:這是二維碼最聰明的地方——用 Reed-Solomon 編碼,即使被污損、遮擋一部分,也能把資訊還原出來。
冷知識:QR Code 的基礎專利早已公開免費,Denso Wave 主動放棄了收費權,這也是它能全球普及的原因之一。
Reed-Solomon 糾錯:為什麼髒了也能掃
簡單理解,Reed-Solomon 會在原始資料後面「附加一段冗餘校驗塊」。假設原始資料是 100 個模組,糾錯等級 H 會額外塞進約 30 個模組的冗餘。手機掃到碼時,即使這 30 個模組裡有部分被咖啡漬蓋住,演算法也能靠剩餘的資訊把整段內容數學還原回來。
這就是為什麼同樣是「被遮住一塊」,有的碼還能掃、有的直接廢——關鍵在糾錯等級設得夠不夠高。
真正決定「掃不掃得開」的四件事
很多人以為碼掃不開是手機問題,其實多半是生成時埋的雷。
1. 糾錯等級 L / M / Q / H
| 等級 | 可恢復面積 | 模組密度 | 適用 |
|---|---|---|---|
| L | 約 7% | 最稀 | 印刷乾淨、不會被碰的環境 |
| M | 約 15% | 適中 | 絕大多數場景(預設推薦) |
| Q | 約 25% | 偏密 | 會貼在戶外、易髒的地方 |
| H | 約 30% | 最密 | 碼上要疊 logo、長期戶外 |
經驗值:日常用 M 就夠了。要往碼中間放 logo,至少提到 Q;戶外長期暴露或要在碼上做藝術處理,用 H。
2. 靜區(Quiet Zone)
碼四周必須留一圈空白,標準是至少 4 個模組寬。很多人把碼貼到海報邊緣、塞進窄邊框,結果攝影機找不到邊界,死活掃不開。留白比你想的重要——寧可多留,別貼邊。
3. 對比度
前景深、背景淺,這是鐵律。淺灰底配白字、或者用低對比的品牌色,手機在稍微反光的環境下就抓瞎。最穩的是黑模組 + 白底。
4. 塞進去了多少內容
URL 幾十個字元還好,你要是往裡塞一整段自我介紹(vCard 全欄位),版本直接飆到很高,模組密到小螢幕手機拉不遠就掃不動。內容越短,碼越穩。能用短連結就用短連結。
5. 列印尺寸與掃描距離
一個常被忽略的關係:最小列印邊長 ≈ 掃描距離 ÷ 10。比如使用者要隔著 30cm 掃,碼至少得印到 3cm 見方;戶外廣告要隔 2 米掃,碼得有 20cm 以上。模組太小,再高的糾錯也救不回來。
不同用途,寫法不一樣
-
網址:直接放
https://example.com就行,別加多餘文字。能短鏈就短鏈。 -
純文字:一句標語、一段說明,短一點。
-
Wi-Fi:格式是
WIFI:S:網路名;T:WPA;P:密碼;;。手動拼容易錯(特殊字元要轉義),直接用Wi-Fi 二維碼工具,客人掃一下就連上,不用口述密碼。 -
電子名片 vCard:適合放在履歷、郵件簽名裡。完整格式範例:
BEGIN:VCARD VERSION:3.0 N:張;三;;; FN:張三 TEL;TYPE=CELL:13800000000 EMAIL:zhangsan@example.com ORG:某某公司 END:VCARD欄位別太多,否則版本飆升、碼變密。
-
郵件 / 簡訊:
mailto:someone@example.com?subject=Hi和SMSTO:13800000000:內容,掃完直接跳到對應 App。 -
地理位置:
geo:39.9042,116.4074,地圖 App 會直接定位。
批次生成:當你要做一百個
有些場景真不是做一個兩個:
- 活動入場券,每人一個專屬碼
- 商品溯源,每個批次一個碼
- 餐廳桌號、會議桌籤、設備資產管理標籤
一個個點開網頁手敲,做到第三個就想砸鍵盤。我們的工具支援把一批內容一次性生成,匯出圖片或打包下載,幾分鐘搞定上百個。單張二維碼適合隨手做,批次需求就用它的批次模式——把清單(每行一個連結/文字)貼進去,一鍵出圖。
實戰:給 100 件商品做溯源碼
準備 CSV:每行 = 一個商品連結
→ 貼進批次模式
→ 選糾錯等級 Q(倉儲環境易髒)
→ 統一尺寸 300×300,匯出 ZIP
→ 印廠直接上版
藝術二維碼:好看也不能犧牲可掃
品牌物料上放一個死板的黑方塊,設計同學會皺眉。這時候藝術二維碼工具就派上用場:圓點樣式、漸層配色、中心 logo、自訂前景背景色,都能做。
但「藝術」和「能掃」之間有一條線,踩過去就翻車:
- 別把 logo 蓋在三個定位角上:那三個大方塊是攝影機定位用的,遮住一個就大概率掃不出。logo 放正中央,避開三角。
- 對比度不能丟:漸層再好看,前後景也得拉得開(深色模組 + 淺色底)。
- 糾錯等級調高:藝術化處理本身會干擾識別,糾錯提到 Q 或 H 更穩。
- 別用淺色當模組:淺灰模組在白底下基本掃不出,堅持深色前景。
開發者:用程式碼生成
Python 的 qrcode 函式庫就能控制大部分參數:
import qrcode
qr = qrcode.QRCode(
version=None, # 自動選最小版本
error_correction=qrcode.constants.ERROR_CORRECT_H, # 高糾錯,為 logo 留空間
box_size=10,
border=4, # 靜區,至少 4
)
qr.add_data("https://example.com")
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save("qrcode.png")
JavaScript 側,qrcode 函式庫在瀏覽器/Node 都能跑,工具庫的二維碼工具底層也是同類邏輯,差別是全程本地、不上傳。
反過來:手裡有碼圖,想讀出內容
不是只有生成,有時候你拿到一張二維碼截圖,想知道它到底指向哪。用二維碼辨識工具傳圖就能解析出裡面的文字或連結,不用拿手機對著螢幕掃。它同樣在本地用攝影機/影像辨識演算法跑,圖不離開瀏覽器。
靜態碼 vs 動態碼
這裡有個容易混淆的概念:
| 類型 | 原理 | 能否改內容 | 能否統計 |
|---|---|---|---|
| 靜態碼 | 內容直接編碼進圖 | ❌ 改了就得重新生成 | ❌ |
| 動態碼 | 圖裡只存一個短連結,跳轉到後台設定的真實位址 | ✅ 可隨時改 | ✅ 可統計掃描量 |
工具庫的二維碼工具生成的是靜態碼——沒有後台、不依賴任何服務、永久有效、完全隱私。如果你需要「改了內容老碼還能用」或掃碼統計,那是另一套帶伺服器的方案,不在本地工具範疇。
隱私這件事
生成二維碼本質是把一段文字編碼成圖,不需要任何伺服器參與。工具庫的二維碼工具全程在瀏覽器本地算,你填的網址、密碼、名片資訊都不會上傳。尤其是 Wi-Fi 碼裡含明文密碼,本地生成才安心——你肯定不想把家裡 Wi-Fi 密碼發到某個陌生伺服器上再生成碼。
常見錯誤一覽
| 錯誤 | 後果 | 正確做法 |
|---|---|---|
| 碼貼到邊緣、沒有留白 | 掃不開 | 四周留 ≥4 模組空白 |
| 淺色底配淺色字 | 識別慢甚至失敗 | 深前景、淺背景 |
| logo 蓋住定位角 | 完全掃不出 | logo 放中心,避開三角 |
| 往裡塞一整段長文 | 模組太密,小螢幕掃不動 | 用短連結,內容精簡 |
| 糾錯等級太低又 overlay | 一髒就廢 | 要疊圖就提到 Q/H |
| 列印太小 | 隔遠了掃不動 | 邊長 ≥ 掃描距離 ÷ 10 |
常見問題
糾錯等級越高越好嗎? 不是。越高越密、同等內容下碼越大,列印出來才划算。日常 M 足夠,疊 logo 或戶外才需要 Q/H。
藝術二維碼會不會容易掃不開? 只要保住定位角、對比度和足夠糾錯等級,手機一樣秒掃。翻車的都是在這三點上省了功夫。
二維碼能存多少? 理論最大約 7089 個數字 / 4296 個字母 / 2953 個位元組(版本 40 + L)。但實話說,塞這麼多基本掃不動,實際用別超過幾百字元。
生成的碼會失效嗎? 不會。靜態二維碼是靜態圖,不依賴任何服務,生成後永遠有效——除非你列印的紙壞了。
能不能做成圓形/異形還能掃? 圓點樣式可以(模組形狀改了,定位圖案保留即可);但砍掉角落或破壞定位圖案的「異形」基本掃不出。藝術化處理要守住三條底線。
一句話決策
要做二維碼?
├── 普通連結 / 文字 → /encode/qr
├── 讓客人連 Wi-Fi → /encode/wifi-qr
├── 要品牌感、好看 → /utils/art-qr(糾錯提到 Q 以上,logo 避開三角)
├── 要做一百個 → /encode/qr 的批次模式
└── 手裡有碼圖要讀內容 → /encode/qr-decode
下次要做碼,先想清楚用途,照著上面的分支選工具,十分鐘就能交付一批既漂亮又一定掃得開的碼。相關圖片格式的處理(比如把碼匯出成透明 PNG 去疊海報)可以參考圖片格式轉換指南。
本站提供瀏覽器本地工具,免註冊即可試用 →