使用 Python 生成二維碼

京东云开发者發表於2024-04-15

1、背景
上一次我們介紹了什麼是二維碼,讀過這篇文章以後,相信大家對二維碼已經有了一定的認識,那麼有沒有想過如何自己動手生成二維碼呢?二維碼在我們的生活與工作中,都能夠做什麼呢?今天我們來探討一下用 Python 如何生成二維碼。

2、使用哪些庫
Python 具有豐富的第三方庫,能夠生成二維碼的就有 qrcode 庫、segno 庫、pystrich 庫、myqr 庫。

其中 segno 是一個純 python 語言開發的二維碼和微二維碼生成器。常用的還有 qrcode 庫,功能也很豐富。pystrich 庫作者好久都沒有進行更新,不建議繼續使用。myqr 庫可以生成基本二維碼、彩色二維碼和動態二維碼。今天我們主要介紹 segno,它支援 python2.7 和 python3.5+,使用時請注意自己的 python 版本。其他模組感興趣的小夥伴可以自行探索一下。





3、如何安裝
安裝時與其他 python 模組一樣,使用 pip 命令安裝即可

安裝 segno 庫

pip insyall segno

指定版本安裝

pip insyall segno==0.3.2
•

4、如何使用
4.1、 segno 常見使用方法
方法 引數 說明
make_qr 內容 生成二維碼
make_micro 內容 生成微二維碼
make micro 生成二維碼,預設生成微二維碼
version 指定二維碼版本,預設為 1

error=‘級別’,boost_error=False 指定二維碼糾錯級別(L、M、Q、H),預設為 L 級別

mask 指定資料掩碼,預設為最佳掩碼

save 檔名稱與格式 將二維碼儲存為指定格式的檔案
border 指定二維碼邊框,為 None 時將使用預設值

scale 指定序列化縮放因子,預設為 1

dark=‘顏色’, light='顏色' 指定暗模組和亮模組的顏色

kind 儲存到流

4.2、 使用示例
4.2.1、 基本使用
import segno

因為 segno 不僅能夠生成二維碼,還能夠生成微二維碼,預設生成微二維碼,micro 為 False 將強制生成二維碼

qrcode = segno.make("Hello World!", micro=False)

或使用函式:segno.make_qr() 建立二維碼

qrcode = segno.make_qr("Hello World!")

注意:因為漢字模式不在 ISO/IEC 18004 範圍內,因此二維碼閱讀器並未廣泛支援它,在使用時應謹慎。

此外漢字模式不適用微二維碼。

qrcode = segno.make("你好!", micro=False, mode='hanzi')

檢視預設版本

print(qrcode.version) # 1

明確指定錯誤級別 L,不允許自動提高錯誤級別

qrcode = segno.make('Hello World!',
error='l', boost_error=False)
print(qrcode.designator) # 1-L

指定掩碼

qrcode = segno.make("Hello World!", micro=False, mask=1)
print(qrcode1.mask) # 1

儲存二維碼

qrcode = segno.save("Hello World.png") # 生成圖片

支援序列為其他格式儲存

qrcode.save('hello.svg') # svg 檔案
qrcode.save('hello.txt') # text 檔案

指定二維碼邊框

qrcode.save('hello_default.png', border=None) # 預設值
qrcode.save('hello_none.png', border=0) # 無邊框
qrcode.save('hello_big.png', border=5) # 大邊框

指定縮放因子

qrcode.save('hello.png', scale=10) # 1 模組大小 == 10 畫素
qrcode.save('hello.svg', scale=2.4) # svg 可以接受浮點值,png 賦值浮點值時,將會歸整為 2
// svg 格式
<?xml version="1.0" encoding="utf-8"?>

4.2.2、 進階使用
指定暗模組顏色

import segno

qrcode = segno.make_qr("Hello World!")

指定暗模組的顏色

qrcode.save("hello_color.png", dark="#ccc")



指定暗模組

指定暗模組和亮模組的顏色

import segno

qrcode = segno.make_qr("Hello World!")

指定暗模組和亮模組的顏色

qrcode.save('hello_color.png', dark='darkred', light='lightblue')
import segno
from PIL import Image # python 畫圖的庫

安裝:pip install pillow, m1 使用:arch -x86_64 pip3 install Pillow

qrcode = segno.make_qr("Hello World!")

儲存到流

buff = io.BytesIO()
qrcode.save(buff, kind='png', dark='darkblue', light='#eee')
buff.seek(0)
img = Image.open(buff).convert('RGB')
img_width, img_height = img.size
logo_max_size = img_height // 3 # logo 尺寸
logo_img = Image.open('./13.png') # logo 照片

調整 logo 大小

logo_img.thumbnail((logo_max_size, logo_max_size), Image.Resampling.LANCZOS)

計算二維碼中心位置

box = ((img_width - logo_img.size[0]) // 2, (img_height - logo_img.size[1]) // 2)

組合圖片

img.paste(logo_img, box)

儲存

img.save('qrcode_with_logo.png')
4.3、 使用場景
4.3.1、 快速連線 WIFI
from segno import helpers

wifi_settings = {
"ssid": '(wifi 名稱)',
"password": '(wifi 密碼)',
"security": 'WPA',
"hidden": False. # 是否是隱藏 wifi
}

wifi = helpers.make_wifi(wifi_settings)

注意:微信掃描時只能讀取資訊,使用手機自帶的二維碼相機掃描,能夠彈窗直接連線 wifi。

wifi.save("wifi.png", dark="yellow", light="#323524", scale=10)
4.3.2、 快速傳送郵件
from segno import helpers

qrcode = helpers.make_email(
to='email_address@jd.com', # 收件人,字串或者可迭代字串
cc='recipient_address@jd.com', # 抄送人,字串或者可迭代字串
subject='這是主題',
body='這是郵件內容'
)

qrcode.save("email.png", scale=10)
4.3.3、 快速新增聯絡人
from segno import helpers

vcard = helpers.make_vcard(
name='姓名', # 聯絡人姓名
email=('郵箱地址'), # 郵箱
url=['www.jd.com'], # 主頁
phone='400xxxxxxx' # 電話號碼
)

vcard.save('vcard.png', dark="#FF7D92", scale=10)



新增聯絡人

4.4 其他場景
•物品屬性標籤

•店鋪地址資訊

•緊急聯絡人資訊

•挪車二維碼

•等等

5、總結
至此,如何使用 python 生成二維碼,透過 segno 模組的介紹,我們可以快速的生成自己需要的二維碼,生活和工作中,我們都能根據自己的需要,生成二維碼,從而方便我們,使事情變得更加簡單,還有另外幾個二維碼庫沒有介紹,感興趣的小夥伴,可以自行學習一下。

相關文章