测试环境:python3.4
生活中非常常见的正方形二维码,除右小角外其他三个边角都有一个黑色矩形框,二维码中间可以有图片,如下图:
优点
具有存储的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强等优点。
具有可四个级别的纠错能力:
python-qrcode是个用来生成二维码图片的第三方模块,依赖于 PIL 模块。
运行命令行工具(cmd),使用pip安装工具分别安装qrcode和pillow。
pip install qrcode
pip install pillow
为什么安装的不是PIL呢?PIL模块只支持python2.7及以下版本,python3之后无法使用,官方推荐python3.x使用pillow代替PIL模块,实际上pillow的与PIL完全兼容,部分功能还得到完善。
如果不想使用pip安装,或者想单独下载离线安装,请登陆python官网PyPI栏目,搜索pillow,并选择最新版本。当前最新版本:Pillow3.2
如果安装过程中没有遇到问题,请跳过。
1. PIL无法安装,PyPI查找PIL发现不支持python3.x以上版本。安装pillow。
2. 提示pip版本过低,需要升级,按照提示信息内容,执行cmd命令 python -m pip install --upgrade pip
升级pip版本。
pip版本过低提示信息:
You are using pip version 8.0.3, however version 8.1.1 is available.You should consider upgrading via the ‘python -m pip install –upgrade pip’ command.
欲快速掌握一个模块的基本用法,莫过于阅读模块提供的测试用例或者demo程序,对于需求简单的功能,只需在demo的基础上略微升级改造即可满足要求。一起来看看qrcode的example。
import qrcode
qrcode.run_example()
运行结束后自动打开一张生成好的二维码图片。源码example()的实现如下:
def run_example(data="http://www.lincolnloop.com", *args, **kwargs):
"""
Build an example QR Code and display it.
There's an even easier way than the code here though: just use the ``make``
shortcut.
"""
qr = QRCode(*args, **kwargs)
qr.add_data(data)
im = qr.make_image()
im.show()
生成二维码的步骤:
1. 创建QRCode对象
2. add_data()添加数据
3. make_image()创建二维码(返回im类型的图片对象)
4. 自动打开图片,im.show()
将网站URL地址生成二维码图片,以.png的形式保存图片到本地,自动显示生成结果。
import qrcode
data = 'http://write.blog.csdn.net/'
img_file = r'D:\py_qrcode.png'
img = qrcode.make(data)
# 图片数据保存至本地文件
img.save(img_file)
# 显示二维码图片
img.show()
此处并没有使用add_data()添加数据,make_image()生成二维码,而是使用qrcode.make(data)的方式获取im对象。qrcode.make()是qrcode提供简单调用接口。
qrcode.make()函数实现中封装qrcode对象创建、添加数据、生成im对象的操作。
源代码如下:
def make(data=None, **kwargs):
qr = QRCode(**kwargs)
qr.add_data(data)
return qr.make_image()
文章开头提到qrcode可以选择不同的纠错级别,生成不同大小的二维码图片,只需要在实例化QRCode设置不同的参数,就能满足要求。
import qrcode
data = 'http://write.blog.csdn.net/'
img_file = r'D:\py_qrcode.png'
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4
)
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image()
img.save(img_file)
img.show()
QRCode参数详细说明:
Python下使用QRCode模块,生成二维码