Python3+qrcode+zxing生成和識別二維碼教程

1、安裝依賴庫

pip install qrcode pillow image zxing

pillow是python3中PIL的代替庫,image是生成圖版須要用到的庫html

安裝image時報錯「Could not install packages due to an EnvironmentError: [Errno 22] invalid mode ('wb') or filename」,沒管,直接在pycharm的setting中安裝就沒報錯了。python

 

2、使用qrcode生成二維碼

2.1 qrcode簡單用法

如下是生成指向百度的二維碼爲例,用戶掃描後會訪問百度首頁。代碼以下。git

另外注意咱們平常使用是掃一個二維碼就跳轉到某個頁面。但本質而言,掃二維碼就是獲得內容,而不會跳轉什麼頁面。github

好比微信等掃如下二維碼就是獲得「https://www.baidu.com」,至於自動跳到百度首頁是由於微信添加了若是掃描二維碼結果是url就自動跳轉的代碼形成的。windows

也就是說二維碼的內容徹底能夠不是url,而是「abcd」等仍意字符串,用微信掃時顯示「abcd」而不是跳轉什麼頁面而已。微信

不過因爲二維碼(指qr code)的容量是有限的,只有幾百到幾千個字節,因此通常不會直接用來存圖片等內容。ide

import qrcode

# 二維碼內容
data = "https://www.baidu.com"
# 生成二維碼
img = qrcode.make(data=data)
# 直接顯示二維碼
img.show()
# 保存二維碼爲文件
# img.save("baidu.jpg")

生成二維碼以下:oop

 

2.2 qrcode高級用法

所謂高級用法,就是設置二維碼大小、顏色等參數的寫法。示例代碼以下,其中實例化參意義以下:google

 version參數----二維碼的格子矩陣大小,能夠是1到40,1最小爲21*21,40是177*177url

error_correction參數----二維碼錯誤允許率,默認ERROR_CORRECT_M,允許小於15%的錯誤率

box_size參數----二維碼每一個小格子包含的像素數量

border參數----二維碼到圖片邊框的小格子數,默認值爲4

(不太肯定是否是都對,可直接查看官方說明:https://github.com/lincolnloop/python-qrcode#advanced-usage

import qrcode
# 實例化二維碼生成類
qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_L,
    box_size=10,
    border=4,
)
# 設置二維碼數據
data = "https://www.baidu.com"
qr.add_data(data=data)

# 啓用二維碼顏色設置
qr.make(fit=True)
img = qr.make_image(fill_color="green", back_color="white")

# 顯示二維碼
img.show()

生成二維碼以下:

 

3、使用zxing識別二維碼

3.1 zxing報錯處理

google流行的是使用qrtools來讀二維碼,可是qrtools依賴zbar不兼容python3,其替代品zbarlight在windows安裝又很麻煩,直接放棄了。

又回頭折騰百度上流行的zxing,zxing一直報」python zxing OSError: [WinError 6] 句柄無效「,直接搜「if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:」。看到這篇文章說windows上報這個錯能夠直接「註釋掉subprocess.py中的 _cleanup()方法」。雖說的不是zxing,但庫是同樣的,姑且一試還真能夠。

以下圖所示,將_cleanup()直接註釋掉:

 

 3.2 zxing識別二維碼代碼

import zxing

reader = zxing.BarCodeReader()
barcode = reader.decode("baidu.jpg")
print(barcode.parsed)

 

3.3 運行示例

使用2.1中的代碼生成並保存二維碼,解析運行結果以下:

 

參考:

https://github.com/lincolnloop/python-qrcode

http://www.javashuo.com/article/p-oqgmqksh-gt.html

https://github.com/dlenski/python-zxing

https://baijiahao.baidu.com/s?id=1586194723484285133&wfr=spider&for=pc

相關文章
相關標籤/搜索