1. 程式人生 > >python 生成qrcode二維碼

python 生成qrcode二維碼

測試環境:python3.4

qrcode二維碼

生活中非常常見的正方形二維碼,除右小角外其他三個邊角都有一個黑色矩形框,二維碼中間可以有圖片,如下圖:
qrcode二維碼(來自百度知道)

優點
具有儲存的資訊容量大、可靠性高、可表示漢字及圖象多種文字資訊、保密防偽性強等優點。
具有可四個級別的糾錯能力:

  • L級:約可糾錯7%的資料碼字
  • M級:約可糾錯15%的資料碼字
  • Q級:約可糾錯25%的資料碼字
  • H級:約可糾錯30%的資料碼字

python二維碼模組

python-qrcode是個用來生成二維碼圖片的第三方模組,依賴於 PIL 模組。

qrcode模組安裝

執行命令列工具(cmd),使用pip安裝工具分別安裝qrcode和pillow。

pip install qrcode
pip install pillow

為什麼安裝的不是PIL呢?PIL模組只支援python2.7及以下版本,python3之後無法使用,官方推薦python3.x使用pillow代替PIL模組,實際上pillow的與PIL完全相容,部分功能還得到完善。
如果不想使用pip安裝,或者想單獨下載離線安裝,請登陸python官網PyPI欄目,搜尋pillow,並選擇最新版本。當前最新版本:Pillow3.2

安裝過程常見問題

如果安裝過程中沒有遇到問題,請跳過。
1. PIL無法安裝,PyPI查詢PIL發現不支援python3.x以上版本。安裝pillow。
2. 提示pip版本過低,需要升級,按照提示資訊內容,執行cmd命令 python -m pip install --upgrade pip

升級pip版本。
pip版本過低提示資訊:

You are using pip version 8.0.3, however version 8.1.1 is available.You should consider upgrading via the ‘python -m pip install –upgrade pip’ command.

認識qrcode模組

管中窺豹——示例程式學習

欲快速掌握一個模組的基本用法,莫過於閱讀模組提供的測試用例或者demo程式,對於需求簡單的功能,只需在demo的基礎上略微升級改造即可滿足要求。一起來看看qrcode的example。

import qrcode

qrcode.run_example()

執行結束後自動開啟一張生成好的二維碼圖片。原始碼example()的實現如下:

def run_example(data="http://www.lincolnloop.com", *args, **kwargs):
    """
    Build an example QR Code and display it.

    There's an even easier way than the code here though: just use the ``make``
    shortcut.
    """
    qr = QRCode(*args, **kwargs)
    qr.add_data(data)

    im = qr.make_image()
    im.show()

生成二維碼的步驟:
1. 建立QRCode物件
2. add_data()新增資料
3. make_image()建立二維碼(返回im型別的圖片物件)
4. 自動開啟圖片,im.show()

練習1:簡單呼叫

將網站URL地址生成二維碼圖片,以.png的形式儲存圖片到本地,自動顯示生成結果。

import qrcode

data = 'http://write.blog.csdn.net/'
img_file = r'D:\py_qrcode.png'

img = qrcode.make(data)
# 圖片資料儲存至本地檔案
img.save(img_file)
# 顯示二維碼圖片
img.show()

此處並沒有使用add_data()新增資料,make_image()生成二維碼,而是使用qrcode.make(data)的方式獲取im物件。qrcode.make()是qrcode提供簡單呼叫介面。

qrcode.make()函式實現中封裝qrcode物件建立、新增資料、生成im物件的操作。

原始碼如下:

def make(data=None, **kwargs):
    qr = QRCode(**kwargs)
    qr.add_data(data)
    return qr.make_image()

練習2:生成引數

文章開頭提到qrcode可以選擇不同的糾錯級別,生成不同大小的二維碼圖片,只需要在例項化QRCode設定不同的引數,就能滿足要求。

import qrcode

data = 'http://write.blog.csdn.net/'
img_file = r'D:\py_qrcode.png'

qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_L,
    box_size=10,
    border=4
)

qr.add_data(data)
qr.make(fit=True)
img = qr.make_image()
img.save(img_file)
img.show()

QRCode引數詳細說明:

  • version: 一個整數,範圍為1到40,表示二維碼的大小(最小值是1,是個12×12的矩陣),如果想讓程式自動生成,將值設定為 None 並使用 fit=True 引數即可。
  • error_correction: 二維碼的糾錯範圍,可以選擇4個常量:
    ERROR_CORRECT_L 7%以下的錯誤會被糾正
    ERROR_CORRECT_M (default) 15%以下的錯誤會被糾正
    ERROR_CORRECT_Q 25 %以下的錯誤會被糾正
    ERROR_CORRECT_H. 30%以下的錯誤會被糾正
  • boxsize: 每個點(方塊)中的畫素個數
  • border: 二維碼距影象外圍邊框距離,預設為4,而且相關規定最小為4

參考連結