1、背景
上一次我们介绍了什么是二维码,读过这篇文章以后,相信大家对二维码已经有了一定的认识,那么有没有想过如何自己动手生成二维码呢?二维码在我们的生活与工作中,都能够做什么呢?今天我们来探讨一下用 Python 如何生成二维码。

2、使用哪些库
Python 具有丰富的第三方库,能够生成二维码的就有 qrcode 库、segno 库、pystrich 库、myqr 库。

其中 segno 是一个纯 python 语言开发的二维码和微二维码生成器。常用的还有 qrcode 库,功能也很丰富。pystrich 库作者好久都没有进行更新,不建议继续使用。myqr 库可以生成基本二维码、彩色二维码和动态二维码。今天我们主要介绍 segno,它支持 python2.7 和 python3.5+,使用时请注意自己的 python 版本。其他模块感兴趣的小伙伴可以自行探索一下。





3、如何安装
安装时与其他 python 模块一样,使用 pip 命令安装即可

安装 segno 库

pip insyall segno

指定版本安装

pip insyall segno==0.3.2
•

4、如何使用
4.1、 segno 常见使用方法
方法 参数 说明
make_qr 内容 生成二维码
make_micro 内容 生成微二维码
make micro 生成二维码,默认生成微二维码
version 指定二维码版本,默认为 1

error=‘级别’,boost_error=False 指定二维码纠错级别(L、M、Q、H),默认为 L 级别

mask 指定数据掩码,默认为最佳掩码

save 文件名称与格式 将二维码保存为指定格式的文件
border 指定二维码边框,为 None 时将使用默认值

scale 指定序列化缩放因子,默认为 1

dark=‘颜色’, light='颜色' 指定暗模块和亮模块的颜色

kind 保存到流

4.2、 使用示例
4.2.1、 基本使用
import segno

因为 segno 不仅能够生成二维码,还能够生成微二维码,默认生成微二维码,micro 为 False 将强制生成二维码

qrcode = segno.make("Hello World!", micro=False)

或使用函数:segno.make_qr() 创建二维码

qrcode = segno.make_qr("Hello World!")

注意:因为汉字模式不在 ISO/IEC 18004 范围内,因此二维码阅读器并未广泛支持它,在使用时应谨慎。

此外汉字模式不适用微二维码。

qrcode = segno.make("你好!", micro=False, mode='hanzi')

查看默认版本

print(qrcode.version) # 1

明确指定错误级别 L,不允许自动提高错误级别

qrcode = segno.make('Hello World!',
error='l', boost_error=False)
print(qrcode.designator) # 1-L

指定掩码

qrcode = segno.make("Hello World!", micro=False, mask=1)
print(qrcode1.mask) # 1

保存二维码

qrcode = segno.save("Hello World.png") # 生成图片

支持序列为其他格式保存

qrcode.save('hello.svg') # svg 文件
qrcode.save('hello.txt') # text 文件

指定二维码边框

qrcode.save('hello_default.png', border=None) # 默认值
qrcode.save('hello_none.png', border=0) # 无边框
qrcode.save('hello_big.png', border=5) # 大边框

指定缩放因子

qrcode.save('hello.png', scale=10) # 1 模块大小 == 10 像素
qrcode.save('hello.svg', scale=2.4) # svg 可以接受浮点值,png 赋值浮点值时,将会归整为 2
// svg 格式
<?xml version="1.0" encoding="utf-8"?>

4.2.2、 进阶使用
指定暗模块颜色

import segno

qrcode = segno.make_qr("Hello World!")

指定暗模块的颜色

qrcode.save("hello_color.png", dark="#ccc")



指定暗模块

指定暗模块和亮模块的颜色

import segno

qrcode = segno.make_qr("Hello World!")

指定暗模块和亮模块的颜色

qrcode.save('hello_color.png', dark='darkred', light='lightblue')
import segno
from PIL import Image # python 画图的库

安装:pip install pillow, m1 使用:arch -x86_64 pip3 install Pillow

qrcode = segno.make_qr("Hello World!")

保存到流

buff = io.BytesIO()
qrcode.save(buff, kind='png', dark='darkblue', light='#eee')
buff.seek(0)
img = Image.open(buff).convert('RGB')
img_width, img_height = img.size
logo_max_size = img_height // 3 # logo 尺寸
logo_img = Image.open('./13.png') # logo 照片

调整 logo 大小

logo_img.thumbnail((logo_max_size, logo_max_size), Image.Resampling.LANCZOS)

计算二维码中心位置

box = ((img_width - logo_img.size[0]) // 2, (img_height - logo_img.size[1]) // 2)

组合图片

img.paste(logo_img, box)

保存

img.save('qrcode_with_logo.png')
4.3、 使用场景
4.3.1、 快速连接 WIFI
from segno import helpers

wifi_settings = {
"ssid": '(wifi 名称)',
"password": '(wifi 密码)',
"security": 'WPA',
"hidden": False. # 是否是隐藏 wifi
}

wifi = helpers.make_wifi(wifi_settings)

注意:微信扫描时只能读取信息,使用手机自带的二维码相机扫描,能够弹窗直接连接 wifi。

wifi.save("wifi.png", dark="yellow", light="#323524", scale=10)
4.3.2、 快速发送邮件
from segno import helpers

qrcode = helpers.make_email(
to='email_address@jd.com', # 收件人,字符串或者可迭代字符串
cc='recipient_address@jd.com', # 抄送人,字符串或者可迭代字符串
subject='这是主题',
body='这是邮件内容'
)

qrcode.save("email.png", scale=10)
4.3.3、 快速添加联系人
from segno import helpers

vcard = helpers.make_vcard(
name='姓名', # 联系人姓名
email=('邮箱地址'), # 邮箱
url=['www.jd.com'], # 主页
phone='400xxxxxxx' # 电话号码
)

vcard.save('vcard.png', dark="#FF7D92", scale=10)



添加联系人

4.4 其他场景
•物品属性标签

•店铺地址信息

•紧急联系人信息

•挪车二维码

•等等

5、总结
至此,如何使用 python 生成二维码,通过 segno 模块的介绍,我们可以快速的生成自己需要的二维码,生活和工作中,我们都能根据自己的需要,生成二维码,从而方便我们,使事情变得更加简单,还有另外几个二维码库没有介绍,感兴趣的小伙伴,可以自行学习一下。


↙↙↙阅读原文可查看相关链接,并与作者交流