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中函数默认值使用注意点详解
Jun 01 Python
使用Turtle画正螺旋线的方法
Sep 22 Python
Python 实现使用dict 创建二维数据、DataFrame
Apr 13 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
Nov 06 Python
Python跳出多重循环的方法示例
Jul 03 Python
在SQLite-Python中实现返回、查询中文字段的方法
Jul 17 Python
Tensorflow读取并输出已保存模型的权重数值方式
Jan 04 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
May 23 Python
解决virtualenv -p python3 venv报错的问题
Feb 05 Python
Python实现文本文件拆分写入到多个文本文件的方法
Apr 18 Python
python3实现Dijkstra算法最短路径的实现
May 12 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
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
PHP中的错误处理、异常处理机制分析
2012/05/07 PHP
linux命令之调试工具strace的深入分析
2013/06/03 PHP
PHP批量去除BOM头内容信息代码
2016/03/11 PHP
Javascript技术技巧大全(五)
2007/01/22 Javascript
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
2015/03/03 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
详解Angular模板引用变量及其作用域
2018/11/23 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
2020/02/16 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
[01:15:36]加油刀塔第二期网络版
2014/08/09 DOTA
Python去除列表中重复元素的方法
2015/03/20 Python
Python CategoricalDtype自定义排序实现原理解析
2020/09/11 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
瑞典多品牌连锁店:Johnells
2021/01/13 全球购物
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
英文版区域经理求职信
2013/10/23 职场文书
感恩母亲节演讲稿
2014/05/07 职场文书
个人承诺书怎么写
2014/05/24 职场文书
应届生求职信
2014/05/31 职场文书
2014预备党员批评与自我批评思想汇报
2014/09/20 职场文书
乒乓球比赛通知
2015/04/27 职场文书
怎样写观后感
2015/06/19 职场文书
母亲节感言
2015/08/03 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android