先来看看一维码、二维码,然后深入了解一下QR码,简单点说QR码是二维码的一个种类!!!
二维码(2-Dimensional Bar Code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的。它是指在一维条码的基础上扩展出另一维具有可读性的条码,使用黑白矩形图案表示二进制数据,被设备扫描后可获取其中所包含的信息。一维条码的宽度记载着数据,而其长度没有记载数据。二维条码的长度、宽度均记载着数据。二维条码有一维条码没有的“定位点”和“容错机制”。容错机制在即使没有辨识到全部的条码、或是说条码有污损时,也可以正确地还原条码上的信息。
QR码呈正方形,常见的是黑白两色。在3个角落,印有较小,像“回”字的正方图案。这3个是帮助解码软件定位的图案,用户不需要对准,无论以任何角度扫描,数据仍然可以正确被读取。
对于不同版本的二维码,容量也是不同的。理论上内容经过压缩处理后可以存7089个数字,4296 个字母和数字混合字符,2953个8位字节数据,1817个汉字;在上面我们看到,不同的Version的QR Code是不同的矩阵,Version版本越过,也就意味着容量越大。
关于QR码的细节知识我们作为了解即可,今天主要学习如何使用python中的库生成我们想要的二维码,如果对此比较感兴趣可以点击这个传送门,进行深入学习!向大佬致敬。
qrcode模块是Github上的一个开源项目,提供了生成二维码的接口。qrcode默认使用PIL库用于生成图像。由于生成qrcode图片需要依赖Python的图像库,所以需要先安装Python图像库PIL(Python Imaging Library),在使用PIL库时,由于PIL有些更新,直接使用pip install PIL命令会报出以下错误ModuleNotFoundError: No module named 'PIL'
,可以改用以下命令安装上PIL库。
pip install pillow
常用的库函数:
参数配置
一般情况生成二维码的步骤:
下面看一个例子:
import qrcode
data = 'http://www.baidu.com/'
img_file = r'保存路径'
# 实例化QRCode生成qr对象
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4
)
# 传入数据
qr.add_data(data)
qr.make(fit=True)
# 生成二维码
img = qr.make_image()
# 保存二维码
img.save(img_file)
# 展示二维码
img.show()
可以发现,通过调参,可以生成不同外观但存储信息相同的二维码:
ModuleNotFoundError: No module named 'qrcode'
,如果出现这个错误的话,证明我们没有安装qrcode这个库,可以使用以下命令安装qrcode。然后导入使用!
pip3 install qrcode
安装好之后就可以快乐的生成二维码了!!!
效果如下图,实际上还是将信息藏在二维码中,只是改变了二维码的样式!!!
用到的代码如下:
import qrcode
from PIL import Image
import matplotlib.pyplot as plt
def getQRcode(data, file_name):
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=5,
border=4,
)
# 添加数据
qr.add_data(data)
# 填充数据
qr.make(fit=True)
# 生成图片
img = qr.make_image(fill_color="green", back_color="white")
# 添加logo,打开logo照片
icon = Image.open("1.jpg")
# 获取图片的宽高
img_w, img_h = img.size
# 参数设置logo的大小
factor = 6
size_w = int(img_w / factor)
size_h = int(img_h / factor)
icon_w, icon_h = icon.size
if icon_w > size_w:
icon_w = size_w
if icon_h > size_h:
icon_h = size_h
# 重新设置logo的尺寸
icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS)
# 得到画图的x,y坐标,居中显示
w = int((img_w - icon_w) / 2)
h = int((img_h - icon_h) / 2)
# 黏贴logo照
img.paste(icon, (w, h), mask=None)
# 终端显示图片
plt.imshow(img)
plt.show()
# 保存img
img.save(file_name)
return img
if __name__ == '__main__':
getQRcode("http://oj.aiecp.cn", 'my1.png')
生成之后大概就是这个样子!当然啦这个样式需要用到另外一个库myqr
,直接使用pip install myqr
下载即可,如果没有配置镜像源可能下载较慢!
代码如下:
from MyQR import myqr
myqr.run(
words='https://blog.csdn.net/apple_51931783?type=blog', # 扫描二维码后,显示的内容,或是跳转的链接
version=5,# 设置容错率
level='H',# 控制纠错水平,范围是L、M、Q、H,从左到右依次升高
picture='1.gif',# 图片所在目录,可以是动图
colorized=True, # 黑白(False)还是彩色(True)
contrast=1.0, # 用以调节图片的对比度,1.0 表示原始图片。默认为1.0。
brightness=1.0, # 用来调节图片的亮度,用法同上。
save_name='Python.gif' # 控制输出文件名,格式可以是 .jpg, .png ,.bmp ,.gif
)
剩下的样式,大家在遇到之后或者对此很感兴趣可以自行查阅,只需简单的调参就可以获得灰常好看的二维码了。这里就不细说了!
二维码的知识到这也就结束了,本篇博客介绍的较为基础了,炫彩的二维码也并不常用,所以大家好好掌握普通的二维码生成,在熟练之后逐步向复杂二维码迈进吧!!!