Python qrcode生成二维码
qrcode是二维码生成的Python开源库,官方地址为python-qrcode。所有代码见:Python-Study-Notes。
1 简介
qrcode依赖于pillow,安装代码如下:
pip install qrcode[pil]
什么是二维码QRCode?
快速响应码Quick Response Code(QRCode)是一种二维象形码,具有快速的可读性和较大的存储容量。 该码由在白色背景上以方形图案排列的黑色模块组成(可以更改颜色)。 编码的信息可以由任何类型的数据组成(例如,二进制、字母数字或汉字符号)。二维码能存储大量的数据,将所有数据存储为方形网格中的一系列像素。
2 基础使用
2.1 命令行使用
从命令行,使用已安装的qr脚本:
1qr "hello world!" > test1.png
然后我们可以在当前路径获得一个名为test1.png的二维码文件,图像宽高为290。图片显示代码如下:
1from PIL import Image
2from IPython.display import display
3
4img = Image.open('test1.png', 'r')
5print("img size is {}".format(img.size))
6
7# 显示图片
8display(img)
输出结果 img size is (290, 290)
2.2 Python接口
在 Python 中,使用make快捷功能,也可以输出二维码图像,代码如下:
1import qrcode
2# 构建二维码
3data = 'hello world!'
4img = qrcode.make(data)
5# 显示图片格式,为qrcode.image.pil.PilImage
6print(type(img))
7# 保存图片
8img.save("test2.png")
2.3 二维码解析
如果想查看生成的二维码信息,可以用手机扫描二维码,或者使用草料二维码解析器在线解析图片。
3 高级使用
3.1 二维码自定义
我们还可以通过在之前使用该QRCode函数创建的qr对象中添加一些属性来自定义QR 码的设计和结构。基本参数如下:
- version:一个1 到40之间的整数,用于控制 QR 码的大小(最小的版本1是一个21×21矩阵)。默认为None,表示代码自动确认该参数。
- error_correction:用于二维码的纠错。qrcode 包中提供了以下四个常量:
- ERROR_CORRECT_L 大约可以纠正 7% 或更少的错误。
- ERROR_CORRECT_M (默认)大约 15% 或更少的错误可以被纠正。
- ERROR_CORRECT_Q 大约 25% 或更少的错误可以被纠正。
- ERROR_CORRECT_H 大约可以纠正 30% 或更少的错误。
- box_size:控制二维码的每个“盒子”有多少像素,默认为10。
- border:控制边框应该有多少个框厚(默认为 4,这是根据规范的最小值)。
1import qrcode
2qr = qrcode.QRCode(
3 version=1,
4 error_correction=qrcode.constants.ERROR_CORRECT_L,
5 box_size=10,
6 border=4,
7)
8data = "hello world, www.361way.com !"
9qr.add_data(data)
10qr.make(fit=True)
11
12# fill_color和back_color分别控制前景颜色和背景颜色,支持输入RGB色,注意颜色更改可能会导致二维码扫描识别失败
13img = qr.make_image(fill_color=( 213 , 143 , 1 ), back_color="lightblue")
14display(img)
3.2 二维码输出
我们还可以将二维码可以导出为SVG图片。
1import qrcode
2import qrcode.image.svg
3method = 'fragment'
4if method == 'basic':
5 # Simple factory, just a set of rects.
6 # 简单模式
7 factory = qrcode.image.svg.SvgImage
8elif method == 'fragment':
9 # Fragment factory (also just a set of rects)
10 # 碎片模式
11 factory = qrcode.image.svg.SvgFragmentImage
12else:
13 # Combined path factory, fixes white space that may occur when zooming
14 # 组合模式,修复缩放时可能出现的空白
15 factory = qrcode.image.svg.SvgPathImage
16
17img = qrcode.make('hello world!', image_factory=factory)
18
19# 保存图片
20img.save("test3.svg")
3.3 二维码图像样式
要将样式应用于QRCode,请使用StyledPilImage。这需要一个可选的module_drawers参数来控制二维码的形状,一个可选的color_mask参数来改变二维码的颜色,还有一个可选的embeded_image_path参数来嵌入图像。这些二维码并不能保证对所有的二维码识别器都有效,所以做一些实验并将纠错error_correction设置为高(尤其是嵌入图像时)。
python-qrcode提供的二维码的形状列表如下:
python-qrcode提供的二维码的颜色列表如下:
具体使用代码如下:
1import qrcode
2from qrcode.image.styledpil import StyledPilImage
3from qrcode.image.styles.moduledrawers import RoundedModuleDrawer,SquareModuleDrawer
4from qrcode.image.styles.colormasks import RadialGradiantColorMask,SquareGradiantColorMask
5
6# 纠错设置为高
7qr = qrcode.QRCode(error_correction=qrcode.constants.ERROR_CORRECT_H)
8# 如果想扫描二维码后跳转到网页,需要添加https://
9qr.add_data('https://blog.361way.com')
10
11# 修改二维码形状
12img_1 = qr.make_image(image_factory=StyledPilImage, module_drawer=RoundedModuleDrawer())
13# 修改二维码颜色
14img_2 = qr.make_image(image_factory=StyledPilImage, color_mask=SquareGradiantColorMask())
15# 嵌入图像
16img_3 = qr.make_image(image_factory=StyledPilImage, embeded_image_path="lena.jpg")
17# 嵌入图像
18img_4 = qr.make_image(image_factory=StyledPilImage, module_drawer=SquareModuleDrawer(), color_mask=RadialGradiantColorMask(), embeded_image_path="lena.jpg")
19
20img_1.save("test1.png")
21img_2.save("test1.png")
22img_3.save("test1.png")
23img_4.save("test1.png")
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/python-qrcode/6854.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.