二维码(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可以创建读取二维码吧!