目录
前言
学习二维码
QR Code(Quick Response Code)的生成与解析。
一、二维码是什么?
二维码(二维条码)是指在一维条码的基础上扩展出的另一维具有可读性的条码,使用黑白矩形图案表示二进制数据,被设备扫描后可获取其中所包含的信息。一维条码的宽度记载着数据,而长度没有记载数据。二维码的长度、宽度均记载着数据。二维码有一维条码没有的“定位点“和”容错机制“。容错机制使得在即使没有辨识到全部的条码或者条码有污损时也可以正确地还原条码上的信息。二维码的种类很多,不同的机构开发出的二维码具有不同的结构以及编写、读取方法。
这里我们学习的二维码是QR Code(Quick Response Code),学名为快速响应矩阵码,它是二维条码的一种。QR二维码目前在很多地方有着广泛的应用,例如通过微信二维码加好友、将应用软件的下载地址做成二维码,等等。
二、使用步骤
1.qrcode库的使用
安装qrcode库
qrcode库是用于生成二维码图像的python第三方库。库的安装步骤如下,在cmd中输入
pip3 Install qrcode
查看安装信息:
pip show qrcode
2.生成二维码
导入qrcode模块后,make()函数返回一个qrcode.image.pil.PilImage对象,调用make()函数生成一个二维码图片对象,如下图所示,最后调用图片对象的save()函数就可以将生成的二维码保存下来。
1.代码如下:
import qrcode
img=qrcode.make("hello,world!")
img.save('hello.png')
结果如下
2.生成带有图标的二维码
事先准备一个logo图标,使用下面的程序生成带有logo图标的二维码。
logo如下:
import qrcode
from PIL import Image
import os, sys
def gen_qrcode(string,path,logo=""):
'''
生成中间带logo的二维码
需要安装qrcode、PIL库
@参数string:二维码字符串
@参数path:生成的二维码保存路径
@参数logo:logo文件路径
@return:None
'''
#初步生成二维码图像
qr=qrcode.QRCode(
version=2,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=8,
border=1
)
qr.add_data(string)
qr.make(fit=True)
#获得Image实例并把颜色模式转换为RGBA
img=qr.make_image()
img=img.convert("RGBA")
if logo and os.path.exists(logo):
try:
icon=Image.open(logo)#打开填充的logo文件
img_w,img_h=img.size
#print(img_w,img_h)
except Exception as e:
print (e)
sys.exit(1)
factor=4
#计算logo的尺寸
size_w=int (img_w/factor)
size_h=int (img_h/factor)
#比较并重新设置logo文件的尺寸
icon_w,icon_h=icon.size
if icon_w>size_w:
icon_w=size_w
if icon_h>size_h:
icon_h=size_h
icon=icon.resize((icon_w,icon_h),Image.Resampling.LANCZOS)
#计算logo的位置,并复制到二维码图像中
w=int ((img_w-icon_w)/2)
h=int ((img_h-icon_h)/2)
icon=icon.convert("RGBA")
img.paste(icon,(w,h),icon)#作用为将一张图片覆盖到另一张图片的指定位置去
#保存二维码
img.save(path) #例如qrcode.png
if __name__=="__main__":
info='强风吹拂'
pic_path="qrcode.png"#生成的带有图标的二维码图片,如下图
logo_path="灰二.png"#用于填充的图标
gen_qrcode(info,pic_path,logo_path)
结果:
3.python解析二维码照片
解析二维码图片信息需要安装pyzbar库,安装如下
pip install pyzbar |
代码如下:
from PIL import Image
import pyzbar.pyzbar as pyzbar
def decode_qrcode(img):
barcodes = pyzbar.decode(img)
for barcode in barcodes:
barcodeData = barcode.data.decode("utf-8")
print(barcodeData)
return None
if __name__=="__main__":
img = Image.open(img_path)#打开二维码图片路径
decode_qrcode(img)
总结
以上就是今天要讲的内容,本文仅仅简单介绍了利用python生成与解析二维码。