Python玩轉二維碼,炫酷!
二維碼(Quick Response Code)幾乎已經滲透到我們日常生活的每一個角落。本文分享如何使用Python生成各種炫酷二維碼。
二維碼(Quick Response Code)幾乎已經滲透到我們日常生活的每一個角落。
二維碼是 1994 年發明的一種矩陣條形碼。
實際上,二維碼通常包含指向網站或應用程序的定位器、標識符或跟蹤器的數據。
二維碼使用四種標準化編碼模式(數字、字母數字、字節/二進制、漢字)來高效存儲數據。
二維碼的結構
從上圖可以看出,二維碼結構整體分為功能模式和編碼區。功能模式細分為:空白區、位置探測圖形、分隔符、圖形定位、圖形矯正;而編碼區又細分為:格式信息、版本信息、數據、糾錯碼字。我們簡單了解一下各部分的作用:
- 空白區:留空,無需做任何處理
- 位置探測圖形:輔助掃描軟件定位二維碼
- 分隔符:區分功能模式和編碼區
- 圖形定位:指示標記的密度并確定坐標系
- 圖形矯正:校正圖形的數量和位置
- 格式信息:存儲格式化數據信息
- 版本信息:二維碼規格,40個規格的二維碼符號矩陣
- 數據和糾錯碼字:實際保存的二維碼信息和糾錯碼字
本文用到的第三方庫:qrcode, myqr, pillow, zxing
首先在終端中安裝這些庫:
pip install qrcode myqr pillow zxing
python中的二維碼
import qrcode
data = 'https://www.baidu.com'
image = qrcode.make(data=data)
image.show()
image.save("baidu.png")
生成的二維碼如下圖:
進階
- 大小和顏色
import qrcode
def plotQR(box_size, border, fill_color,back_color):
qr = qrcode.QRCode(
versinotallow=2,
error_correctinotallow=qrcode.constants.ERROR_CORRECT_L,
box_size=box_size,
border=border,
)
data = 'https://www.baidu.com/'
qr.add_data(data=data)
qr.make(fit=True)
image = qr.make_image(fill_color=fill_color , back_color=back_color)
fn = f"baidu_{box_size}_{border_size}_{fill_color}_{back_color}.png"
image.save(fn)
return fn
exampleList = [
(15,3,'blue','white'),
(15,3,'red','green'),
(10,2,'yellow','grey'),
(5,1,'pink','black'),
]
[plotQR(*arg) for arg in exampleList]
結果如下:
baidu_15_3_blue_white.png:
baidu_15_3_red_green.png:
baidu_10_2_yellow_grey.png:
baidu_5_1_pink_black.png
- 背景圖
myqr是另外一個二維碼相關的庫,它可以生成帶背景圖的二維碼。
from MyQR import myqr
myqr.run(
words="https://baidu.com/",
versinotallow=1,
picture="bg.png",
colorized=True,
save_name="baidu_bg.png",
)
上圖生成的二維碼:
當然把背景圖換成動態圖(gif),也可以生成動態的二維碼。??????
識別二維碼圖片
上面是生成二維碼的示例,下面是識別二維碼的示例:我們來驗證下是否能成功!
# 方法一
import zxing
reader = zxing.BarCodeReader()
barcode = reader.decode("001.png")
print(barcode.parsed)
# 方法二
import cv2
import os
img = cv2.imread("001.png")
# cv2.imshow("imge", img)
det = cv2.QRCodeDetector()
val, pts, st_code = det.detectAndDecode(img)
print(val)
總結
二維碼無處不在,你的二維碼是否讓人眼前一亮?趕緊告訴你的小伙伴python可以創建讀取二維碼吧!