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 相关文章推荐
使用Pyrex来扩展和加速Python程序的教程
Apr 13 Python
Python脚本文件打包成可执行文件的方法
Jun 02 Python
Ubuntu下创建虚拟独立的Python环境全过程
Feb 10 Python
Django中login_required装饰器的深入介绍
Nov 24 Python
一篇文章读懂Python赋值与拷贝
Apr 19 Python
python3实现磁盘空间监控
Jun 21 Python
解决PyCharm同目录下导入模块会报错的问题
Oct 13 Python
基于python二叉树的构造和打印例子
Aug 09 Python
Python3 文章标题关键字提取的例子
Aug 26 Python
PyTorch-GPU加速实例
Jun 23 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
Nov 28 Python
Python Pandas list列表数据列拆分成多行的方法实现
Dec 14 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
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
深入理解PHP内核(一)
2015/11/10 PHP
PHP中phar包的使用教程
2017/06/14 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
一段非常简单的让图片自动切换js代码
2006/11/10 Javascript
给网站上的广告“加速”显示的方法
2007/04/08 Javascript
jQuery插件jquery-barcode实现条码打印的方法
2015/11/25 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
2015/12/13 Javascript
微信小程序 less文件编译成wxss文件实现办法
2016/12/05 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
2017/02/23 Javascript
微信公众号菜单配置微信小程序实例详解
2017/03/31 Javascript
JS优化与惰性载入函数实例分析
2017/04/06 Javascript
Vue原理剖析 实现双向绑定MVVM
2017/05/03 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
vue-router 中 meta的用法详解
2019/11/01 Javascript
vue+axios全局添加请求头和参数操作
2020/07/24 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
Python中每次处理一个字符的5种方法
2015/05/21 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
详解通过API管理或定制开发ECS实例
2018/09/30 Python
python 二维数组90度旋转的方法
2019/01/28 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
浅谈Python 敏感词过滤的实现
2019/08/15 Python
建筑工程自我鉴定
2013/10/18 职场文书
汽车销售顾问求职自荐信
2014/01/01 职场文书
幼儿园中班教学反思
2014/02/10 职场文书
竞选部门副经理的自荐书范文
2014/02/11 职场文书
运动会入场词200字
2014/02/15 职场文书
幼儿园课题方案
2014/06/09 职场文书
出售房屋协议书范本
2014/10/06 职场文书
质量保证书格式
2015/02/27 职场文书
给下属加薪申请报告
2015/05/15 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
Django中的JWT身份验证的实现
2021/05/07 Python
解决mysql的int型主键自增问题
2021/07/15 MySQL