博客
关于我
Python 生成二维码
阅读量:796 次
发布时间:2023-03-28

本文共 2030 字,大约阅读时间需要 6 分钟。

MyQR 二维码生成库使用说明

环境搭建

1.1 安装依赖

sudo pip3 install myqr

1.2 下载图片资源

wget http://labfile.oss.aliyuncs.com/courses/1126/Sources.zipunzip Sources.zip

1.3 安装FreeImage依赖

mkdir .imageio && cd .imageio/imageio/mkdir freeimage && cd freeimagewget http://labfile.oss.aliyuncs.com/courses/1126/libfreeimage-3.16.0-linux64.so

使用方法

2.1 调用myqr.run()方法

from MyQR import myqrmyqr.run('https://www.baidu.com')quit()

2.2 myqr.run()参数说明

  • words:要编码的文字内容
  • picture:背景图片路径
  • save_name:生成的二维码文件名
  • colorized:是否启用颜色化(默认False)

示例:

myqr.run(    words='https://www.baidu.com',    picture='Sources/baidu.png',    colorized=True,    save_name='artistic_color.png')

2.3 动态二维码生成(注意:保存文件需为.gif格式)

myqr.run(    words='https://www.baidu.com',    picture='Sources/xxx.gif',    colorized=True,    save_name='animated.gif')

MyQR文件结构

qrcode/├── LICENSE.md├── README.md├── requirements.txt├── myqr.py└── MyQR/    ├── __init__.py    ├── myqr.py    └── terminal.py        ├── __init__.py        └── constants.py            ├── data.py            ├── ECC.py            ├── structure.py            ├── matrix.py            └── draw.py

二维码生成步骤

1. 数据分析

MyQR/mylibs/constant.py

根据编码类型确定字符集并转换为符号字符。

2. 数据编码

MyQR/mylibs/data.py

将字符转换为位流,每8位为一个码字,形成码字序列。

3. 纠错编码

MyQR/mylibs/ECC.py

按需分块码字序列,并根据纠错等级生成纠错码字,形成纠错序列。

4. 构造最终数据信息

MyQR/mylibs/structure.py + matrix.py

根据规格将序列转换为二维码矩阵。

5. 生成二维码

MyQR/mylibs/draw.py

使用矩阵生成二维码图片。

合并图片原理

MyQR/myqr.pycombine() 方法使用 Pillow 库读取并合并图片。

读取图片操作

qr = Image.open(qr_name).convert('RGBA') if colorized else qrbg0 = Image.open(bg_name).convert('RGBA')bg0 = ImageEnhance.Contrast(bg0).enhance(contrast)bg0 = ImageEnhance.Brightness(bg0).enhance(brightness)

合并操作

for i in range(qr.size[0]-24):    for j in range(qr.size[1]-24):        if not ((i in (18,19,20)) or (j in (18,19,20)) or (i<24 and j<24) or (i<24 and j>qr.size[1]-49) or (i>qr.size[0]-49 and j<24) or ((i,j) in aligs) or (i%3==1 and j%3==1) or (bg0.getpixel((i,j))[3]==0)):            qr.putpixel((i+12,j+12), bg.getpixel((i,j)))

参考文献

  • 二维码(QR code)基本结构及生成原理
  • Pillow 文档
  • MyQR 项目文档
  • QR Code 教程
  • 实验环境说明
  • 你可能感兴趣的文章
    Objective-C实现欧拉路径和欧拉回路算法(附完整源码)
    查看>>
    Objective-C实现正向CMDShell(附完整源码)
    查看>>
    Objective-C实现正数num使用递归找到它的二进制算法(附完整源码)
    查看>>
    Objective-C实现水波纹显示效果(附完整源码)
    查看>>
    Objective-C实现求 1 到 20 的所有数整除的最小正数算法 (附完整源码)
    查看>>
    Objective-C实现求1000以内的全部亲密数(附完整源码)
    查看>>
    Objective-C实现求a的逆元x(附完整源码)
    查看>>
    Objective-C实现求squareDifference平方差算法 (附完整源码)
    查看>>
    Objective-C实现求一个数的位数之和算法(附完整源码)
    查看>>
    Objective-C实现求一个数的因子算法(附完整源码)
    查看>>
    Objective-C实现求一组数字的平均值算法(附完整源码)
    查看>>
    Objective-C实现求两个数组的中位数算法(附完整源码)
    查看>>
    Objective-C实现求两点间距离(附完整源码)
    查看>>
    Objective-C实现求中位数(附完整源码)
    查看>>
    Objective-C实现求中位数(附完整源码)
    查看>>
    Objective-C实现求众数(附完整源码)
    查看>>
    Objective-C实现求圆锥的体积(附完整源码)
    查看>>
    Objective-C实现求曲线在某点的导数(附完整源码)
    查看>>
    Objective-C实现求最大公约数 (GCD)的算法(附完整源码)
    查看>>
    Objective-C实现求梯形面积公式(附完整源码)
    查看>>