002-qrcode 生成二維碼

生成二維碼

https://pypi.org/project/qrcode/
https://github.com/lincolnloop/python-qrcode
https://www.cnblogs.com/sfnz/p/5457862.html
https://www.liaoxuefeng.com/wiki/897692888725344/966759628285152

qrcode 可以生成普通二維碼帶 logo 的二維碼
qrcode 生成的二維碼相比 myqr 生成的二維碼相對美觀。

例1:簡單示例

import os
import qrcode

filepath = os.path.join(os.getcwd(),'dir','test.png')

# qrcode.make(str):將數據編譯成二維碼數組
img = qrcode.make('Some data here')
img.save(filepath)

例2:高級示例

import os
import qrcode

filepath = os.path.join(os.getcwd(),'dir','test.png')

'''
參數說明】
version:是一個從1到40的整數,控制二維碼的大小(最小的版本1是21x21矩陣)。設置爲None,並在編寫代碼時使用fit參數自動確定。
error_correction:控制二維碼的錯誤糾正功能。可取值下列4個常量。
    ERROR_CORRECT_L:大約7%或更少的錯誤能被糾正。
    ERROR_CORRECT_M(默認):大約15%或更少的錯誤能被糾正。
    ERROR_CORRECT_Q:大約25%或更少的錯誤可以糾正。
    ROR_CORRECT_H:大約30%或更少的錯誤能被糾正。
box_size:控制二維碼中每個小格子包含的像素數。
border:控制邊框(二維碼與生成圖片邊界的距離,默認爲4,是相關標準規定的最小值)
'''
qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_L,
    box_size=10,
    border=4,
)
qr.add_data('Some data here')
qr.make(fit=True)
# qr.make_image():根據二維碼數據改造一張圖片。
img = qr.make_image(fill_color="black", back_color="white")
# img.show()
img.save(filepath)

例3:帶有logo圖案的二維碼

import os
from PIL import Image
import qrcode

def makeQrcode(logoImg, qrcodeFile, data, factor):
    '''
    :param logoImg: 二維碼中的 logo 路徑,如:C:/work/logo.jpg
    :param qrcodeFile: 保存生成的二維碼路徑
    :param data: 二維碼內容
    :param factor: 控制二維碼中 logo 圖大小的參數,factor 值越大,生成的二維碼中間的 logo 圖越小
    :return:
    '''
    qr = qrcode.QRCode(version=5,error_correction=qrcode.constants.ERROR_CORRECT_H,box_size=8,border=4)
    qr.add_data(data)
    qr.make(fit=True)

    img = qr.make_image()
    img = img.convert("RGBA")

    icon = Image.open(logoImg)

    img_w,img_h = img.size
    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)
    icon = icon.convert("RGBA")
    img.paste(icon,(w,h),icon)
    img.save(qrcodeFile)

if __name__ == '__main__':
    logoImg = os.path.join(os.getcwd(), 'dir', 'inner2.jpg')
    qrcodeFile = os.path.join(os.getcwd(), 'dir', 'qr3.png')
    data = "https://www.baidu.com"
    factor = 2
    makeQrcode(logoImg, qrcodeFile, data, factor)

示例3生成的二維碼:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章