跳转到主要内容

二维码图像生成器

项目描述

纯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_colorback_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模块抽取器

doc/module_drawers.png

对于SVG,请使用SvgSquareDrawerSvgCircleDrawerSvgPathSquareDrawerSvgPathCircleDrawer

这些都接受一个size_ratio参数,允许通过减小小于默认值Decimal(1)来创建“间隙”正方形或圆形。

StyledPilImage还接受一个可选的color_mask参数来更改QR码的颜色,以及一个可选的embeded_image_path来在码的中心嵌入图像。

其他颜色遮罩

doc/color_masks.png

以下是一个绘制具有圆角、径向渐变和嵌入图像的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)

  • 添加对Python 3.11和3.12的支持。

  • 停止支持Python <=3.8。

  • 将本地开发设置改为使用Poetry

  • 通过Github Actions进行测试套件和代码质量检查。

  • 代码质量和格式化使用ruff

  • 由于Python 3.9+成为要求,因此已移除typing_extensions作为依赖项。

  • 在生成嵌入图像的QR码时,仅允许高错误纠正率(qrcode.ERROR_CORRECT_H)以确保内容可读

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 (42.7 kB 查看哈希值)

构建分发

qrcode-8.0-py3-none-any.whl (45.7 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面