Python 批次生成 QR Code:一次過出幾百個二維碼,加 Logo、改顏色都得

香港唔少中小企,日日都要用到 QR Code(二維碼):餐廳每張枱要一個落單碼、網店每件貨要一個產品碼、活動要簽到碼、單張同卡片又要連去網站。問題係,好多老闆同同事都係逐個上網免費生成,一來慢,二來檔名亂到七彩,三來加唔到自己個 logo 或者公司顏色。如果一次過要出幾百個,真係做到手軟。

其實用 Python 加一個免費套件 qrcode,十幾行 code 就自動批量生成,仲可以加 logo、改顏色、按 Excel 名單命名。就算你未寫過 code,跟住做都識。

QR Code 係咩?點解要批量生成?

QR Code 本質上就係將一串網址或者文字,變成一格一格嘅黑白圖案,等手機鏡頭一掃就讀到。單獨一個唔難搞,上網搵個免費網站就得;但當你要「幾十間分店、每間一個碼」、「幾百件貨、每件一個碼」嘅時候,人手生成就完全唔掂——又慢、又易撈亂、又改唔到設計。

用程式生成就唔同:可以由一張 Excel 名單一次過讀齊,自動命名、自動排版、統一樣式,改顏色加 logo 都係改一行設定。之後無論加貨、加店,都只係加一行 Excel 再跑一次。

第一步:安裝工具

打開「命令提示字元」(cmd),裝兩個套件:qrcode 負責生成二維碼,Pillow 負責畫圖同貼 logo。

pip install "qrcode[pil]" pillow pandas openpyxl

(如果唔用 Excel 名單,pandas 同 openpyxl 可以唔裝。)

第二步:最簡單 —— 生成一個 QR Code

開一個新檔案 qr.py(記事本都得),貼入以下 code:

import qrcode img = qrcode.make("https://skyworldbiz.com") img.save("qrcode.png")

執行 python qr.py,同一個資料夾就會多咗張 qrcode.png,用手機一掃就開到個網址。qrcode.make() 幫你自動揀好晒所有設定,係最簡單嘅起手方式。

第三步:批量生成 —— 讀 Excel 一次過出幾百個

假設你有一張 Excel 叫 links.xlsx,有兩欄:name(例如貨品編號、分店名)同 url(要連去嘅網址)。喺同一個位置開一個 out 資料夾,再跑以下 code:

import qrcode, os import pandas as pd os.makedirs("out", exist_ok=True) df = pd.read_excel("links.xlsx") # 欄位:name, url for _, row in df.iterrows(): qr = qrcode.QRCode( error_correction=qrcode.constants.ERROR_CORRECT_H, # 最高容錯 box_size=10, border=4, ) qr.add_data(row["url"]) qr.make(fit=True) img = qr.make_image(fill_color="#1F2937", back_color="white") img.save("out/%s.png" % row["name"]) print("搞掂!共生成", len(df), "個 QR Code")

逐行解釋

  • pd.read_excel("links.xlsx") —— 讀入名單,一行一個 QR Code。
  • for _, row in df.iterrows() —— 逐行處理,row["url"] 攞網址、row["name"] 做檔名。
  • error_correction=ERROR_CORRECT_H —— 容錯等級最高(約 30%),就算二維碼有部分污糟,或者中間加咗 logo,都仲掃得到。
  • box_size=10 —— 每個方格 10 像素,數字愈大圖愈大愈清。
  • border=4 —— 四邊留白闊度(以方格為單位)。留白太少,好多掃描器會認唔到,唔好亂改細。
  • qr.add_data(...) 加 qr.make(fit=True) —— 塞入網址並自動揀最細嘅版本。
  • fill_color / back_color —— 改顏色,例如深灰字襯白底;記住深淺對比要夠。
  • img.save("out/%s.png" % row["name"]) —— 用名單嘅名做檔名,一目了然。

第四步:加公司 Logo 落中間

想二維碼中間有個 logo,靚啲又易認?記住第三步一定要用最高容錯(H),先有空間遮住中間。喺 code 尾部加以下幾行:

from PIL import Image # 假設 img 已經係上面生成好嘅 QR Code img = img.convert("RGB") # 轉做 RGB 先貼到彩色 logo logo = Image.open("logo.png") size = int(img.size[0] * 0.2) # logo 佔 20% 大細 logo = logo.resize((size, size)) pos = ((img.size[0] - size) // 2, (img.size[1] - size) // 2) img.paste(logo, pos) # 貼正中間 img.save("qrcode_with_logo.png")

記住 logo 唔好大過二維碼嘅 25%,太大會遮住太多方格,搞到掃唔到。出完圖,一定要用真手機試掃一次先拿去印。

香港中小企實際應用場景

  • 餐廳/茶餐廳 —— 每張枱一個碼,客人掃一掃睇餐牌、自助落單。
  • 零售/網店 —— 每件貨一個碼,連去產品介紹、保養登記或優惠。
  • 活動/展覽 —— 簽到碼,參加者掃一掃即報到,唔使排隊簽名。
  • 市場推廣 —— 單張、海報、卡片上一掃即開網站或者 WhatsApp 對話。
  • 內部管理 —— 設備/貨架貼碼,掃一掃即睇維修記錄或庫存。

舉個實例:一間有 200 件貨品嘅網店,如果要人手逐個上網生成、改檔名、下載,大概要花 3 至 4 個鐘;用上面個 script,跑一次幾秒就出齊 200 個,檔名仲整整齊齊。

實用五個貼士

  • 容錯揀 H(30%) —— 預留最多空間,加 logo 或者印刷稍有偏差都仲掃得到。
  • 白邊(border)唔好少過 4 —— 唔夠白邊,好多掃描器認唔到。
  • 顏色要夠對比 —— 深色碼襯淺色底最穩陣;反過嚟用淺色碼襯深色底,部分舊手機會掃唔到。
  • Logo 唔好大過 25% —— 遮太多格會令容錯失效。
  • 印之前一定要試掃 —— 出圖後用真手機前後鏡頭各掃一次,確認冇問題先落單印刷。

總結

Python 教學:用十幾行 code,就將「逐個上網生成 QR Code」呢啲重複功夫完全自動化——由一張 Excel 名單,幾秒出齊幾百個二維碼,仲可以統一樣式、加 logo、改顏色。無論係餐牌、貨品標籤、活動簽到定宣傳單張,都可以慳返大量時間,出嚟嘅成品又整齊專業。下一步仲可以喺 code 度加入 Pillow 排版,將幾十個碼一次過砌成一張 A4 貼紙 PDF,直接交俾印刷廠。