导读

在前两期中我们已经讲述了条形码和二维码的相关内容,本期将使用MyQR和qrcode制作二维码。

MyQR 库是 Python 中最流行的二维码制作函数库。它通过一个简单的函数就可生成生动有趣的二维码,可谓是二维码制作神器。更多信息,请参考其GitHub内容。安装方式如下:

pip install myqr

引用方式为from MyQR import myqr,其中常用的参数如下:

而qrcode模块同样也是Github_上的一个开源项目,提供了生成二维码的接口。qrcode默认使用PIL库用于生成图像。由于生成qrcode图片需要依赖Python的图像库,所以需要先安装Python图像库PIL:

pip install pillow
pip install qrcode

普通二维码

此处指的是没有背景图片的二维码,其代码如下:

from MyQR import
myqrmyqr.run(words="https://www.iamzlt.com",version=9,
save_name="myblog.png", save_dir=".\output")

效果如图所示,扫码后可以直接调转到个人博客。

值得一说的是,其中「word」参数支持文本类型如下所示,即不支持中文字符。数字0-9

大小写英文字母

英文字符与空格

若要生产中文信息的二维码,可使用「qrcode」模块。而两个模块在一定程度上是可以互换使用的。生成上述信息的「qrcode」代码如下:

import qrcode
data = 'https://www.iamzlt.com/'
img_file = r'.\output\qrblog.png'
# 实例化QRCode生成qr对象
qr = qrcode.QRCode(
version=7,
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()

图片二维码

图片二维码可以是使用静态图像生成的以图片为背景的彩色或黑白的二维码,代码如下。

from MyQR import myqr
myqr.run(words="https://www.iamzlt.com",
version=6,picture=".\pic.jpg",colorized=True,
save_name="picmyqr.png",
save_dir=".\output")

效果如图所示。当参数「colorsized」为False时,将生成黑白二维码。

还有一种添加图片的方式可以同微信一般将图片加在中间。下面用「qrcode」生成。代码如下:

import qrcode
from PIL import Image
import matplotlib.pyplot as plt
data = 'https://www.iamzlt.com/'
img_file = r'.\output\qrblog.png'
# 实例化QRCode生成qr对象
qr = qrcode.QRCode(
version=7,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4
)
# 传入数据
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image(fill_color="green", back_color="white")
# 保存二维码
img.save(img_file)
# 展示二维码
img.show()
# 添加logo,打开logo照片
img = Image.open(img_file)
icon = Image.open("pic.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照
icon.show()
img.paste(icon, (w, h))
# 终端显示图片
plt.imshow(img)
plt.show()
# 保存img
img.save(r'.\output\qrblog2.png')

导出效果如图所示。

动态二维码

动态二维码是指使用 gif图片作为背景图而生成的动态二维码。使用「myqr」模块,代码如下:

from MyQR import myqr
myqr.run(words="https://www.iamzlt.com",version=7,
picture=".\dt.gif",colorized=True,
save_name="dtqr.gif",
save_dir=".\output")

效果如下: