1. 程式人生 > >qrcode生成一個帶有圖片的二維碼

qrcode生成一個帶有圖片的二維碼


import qrcode
 
 
qr = qrcode.QRCode(
    version=2,
    error_correction=qrcode.constants.ERROR_CORRECT_L,
    box_size=10,
    border=1
)
qr.add_data("http://jb51.net/")
qr.make(fit=True)
img = qr.make_image()
img.save("dhqme_qrcode.png")

引數 version 表示生成二維碼的尺寸大小,取值範圍是 1 至 40,最小尺寸 1 會生成 21 * 21 的二維碼,version 每增加 1,生成的二維碼就會新增 4 尺寸,例如 version 是 2,則生成 25 * 25 的二維碼。

引數 error_correction 指定二維碼的容錯係數,分別有以下4個係數:

1.ERROR_CORRECT_L: 7%的字碼可被容錯
2.ERROR_CORRECT_M: 15%的字碼可被容錯
3.ERROR_CORRECT_Q: 25%的字碼可被容錯
4.ERROR_CORRECT_H: 30%的字碼可被容錯

引數 box_size 表示二維碼裡每個格子的畫素大小。

引數 border 表示邊框的格子厚度是多少(預設是4)。

執行上面程式碼會生成敝站的一個 QR Code:

生成帶有圖示的二維碼

二維碼的容錯係數(上面所指的 error_correction)越高,生成的二維碼則可允許的殘缺率越大,且二維碼的資料主要儲存在圖片的四個角上,所以在二維碼中間放一個小圖示,對二維碼的識別也是不受多大影響的。

對於插入在二維碼上的圖示大小,這裡指定限制圖示的大小尺寸最大是二維碼長寬的 1/4,以免殘缺太大,影響識別。

最後結合 Python 影象庫(PIL)的操作,把圖片黏貼(paste)在二維碼圖片的中間,便可以生成一個帶有圖示的二維碼,具體操作程式碼如下:

複製程式碼 程式碼如下:
import Image
import qrcode
 
 
qr = qrcode.QRCode(
    version=2,
    error_correction=qrcode.constants.ERROR_CORRECT_H,
    box_size=10,
    border=1
)
qr.add_data("http://jb51.net/")
qr.make(fit=True)
 
img = qr.make_image()
img = img.convert("RGBA")
 
icon = Image.open("favicon.png")
 
img_w, img_h = img.size
factor = 4
size_w = int(img_w / factor)
size_h = int(img_h / factor)
 
icon_w, icon_h = icon.size
if icon_w > size_w:
    icon_w = size_w
if icon_h > size_h:
    icon_h = size_h
icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS)
 
w = int((img_w - icon_w) / 2)
h = int((img_h - icon_h) / 2)
img.paste(icon, (w, h), icon)
 
img.save("dhqme_qrcode.png")