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中用于检查英文字母大写的isupper()方法
May 19 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
Mar 02 Python
基于hashlib模块--加密(详解)
Jun 21 Python
轻松实现TensorFlow微信跳一跳的AI
Jan 05 Python
python中实现将多个print输出合成一个数组
Apr 19 Python
python: 自动安装缺失库文件的方法
Oct 22 Python
PyTorch搭建一维线性回归模型(二)
May 22 Python
django页面跳转问题及注意事项
Jul 18 Python
wxpython多线程防假死与线程间传递消息实例详解
Dec 13 Python
Python动态导入模块和反射机制详解
Feb 18 Python
python代码能做成软件吗
Jul 24 Python
Django利用AJAX技术实现博文实时搜索
May 06 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
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
解析php中heredoc的使用方法
2013/06/17 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
2020/06/03 PHP
浅谈关于JavaScript的语言特性分析
2013/04/11 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
javascript学习笔记(六)数据类型和JSON格式
2014/10/08 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
jQuery实现动画效果circle实例
2015/08/06 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
jquery实现input框获取焦点的方法
2017/02/06 Javascript
Vue上传组件vue Simple Uploader的用法示例
2017/08/25 Javascript
使用selenium抓取淘宝的商品信息实例
2018/02/06 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
[01:26]DOTA2荣耀之路2:iG,China
2018/05/24 DOTA
Python编写一个闹钟功能
2017/07/11 Python
Python实现对一个函数应用多个装饰器的方法示例
2018/02/09 Python
pandas数据分组和聚合操作方法
2018/04/11 Python
Python 下载及安装详细步骤
2019/11/04 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
印度最大的酒店品牌网络:OYO Rooms
2016/07/24 全球购物
学校节能减排倡议书
2014/05/16 职场文书
大学生就业求职信
2014/06/12 职场文书
营销与策划专业求职信
2014/06/20 职场文书
小学师德师风演讲稿
2014/09/02 职场文书
教师党员整改措施
2014/10/24 职场文书
单位婚育证明范本
2014/11/21 职场文书
在K8s上部署Redis集群的方法步骤
2021/04/27 Redis
Python字典和列表性能之间的比较
2021/06/07 Python
MySQL如何解决幻读问题
2021/08/07 MySQL
MutationObserver在页面水印实现起到的作用详解
2022/07/07 Javascript