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内置的字符串处理函数详细整理(覆盖日常所用)
Aug 19 Python
详解python 发送邮件实例代码
Dec 22 Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 Python
python将文本分每两行一组并保存到文件
Mar 19 Python
python3 kmp 字符串匹配的方法
Jul 07 Python
python把数组中的数字每行打印3个并保存在文档中的方法
Jul 17 Python
在scrapy中使用phantomJS实现异步爬取的方法
Dec 17 Python
Python实现批量执行同目录下的py文件方法
Jan 11 Python
Python 正则表达式爬虫使用案例解析
Sep 23 Python
python如何导出微信公众号文章方法详解
Aug 31 Python
Python用requests库爬取返回为空的解决办法
Feb 21 Python
利用Python实现翻译HTML中的文本字符串
Jun 21 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程序之die调试法 快速解决错误
2009/09/17 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
2014/12/16 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
用JavaScript对JSON进行模式匹配(Part 1-设计)
2010/07/17 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
详解js模板引擎art template数组渲染的方法
2018/10/09 Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
2018/10/12 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
webpack+express实现文件精确缓存的示例代码
2020/06/11 Javascript
Nodejs实现微信分账的示例代码
2021/01/19 NodeJs
实例说明Python中比较运算符的使用
2015/05/13 Python
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
Python实现线程状态监测简单示例
2018/03/28 Python
python3获取当前文件的上一级目录实例
2018/04/26 Python
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
Django中使用Celery的方法示例
2018/11/29 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
Python新手如何进行闭包时绑定变量操作
2020/05/29 Python
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
CSS3 transition 实现通知消息轮播条
2020/10/14 HTML / CSS
学校运动会感想
2015/08/10 职场文书
生日宴会家属答谢词
2015/09/29 职场文书
2015年六年级班主任工作总结
2015/10/15 职场文书
SQL Server数据定义——模式与基本表操作
2021/04/05 SQL Server
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS
你需要掌握的20个Python常用技巧
2022/02/28 Python
nginx配置限速限流基于内置模块
2022/05/02 Servers