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脚本来获取Cisco设备信息的示例
May 04 Python
深入理解python多进程编程
Jun 12 Python
python中ASCII码字符与int之间的转换方法
Jul 09 Python
Python Pandas批量读取csv文件到dataframe的方法
Oct 08 Python
Python3数字求和的实例
Feb 19 Python
Python实现的爬取小说爬虫功能示例
Mar 30 Python
python实现的汉诺塔算法示例
Oct 23 Python
Python实现Word表格转成Excel表格的示例代码
Apr 16 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
May 15 Python
Pycharm添加虚拟解释器报错问题解决方案
Oct 13 Python
Python基于mediainfo批量重命名图片文件
Dec 29 Python
Python数据分析之绘图和可视化详解
Jun 02 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
PHP调用Webservice实例代码
2011/07/29 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
List all the Databases on a SQL Server
2007/06/21 Javascript
js动画效果制件让图片组成动画代码分享
2014/01/14 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
2016/03/05 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
AngularJS入门之动画
2016/07/27 Javascript
js显示动态时间的方法详解
2016/08/20 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
微信小程序实现日历效果
2018/12/28 Javascript
vue中input的v-model清空操作
2019/09/06 Javascript
[01:14:19]NAVI vs Mineski 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Python使用Flask框架获取当前查询参数的方法
2015/03/21 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
2019/04/10 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
CSS3+JavaScript实现炫酷呼吸效果的示例代码
2020/06/15 HTML / CSS
策划主管的工作职责
2013/11/24 职场文书
2014年小学元旦活动方案
2014/02/12 职场文书
乡镇干部十八大感言
2014/02/17 职场文书
吨的认识教学反思
2014/04/27 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
水电施工员岗位职责
2015/04/11 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
同学联谊会邀请函
2019/06/24 职场文书
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL
Python循环之while无限迭代
2022/04/30 Python