二維碼生成完全指南:原理、批次生成與藝術二維碼

工具教程

二維碼已經無處不在,但你真的會做嗎

掃碼點餐、加微信、連 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=HiSMSTO: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 去疊海報)可以參考圖片格式轉換指南

本站提供瀏覽器本地工具,免註冊即可試用 →

#二维码#QR Code#批量生成#艺术二维码#Wi-Fi二维码#隐私