一行代码深度定制你的专属二维码:(amzqr、MyQR制作动态二维码)

原文链接: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背景的二维码就是包含多个静态图片背景的二维码的集合。

扩展阅读:

  1. amzqr pypi地址:https://pypi.org/project/amzqr/
  2. MyQR pypi地址:https://pypi.org/project/MyQR/
  3. amzqr github地址:https://github.com/x-hw/amazing-qr

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注