原文链接:http://www.juzicode.com/archives/6377
桔子菌逛github的时候发现一个好玩的Python库,可以用来制作带背景图片或动态图的二维码,这个库在pypi上也有发布,可以直接通过pip安装:
python -m pip install amzqr
导入模块,模块名称为”amzqr”:
from amzqr import amzqr
使用方法非常简单,一个run()方法搞定一切:
from amzqr import amzqr
version, level, qr_name = amzqr.run(
words,
version=1,
level='H',
picture=None,
colorized=False,
contrast=1.0,
brightness=1.0,
save_name=None,
save_dir=os.getcwd()
)
run()方法的入参比较多,含义如下:
- words:要生成二维码的文字信息,一般是网址等信息;
- version:边长,范围是1至40,数字越大边长越大;
- level:纠错等级,范围是L、M、Q、H,H的纠错能力最强;
- picture:背景图片的路径+文件名称;
- colorized:是否彩色,在选择背景图片时生效;
- contrast:对比度,1.0 表示原始图片,更小的值表示更低对比度,更大反之。默认为1.0
- brightness:亮度,用法和取值与
contrast
相同 - save_name:生成二维码的文件名称,格式可以是
.jpg
,.png
,.bmp
,.gif
,默认输出文件名是“qrcode.png”; - save_dir:生成二维码图片的保存路径;
先看一个最简单的二维码生成例子:
#VX公众号: 桔子code; juzicode.com
from amzqr import amzqr
version, level, qr_name = amzqr.run(
words='http://weixin.qq.com/r/Ejr54d-EkYLurZuC928A',
version=1,
level='H',
picture=None,
colorized=False,
contrast=1.0,
brightness=1.0,
save_name=None,
save_dir=os.getcwd()
)
print(version, level, qr_name)
运行结果:
line 16: mode: byte
5 H E:\juzicode\qrcode.png
从运行结果看,尺寸参数version虽然设置为1,但是从返回的version值为5,通过实验version在小于5时,默认生成的图像尺寸都设置为5。
生成的二维码效果如下图:
这种方式生成的二维码稍显简陋了点,下面我们生成增加背景图片的二维码,背景图片和py文件都在当前工作目录下,名称为logo.jpg,picture参数传入这个图片文件的名称,通过修改colorized参数为False或True可以分别生成背景为黑白或彩色图片的二维码:
#VX公众号: 桔子code; juzicode.com
from amzqr import amzqr
version, level, qr_name = amzqr.run(
words='http://weixin.qq.com/r/Ejr54d-EkYLurZuC928A',
version=10,
level='H',
picture='logo.jpg',
colorized=False,
contrast=1.0,
brightness=1.0,
save_name=None,
save_dir=os.getcwd()
)
print(version, level, qr_name)
version, level, qr_name = amzqr.run(
words='http://weixin.qq.com/r/Ejr54d-EkYLurZuC928A',
version=10,
level='H',
picture='logo.jpg',
colorized=True,
contrast=1.0,
brightness=1.0,
save_name='logo-qrcode-color.png',
save_dir=os.getcwd()
)
print(version, level, qr_name)
运行结果:
line 16: mode: byte
10 H E:\juzicode\logo_qrcode.png
line 16: mode: byte
10 H E:\juzicode\logo-qrcode-color.png
从运行结果看,在没有指定save_name的时候,默认生成的文件名称为背景图片文件名称+_qrcode.png,最后生成的二维码效果如下:
正是因为二维码强大的抗干扰能力,所以可以在添加背景图片的情况下也能被识别出来。
接下来我们生成一个带动态图背景的二维码,动态图的格式为GIF,也是通过picture变量传入动态图的文件名:
#VX公众号: 桔子code; juzicode.com
from amzqr import amzqr
version, level, qr_name = amzqr.run(
words='http://weixin.qq.com/r/Ejr54d-EkYLurZuC928A',
version=10,
level='H',
picture='dog.gif',
colorized=True,
contrast=1.0,
brightness=1.0,
save_name=None,
save_dir=os.getcwd()
)
print(version, level, qr_name)
运行结果:
line 16: mode: byte
10 H E:\juzicode\dog_qrcode.gif
生成的二维码效果如下图:
note1:amzqr(https://pypi.org/project/amzqr/)是MyQR(https://pypi.org/project/MyQR/)的升级版,从pypi的homepage看,二者都指向同一个github库:https://github.com/x-hw/amazing-qr。
note2:gif其实就是多个静态图片的集合,包含gif背景的二维码就是包含多个静态图片背景的二维码的集合。