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


一、安裝依賴庫

pip install qrcode pillow image zxing

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

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

 

二、使用qrcode生成二維碼

2.1 qrcode簡單用法

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

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

比如微信等掃以下二維碼就是得到“https://www.baidu.com”,至於自動跳到百度首頁是因為微信添加了如果掃描二維碼結果是url就自動跳轉的代碼造成的。

也就是說二維碼的內容完全可以不是url,而是“abcd”等仍意字符串,用微信掃時顯示“abcd”而不是跳轉什么頁面而已。

不過由於二維碼(指qr code)的容量是有限的,只有幾百到幾千個字節,所以一般不會直接用來存圖片等內容。

import qrcode

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

生成二維碼如下:

 

2.2 qrcode高級用法

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

 version參數----二維碼的格子矩陣大小,可以是1到40,1最小為21*21,40是177*177

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()

生成二維碼如下:

 

三、使用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

https://www.cnblogs.com/sfnz/p/5457862.html

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM