Python使用qrcode二维码库生成二维码方法详解


Posted in Python onFebruary 17, 2020

安装qrcode库

pip install qrcode

声明

import qrcode

使用qrcode

QRCode 方法

qrcode.QRCode(
  version=1,
  error_correction=qrcode.ERROR_CORRECT_L,
  box_size=10,
  border=4,
  image_factory=None,
  mask_pattern=None
)

参数解释:

  • version:控制二维码的大小,取值范围从1到40。取最小值1时,二维码大小为21*21。取值为 None (默认)或者使用fit=true参数(默认)时,二维码会自动调整大小。
  • error_correction:控制二维码纠错级别。

    ERROR_CORRECT_L:大约7%或者更少的错误会被更正。

    ERROR_CORRECT_M:默认值,大约15%或者更少的错误会被更正。

    ERROR_CORRECT_Q:大约25%或者更少的错误会被更正。

    ERROR_CORRECT_H:大约30%或者更少的错误会被更正。

  • box_size:控制二维码中每个格子的像素数,默认为 10。
  • border:控制二维码四周留白包含的格子数,默认为4。
  • image_factory:选择生成图片的形式,默认为 PIL 图像。
  • mask_pattern:选择生成图片的的掩模。

qrcode方法属性解释:

常用方法:

  • add_data(str,optimize=20):添加要转换的文字到data参数;如果使用了optimize优化参数,数据将被拆分为多个块来进行优化,以找到一个长度至少为这个值的足够简洁的方式来生成二维码。设置为“0”以避免优化。
  • make(fit=True):当fit参数为真或者没有给出version参数时,将会调用best_fit方法来找到适合数据的最小尺寸。如果没有设置mask_pattern,将会调用best_mask_pattern方法来找到找到最有效的掩模图案。最后将这些数据传递给makeImpl方法来生成二维码。与qrcode本体的make方法不一样的是,这个方法没有任何返回值。
  • make_image(fill_color=None, back_color=None,image_factory=None):创建二维码的图像并返回,默认为 PIL 图像。如果要让二维码有颜色,可以在这里设置fill_color, back_color
  • clear:清空数据
  • get_matrix:返回二维码数组。
  • print_ascii(out=None, tty=False, invert=False):这个方法就比较有趣了,可以用字符画的形式来输出二维码,但是扫的时候一般都扫不出来。

Python使用qrcode二维码库生成二维码方法详解

其中的invert参数是决定是否反转颜色的参数,默认为假,如果为真的话会这样:

Python使用qrcode二维码库生成二维码方法详解

其他方法:

  • best_fit(start=self.version):找到适合数据所需的最小尺寸。
  • best_mask_pattern():找到最有效的掩模图案。
  • makeImpl(test, mask_pattern):生成二维码的直接函数
  • map_data:(内部函数,无需了解)
  • print_tty(out=None):用TTY颜色输出二维码,如果没有给出out参数,会使用sys.stdout。
  • setup_position_adjust_pattern:(内部函数,无需了解)
  • setup_position_probe_pattern:(内部函数,无需了解)
  • setup_timing_pattern:(内部函数,无需了解)
  • setup_type_info:(内部函数,无需了解)
  • setup_type_number:(内部函数,无需了解)

属性(这些大家基本都不用管):

  • border:
  • box_size:
  • data_cache:
  • data_list:
  • error_correction:
  • image_factory:
  • mask_pattern:
  • modules:
  • modules_count:
  • version:

生成 SVG 图像

qrcode可以生成三种不同的svg图像,一种是用路径表示的svg,一种是用矩形集合表示的完整svg文件,还有一种是用矩形集合表示的svg片段。第一种用路径表示的svg其实就是矢量图,可以在图像放大的时候可以保持图片质量,而另外两种可能会在格子之间出现空隙。

这三种分别对应了svg.py中的SvgPathImage、SvgImage和SvgFragmentImage类。在调用qrcode.make函数或者实例化QRCode时当作image_factory参数的值传入就可以了。

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)

生成 PNG 图像

执行命令安装pymaging相关模块:

pip install git+git://github.com/ojii/pymaging.git#egg=pymaging

pip install git+git://github.com/ojii/pymaging-png.git#egg=pymaging-png

然后给image_factor参数传入qrcode.image.pure.PymagingImage就可以生成PNG图片了。

import qrcode
from qrcode.image.pure import PymagingImage
img = qrcode.make('Some data here', image_factory=PymagingImage)

这是作者推荐的方式,但是我个人认为,完全没有必要这么麻烦,直接用默认的 PIL 就可以获取 PNG 图片了,例子看下文。

make 方法

make方法实际上就是在内部调用了QRCode(要转换的文本).make_image(),最后(默认)返回了一个PIL图像对象。

# 显示图片
qrcode.make("hello world!").show()
# 保存 PNG 图片
qrcode.make("hello world!").save('hello.png')

run_example 方法

生成一个作者项目网站地址的二维码并显示出来。

更多关于Python使用qrcode二维码库生成二维码方法请查看下面的相关链接

Python 相关文章推荐
跟老齐学Python之玩转字符串(2)
Sep 14 Python
Python Queue模块详解
Nov 30 Python
将Python代码嵌入C++程序进行编写的实例
Jul 31 Python
解决pandas中读取中文名称的csv文件报错的问题
Jul 04 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
Jan 24 Python
python使用PyQt5的简单方法
Feb 27 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
Jan 18 Python
浅谈python之自动化运维(Paramiko)
Jan 31 Python
Django如何使用jwt获取用户信息
Apr 21 Python
Python xlwt模块使用代码实例
Jun 10 Python
python安装mysql的依赖包mysql-python操作
Jan 01 Python
详解Golang如何实现支持随机删除元素的堆
Sep 23 Python
django2.2 和 PyMySQL版本兼容问题
Feb 17 #Python
基于python3的socket聊天编程
Feb 17 #Python
python词云库wordCloud使用方法详解(解决中文乱码)
Feb 17 #Python
python词云库wordcloud的使用方法与实例详解
Feb 17 #Python
tensorflow保持每次训练结果一致的简单实现
Feb 17 #Python
Python基于Socket实现简单聊天室
Feb 17 #Python
TFRecord文件查看包含的所有Features代码
Feb 17 #Python
You might like
PHP.MVC的模板标签系统(四)
2006/09/05 PHP
PHP字符串的编码问题的详细介绍
2013/04/27 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
window.dialogArguments 使用说明
2011/04/11 Javascript
js三种排序算法分享
2012/08/16 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
用js格式化金额可设置保留的小数位数
2014/05/09 Javascript
jQuery将多条数据插入模态框的示例代码
2014/09/25 Javascript
js在IE与firefox的差异集锦
2014/11/11 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
纯js实现仿QQ邮箱弹出确认框
2015/04/29 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
2016/11/28 Javascript
如何解决hover在ie6中的兼容性问题
2016/12/15 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
vue利用v-for嵌套输出多层对象,分别输出到个表的方法
2018/09/07 Javascript
python 字符串格式化代码
2013/03/17 Python
python 切片和range()用法说明
2013/03/24 Python
浅析python递归函数和河内塔问题
2017/04/18 Python
python基础教程项目五之虚拟茶话会
2018/04/02 Python
pandas 读取各种格式文件的方法
2018/06/22 Python
OpenCV 边缘检测
2019/07/10 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
2019/11/15 Python
python GUI计算器的实现
2020/10/09 Python
火山动力Java笔试题
2014/06/26 面试题
函授本科自我鉴定
2013/11/03 职场文书
思想汇报格式
2014/01/05 职场文书
体育教学随笔感言
2014/02/24 职场文书
公司年会抽奖活动主持词
2014/03/31 职场文书
教师批评与自我批评心得体会
2014/10/16 职场文书
老龙头导游词
2015/02/11 职场文书
教师节祝酒词
2015/08/11 职场文书