Python二维码生成库qrcode安装和使用示例


Posted in Python onDecember 16, 2014

二维码简称 QR Code(Quick Response Code),学名为快速响应矩阵码,是二维条码的一种,由日本的 Denso Wave 公司于 1994 年发明。现随着智能手机的普及,已广泛应用于平常生活中,例如商品信息查询、社交好友互动、网络地址访问等等。

安装 Python 的二维码库 -- qrcode

由于生成 qrcode 图片需要依赖 Python 的图像库,所以需要先安装 Python 图像库 PIL(Python Imaging Library),不然会遇到 "ImportError: No module named Image" 的错误:

sudo easy_install pil

如果安装 pil 时出现以下错误:

_imagingft.c:73:10: fatal error: 'freetype/fterrors.h' file not found

#include <freetype/fterrors.h>

         ^

1 error generated.

error: Setup script exited with error: command 'cc' failed with exit status 1

在 StackOverflow 上发现是 Mac 下所依赖的 FreeType 链接变更问题,解决如下:

ln -s /usr/local/include/freetype2 /usr/local/include/freetype

sudo easy_install -U pil

安装 qrcode 库:

sudo easy_install qrcode

成功安装后,即可以在终端里使用 qr 命令生成二维码了:

qr "Just a test" > test.png

qr --help

示例代码

import qrcode

 

 

qr = qrcode.QRCode(

    version=2,

    error_correction=qrcode.constants.ERROR_CORRECT_L,

    box_size=10,

    border=1

)

qr.add_data("http://3water.com/")

qr.make(fit=True)

img = qr.make_image()

img.save("dhqme_qrcode.png")

参数 version 表示生成二维码的尺寸大小,取值范围是 1 至 40,最小尺寸 1 会生成 21 * 21 的二维码,version 每增加 1,生成的二维码就会添加 4 尺寸,例如 version 是 2,则生成 25 * 25 的二维码。

参数 error_correction 指定二维码的容错系数,分别有以下4个系数:

1.ERROR_CORRECT_L: 7%的字码可被容错
2.ERROR_CORRECT_M: 15%的字码可被容错
3.ERROR_CORRECT_Q: 25%的字码可被容错
4.ERROR_CORRECT_H: 30%的字码可被容错

参数 box_size 表示二维码里每个格子的像素大小。

参数 border 表示边框的格子厚度是多少(默认是4)。

运行上面代码会生成敝站的一个 QR Code:

Python二维码生成库qrcode安装和使用示例

生成带有图标的二维码

二维码的容错系数(上面所指的 error_correction)越高,生成的二维码则可允许的残缺率越大,且二维码的数据主要保存在图片的四个角上,所以在二维码中间放一个小图标,对二维码的识别也是不受多大影响的。

对于插入在二维码上的图标大小,这里指定限制图标的大小尺寸最大是二维码长宽的 1/4,以免残缺太大,影响识别。

最后结合 Python 图像库(PIL)的操作,把图片黏贴(paste)在二维码图片的中间,便可以生成一个带有图标的二维码,具体操作代码如下:

import Image

import qrcode

 

 

qr = qrcode.QRCode(

    version=2,

    error_correction=qrcode.constants.ERROR_CORRECT_H,

    box_size=10,

    border=1

)

qr.add_data("http://3water.com/")

qr.make(fit=True)

 

img = qr.make_image()

img = img.convert("RGBA")

 

icon = Image.open("favicon.png")

 

img_w, img_h = img.size

factor = 4

size_w = int(img_w / factor)

size_h = int(img_h / factor)

 

icon_w, icon_h = icon.size

if icon_w > size_w:

    icon_w = size_w

if icon_h > size_h:

    icon_h = size_h

icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS)

 

w = int((img_w - icon_w) / 2)

h = int((img_h - icon_h) / 2)

img.paste(icon, (w, h), icon)

 

img.save("dhqme_qrcode.png")

Python二维码生成库qrcode安装和使用示例

PS:本站还提供了一个功能非常强大的二维码生成工具,感兴趣的朋友可以参考一下:

Python 相关文章推荐
Python使用回溯法子集树模板解决迷宫问题示例
Sep 01 Python
python添加模块搜索路径方法
Sep 11 Python
python 不以科学计数法输出的方法
Jul 16 Python
Selenium的使用详解
Oct 19 Python
python使用正则筛选信用卡
Jan 27 Python
Python 使用Numpy对矩阵进行转置的方法
Jan 28 Python
详解Django-restframework 之频率源码分析
Feb 27 Python
NumPy 基本切片和索引的具体使用方法
Apr 24 Python
python调用动态链接库的基本过程详解
Jun 19 Python
解决python super()调用多重继承函数的问题
Jun 26 Python
FFrpc python客户端lib使用解析
Aug 24 Python
Django获取应用下的所有models的例子
Aug 30 Python
Mac下Supervisor进程监控管理工具的安装与配置
Dec 16 #Python
Python 正则表达式(转义问题)
Dec 15 #Python
python正则表达式中的括号匹配问题
Dec 14 #Python
python的类方法和静态方法
Dec 13 #Python
Python计算程序运行时间的方法
Dec 13 #Python
Python编程中的反模式实例分析
Dec 08 #Python
Python实现拼接多张图片的方法
Dec 01 #Python
You might like
多文件上载系统完整版
2006/10/09 PHP
php将mysql数据库整库导出生成sql文件的具体实现
2014/01/08 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
PHP手机号码及邮箱正则表达式实例解析
2020/07/11 PHP
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
jquery操作select元素和option的实例代码
2016/02/03 Javascript
vue.js绑定class和style样式(6)
2016/12/09 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
javascript实现日期三级联动下拉框选择菜单
2020/12/03 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
2017/05/23 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
Angular4.0中引入laydate.js日期插件的方法教程
2017/12/25 Javascript
jQuery插件实现弹性运动完整示例
2018/07/07 jQuery
boostrap模态框二次弹出清空原有内容的方法
2018/08/10 Javascript
详解JS中统计函数执行次数与执行时间
2018/09/04 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
运用js实现图层拖拽的功能
2019/05/24 Javascript
使用apifm-wxapi快速开发小程序过程详解
2019/08/05 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
python获取指定路径下所有指定后缀文件的方法
2015/05/26 Python
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
python 中pyqt5 树节点点击实现多窗口切换问题
2019/07/04 Python
pip install 使用国内镜像的方法示例
2020/04/03 Python
英语国培研修感言
2014/02/13 职场文书
毕业实习指导教师评语
2014/12/31 职场文书
幼儿园新生开学寄语
2015/05/27 职场文书
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python