二维码图像生成器
项目描述
纯Python QR码生成器
生成QR码。
标准安装使用pypng生成PNG文件,并可以直接将QR码渲染到控制台。标准安装只需
pip install qrcode
为了获得更多图像功能,请使用 pil 依赖项安装 qrcode,这样就可以安装并使用 pillow 来生成图像
pip install "qrcode[pil]"
什么是二维码?
快速响应码(QR码)是一种用于快速读取和相对较大存储容量的二维图形码。该码由黑白模块组成,这些模块以正方形图案排列在白色背景上。编码的信息可以是任何类型的数据(例如,二进制、字母数字或汉字符号)
用法
从命令行使用已安装的 qr 脚本
qr "Some text" > test.png
或在Python中使用 make 快捷函数
import qrcode
img = qrcode.make('Some data here')
type(img) # qrcode.image.pil.PilImage
img.save("some_file.png")
高级用法
为了获得更多控制,请使用 QRCode 类。例如
import qrcode
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data('Some data')
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
version 参数是1到40之间的整数,用于控制二维码的大小(最小的版本1是一个21x21的矩阵)。将 None 设置为 fit 参数,在生成代码时自动确定。
fill_color 和 back_color 可以改变二维码的背景和绘画颜色,当使用默认的图像工厂时。这两个参数都接受RGB颜色元组。
img = qr.make_image(back_color=(255, 195, 235), fill_color=(55, 95, 35))
error_correction 参数控制二维码使用的纠错。在 qrcode 包中提供了以下四个常量
- ERROR_CORRECT_L
大约7%或更少的错误可以被纠正。
- ERROR_CORRECT_M(默认)
大约15%或更少的错误可以被纠正。
- ERROR_CORRECT_Q
大约25%或更少的错误可以被纠正。
- ERROR_CORRECT_H.
大约30%或更少的错误可以被纠正。
box_size 参数控制每个二维码“框”的像素数。
border 参数控制边框的框数厚度(默认是4,这是根据规格的最小值)。
其他图像工厂
您可以编码为SVG,或使用新的纯Python图像处理器来编码PNG图像。
下面的Python示例使用 make 快捷函数。相同的 image_factory 关键字参数是更高级用法中 QRCode 类的有效选项。
SVG
您可以创建整个SVG或SVG片段。当构建整个SVG图像时,您可以使用作为路径组合的工厂(推荐,并且是脚本的默认值)或创建一组简单矩形的工厂。
从您的命令行
qr --factory=svg-path "Some text" > test.svg qr --factory=svg "Some text" > test.svg qr --factory=svg-fragment "Some text" > test.svg
或在Python中
import qrcode
import qrcode.image.svg
if method == 'basic':
# Simple factory, just a set of rects.
factory = qrcode.image.svg.SvgImage
elif method == 'fragment':
# Fragment factory (also just a set of rects)
factory = qrcode.image.svg.SvgFragmentImage
else:
# Combined path factory, fixes white space that may occur when zooming
factory = qrcode.image.svg.SvgPathImage
img = qrcode.make('Some data here', image_factory=factory)
还有两个其他相关的工厂可用,它们的工作方式相同,但还填充了SVG的背景为白色
qrcode.image.svg.SvgFillImage qrcode.image.svg.SvgPathFillImage
QRCode.make_image() 方法将额外的关键字参数转发到底层 ElementTree XML 库。这有助于微调结果的根元素
import qrcode
qr = qrcode.QRCode(image_factory=qrcode.image.svg.SvgPathImage)
qr.add_data('Some data')
qr.make(fit=True)
img = qr.make_image(attrib={'class': 'some-css-class'})
您可以使用 to_string() 方法将SVG图像转换为字符串。额外的关键字参数转发到 ElementTrees tostring()
img.to_string(encoding='unicode')
纯Python PNG
如果没有安装Pillow,默认的图像工厂将是一个纯Python PNG编码器,使用 pypng。
您可以从命令行明确使用该工厂
qr --factory=png "Some text" > test.png
或在Python中
import qrcode
from qrcode.image.pure import PyPNGImage
img = qrcode.make('Some data here', image_factory=PyPNGImage)
样式化图像
仅适用于 版本 >=7.2(SVG样式图像需要7.4)。
要将样式应用于QR码,请使用StyledPilImage或标准SVG图像工厂之一。这些工厂接受一个可选的module_drawer参数来控制QR码的形状。
这些QR码不能保证与所有读取器兼容,所以请进行一些实验,并将错误纠正设置为高(特别是如果嵌入图像)。
其他PIL模块抽取器
对于SVG,请使用SvgSquareDrawer、SvgCircleDrawer、SvgPathSquareDrawer或SvgPathCircleDrawer。
这些都接受一个size_ratio参数,允许通过减小小于默认值Decimal(1)来创建“间隙”正方形或圆形。
StyledPilImage还接受一个可选的color_mask参数来更改QR码的颜色,以及一个可选的embeded_image_path来在码的中心嵌入图像。
其他颜色遮罩
以下是一个绘制具有圆角、径向渐变和嵌入图像的QR码的代码示例
import qrcode
from qrcode.image.styledpil import StyledPilImage
from qrcode.image.styles.moduledrawers.pil import RoundedModuleDrawer
from qrcode.image.styles.colormasks import RadialGradiantColorMask
qr = qrcode.QRCode(error_correction=qrcode.constants.ERROR_CORRECT_H)
qr.add_data('Some data')
img_1 = qr.make_image(image_factory=StyledPilImage, module_drawer=RoundedModuleDrawer())
img_2 = qr.make_image(image_factory=StyledPilImage, color_mask=RadialGradiantColorMask())
img_3 = qr.make_image(image_factory=StyledPilImage, embeded_image_path="/path/to/image.png")
示例
从print_ascii获取文本内容
import io
import qrcode
qr = qrcode.QRCode()
qr.add_data("Some text")
f = io.StringIO()
qr.print_ascii(out=f)
f.seek(0)
print(f.read())
add_data方法将数据追加到当前QR对象。要通过在同一对象中替换先前内容来添加新数据,首先使用清除方法
import qrcode
qr = qrcode.QRCode()
qr.add_data('Some data')
img = qr.make_image()
qr.clear()
qr.add_data('New data')
other_img = qr.make_image()
在命令行中将ascii输出到文本文件
qr --ascii "Some data" > "test.txt" cat test.txt
替代将输出管道到文件以避免PowerShell问题
# qr "Some data" > test.png qr --output=test.png "Some data"
变更日志
8.0 ( 27 September 2024)
7.4.2 (6 February 2023)
允许
工厂除了保存到类似文件的对象之外,还可以保存到字符串(如qr.save("some_file.png"))。
7.4.1 (3 February 2023)
修复了v7.4中的过度优化问题,该问题破坏了大型QR码。感谢mattiasj-axis!
7.4 (1 February 2023)
重构了工厂抽取器,允许在SVG图像工厂中使用不同的形状。
向qr控制台脚本添加了--factory-drawer选项。
优化了SVGPathImage工厂的输出(文件大小减少超过30%)。
添加了
图像工厂作为纯Python PNG解决方案。如果没有安装 ,则此成为默认工厂。 pymaging图像工厂已被删除,但其工厂快捷方式和实际的PymagingImage工厂类现在仅链接到PyPNGImage工厂。
7.3.1 (1 October 2021)
对嵌入图像的改进。
7.3 (19 August 2021)
如果QR是黑白颜色,则跳过颜色遮罩
7.2 (19 July 2021)
添加了Styled PIL图像工厂,允许QR码具有不同的颜色遮罩和形状
轻微的性能改进
添加了对边界大小参数的检查
7.1 (1 July 2021)
添加了命令行界面的–ascii参数,允许在标准输出被管道传输时输出ascii
添加了命令行界面的–output参数以指定输出文件
接受RGB元组作为fill_color和back_color
向SVG图像添加了to_string方法
将内联样式替换为SVG属性以避免CSP问题
将支持的版本添加Python3.10
7.0(2021年6月29日)
停止支持Python < 3.6
6.1(2019年1月14日)
修复短数据块没有被优化到正确模式的问题。
Python 3的测试修复完成。
6.0(2018年3月23日)
修复在QRCode.add_data中忽略优化长度的问题。
更好地计算最佳掩码模式和相关的优化。感谢cryptogun!
5.3(2016年5月18日)
修复QR版本15的完整块表。感谢Rodrigo Queiro的报告以及Jacob Welsh的调查和修复。
避免非MS平台不必要的依赖,感谢Noah Vesely。
让BaseImage.get_image()真正工作。
5.2(2016年1月25日)
向qr脚本添加--error-correction选项。
修复Python 3中脚本管道到stdout以及读取非UTF-8字符的问题。
修复Windows中的脚本管道问题。
为tinkerers添加一些有用的幕后方法。
修复使用Python 2.6时的终端输出问题。
修复终端输出以正确显示在MS命令行上。
5.2.1
Python 3中的终端输出小修复(以及修复测试)
5.2.2
撤销5.2中的一些终端更改,这些更改破坏了Python 3的实时tty代码生成,并引入了Jacob Welsh的更好的方法。
5.1(2014年10月22日)
使qr脚本在Windows上工作。感谢Ionel Cristian Mărieș。
在Python 3中修复print_ascii函数。
以ValueError更一致地处理越界代码版本号。
更好的测试覆盖率(现在官方支持Python 2.6+)
5.0(2014年6月17日)
速度优化。
更改使用qr脚本时的输出,以使用ASCII而不是仅使用颜色,更好地利用终端空间。
修复Python 3中直接传递字节码数据时的bug。
对最佳拟合算法进行子站速度优化(感谢Jacob Welsh!)。
引入print_ascii方法,并将其用作qr脚本的默认方法,而不是print_tty。
5.0.1
正确更新版本号。
4.0(2013年9月4日)
使qrcode在Python 2.4上工作。感谢tcely。注意:官方上,qrcode仅支持2.5+。
支持纯Python PNG生成(通过pymaging),适用于Python 2.6+ – 感谢Adam Wisniewski!
SVG图像生成现在支持交替尺寸(默认框大小为10等于1mm/矩形)。
SVG路径图像生成通过将所有QR矩形合并为单个路径,允许更干净的SVG输出。感谢Viktor Stískala。
添加了一些填充背景为白色的额外简单SVG工厂。
4.0.1
修复pymaging后端无法将图像保存到缓冲区的问题。感谢ilj!
4.0.2
修复由于版本4.0.2中正则表达式逗号修复而导致的错误正则表达式,使逗号被视为字母数字集的一部分。
切换到使用setuptools进行setup.py。
4.0.3
修复由于版本4.0.2中正则表达式逗号修复而导致的错误QR代码生成。
4.0.4
上一个热修复版本的版本号错误。
3.1(2013年8月12日)
对于错误的字母数字编码模式匹配的重要修复。以前,如果一行仅是字母数字(即使其他行不是),则模式会匹配。此外,字符{和}意外地成为有效字符。感谢Eran Tromer的报告和修复。
优化分块 – 如果数据流的部分可以更有效地编码,则数据将分成最有效模式的数据块。
3.1.1
更新变更日志以包含3.1版本更改。:P
给qr脚本添加一个--optimize参数,以控制块优化设置。
3.0 (2013年6月25日)
支持Python 3。
添加QRCode.get_matrix,这是一个获取包括边框在内的二维码矩阵数组的方法。感谢Hugh Rawlinson。
添加了一个解决方案,以便Python 2.6用户可以使用SVG生成(他们必须安装lxml)。
一些初始测试!并支持tox(pip install tox)进行跨Python平台测试。
2.7 (2013年3月5日)
修复了不正确的终止填充。
2.6 (2013年4月2日)
修复了错误地左移一位的前四列。感谢Josep Gómez-Suay的报告和修复。
修复了字符串在QR版本限制内4位不正确终止的问题。感谢zhjie231的报告。
2.5 (2013年3月12日)
PilImage包装器更加透明 - 您可以使用底层PIL Image实例的任何方法或属性。
修复了二维码的第一个列为空的问题!感谢BecoKo。
2.5.1
修复了Windows上的安装错误。
2.4 (2012年4月23日)
使用可插拔的后端系统生成图像,感谢Branko Čibej!内置PIL和SVG后端。
2.4.1
修复了包装问题
2.4.2
为PIL图像包装器添加了show方法,以便run_example函数实际上可以工作。
2.3 (2012年1月29日)
在添加数据时,自动选择更高效的编码方法用于数字和字母数字数据(KANJI仍然不支持)。
2.3.1
在将数据添加到QRCode时,将unicode编码为utf-8字节字符串。
2.2 (2012年1月18日)
修复了在白色和黑色背景上均能正常工作的tty输出。
添加了border参数,允许自定义用于创建二维码边框的框数量
2.1 (2012年1月17日)
添加了一个qr脚本,该脚本可以用于使用背景颜色将二维码输出到tty,或者通过管道输出到文件。
项目详情
下载文件
下载适合您平台的应用程序。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
qrcode-8.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 025ce2b150f7fe4296d116ee9bad455a6643ab4f6e7dce541613a4758cbce347 |
|
MD5 | 29561c9082864010f884d2fc5b3e62de |
|
BLAKE2b-256 | d7db6fc9631cac1327f609d2c8ae3680ecd987a2e97472437f2de7ead1235156 |
qrcode-8.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9fc05f03305ad27a709eb742cf3097fa19e6f6f93bb9e2f039c0979190f6f1b1 |
|
MD5 | 9357c249119c742ee5c226e6212c0315 |
|
BLAKE2b-256 | 74abdf8d889fd01139db68ae9e5cb5c8f0ea016823559a6ecb427582d52b07dc |