博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 的生成二维码生成库 -- qrcode
阅读量:4055 次
发布时间:2019-05-25

本文共 2383 字,大约阅读时间需要 7 分钟。

转载自:http://dhq.me/python-qr-code-generator

二维码简称 (Quick Response Code),学名为快速响应矩阵码,是二维条码的一种,由日本的  公司于 1994 年发明。现随着智能手机的普及,已广泛应用于平常生活中,例如商品信息查询、社交好友互动、网络地址访问等等。

安装 Python 的二维码库 -- qrcode

由于生成 qrcode 图片需要依赖 Python 的图像库,所以需要先安装 Python 图像库 (Python Imaging Library),不然会遇到 "ImportError: No module named Image" 的错误:

1
sudo
easy_install pil

如果安装 pil 时出现以下错误:

1
2
3
4
5
_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

在  上发现是 Mac 下所依赖的  链接变更问题,解决如下:

1
2
ln
-s 
/usr/local/include/freetype2
/usr/local/include/freetype
sudo
easy_install -U pil

安装  库:

1
sudo
easy_install qrcode

成功安装后,即可以在终端里使用 qr 命令生成二维码了:

1
qr 
"Just a test"
test
.png
1
qr --help

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
import
qrcode
 
 
qr 
=
qrcode.QRCode(
    
version
=
2
,
    
error_correction
=
qrcode.constants.ERROR_CORRECT_L,
    
box_size
=
10
,
    
border
=
1
)
qr.add_data(
""
)
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个系数:

  • ERROR_CORRECT_L: 7%的字码可被容错
  • ERROR_CORRECT_M: 15%的字码可被容错
  • ERROR_CORRECT_Q: 25%的字码可被容错
  • ERROR_CORRECT_H: 30%的字码可被容错

参数 box_size 表示二维码里每个格子的像素大小。

参数 border 表示边框的格子厚度是多少(默认是4)。

运行上面代码会生成敝站的一个 QR Code:

dhq.me QR Code

生成带有图标的二维码

二维码的容错系数(上面所指的 error_correction)越高,生成的二维码则可允许的残缺率越大,且二维码的数据主要保存在图片的四个角上,所以在二维码中间放一个小图标,对二维码的识别也是不受多大影响的。

对于插入在二维码上的图标大小,这里指定限制图标的大小尺寸最大是二维码长宽的 1/4,以免残缺太大,影响识别。

最后结合 Python 图像库(PIL)的操作,把图片黏贴(paste)在二维码图片的中间,便可以生成一个带有图标的二维码,具体操作代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import
Image
import
qrcode
 
 
qr 
=
qrcode.QRCode(
    
version
=
2
,
    
error_correction
=
qrcode.constants.ERROR_CORRECT_H,
    
box_size
=
10
,
    
border
=
1
)
qr.add_data(
""
)
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)
 
=
int
((img_w 
-
icon_w) 
/
2
)
=
int
((img_h 
-
icon_h) 
/
2
)
img.paste(icon, (w, h), icon)
 
img.save(
"dhqme_qrcode.png"
)

dhq.me QR Code Logo

你可能感兴趣的文章
linux kconfig配置
查看>>
linux不同模块completion通信
查看>>
linux printf获得时间戳
查看>>
C语言位扩展
查看>>
linux irqdebug
查看>>
git 常用命令
查看>>
linux位操作API
查看>>
uboot start.s文件分析
查看>>
没有路由器的情况下,开发板,虚拟机Ubuntu,win10主机,三者也可以ping通
查看>>
本地服务方式搭建etcd集群
查看>>
安装k8s Master高可用集群
查看>>
忽略图片透明区域的事件(Flex)
查看>>
忽略图片透明区域的事件(Flex)
查看>>
AS3 Flex基础知识100条
查看>>
Flex动态获取flash资源库文件
查看>>
01Java基础语法-16. while循环结构
查看>>
01Java基础语法-19. 循环跳转控制语句
查看>>
Django框架全面讲解 -- Form
查看>>
今日互联网关注(写在清明节后):每天都有值得关注的大变化
查看>>
”舍得“大法:把自己的优点当缺点倒出去
查看>>