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 sqlobject(mysql)中文乱码解决方法
Nov 14 Python
Python的Urllib库的基本使用教程
Apr 30 Python
python去除文件中空格、Tab及回车的方法
Apr 12 Python
浅述python中argsort()函数的实例用法
Mar 30 Python
python3基于OpenCV实现证件照背景替换
Jul 18 Python
TensorFlow 合并/连接数组的方法
Jul 27 Python
Python实现的在特定目录下导入模块功能分析
Feb 11 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
Jun 14 Python
python如何把字符串类型list转换成list
Feb 18 Python
django日志默认打印request请求信息的方法示例
May 17 Python
Python基于unittest实现测试用例执行
Nov 25 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 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中截取中文字符串的代码小结
2011/07/17 PHP
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
php实现读取手机客户端浏览器的类
2015/01/09 PHP
JS 继承实例分析
2008/11/04 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
浅谈checkbox的一些操作(实战经验)
2013/11/20 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
JavaScript数组的定义及数字操作技巧
2016/06/06 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
jQuery实现页面顶部下拉广告
2016/12/30 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
layer.alert自定义关闭回调事件的方法
2019/09/27 Javascript
JavaScript canvas基于数组生成柱状图代码实例
2020/03/06 Javascript
js实现炫酷光感效果
2020/09/05 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
Python中的Numpy矩阵操作
2018/08/12 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
python内置模块collections知识点总结
2019/12/19 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
使用python批量转换文件编码为UTF-8的实现
2020/04/03 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
C语言开发工程师测试题
2016/12/20 面试题
网络研修随笔感言
2014/02/17 职场文书
2014小学植树节活动总结
2014/03/10 职场文书
保洁员岗位职责
2015/02/04 职场文书
2015年妇女工作总结
2015/05/14 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
小学班主任心得体会
2016/01/07 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers