python生成二维码
python之所以强大,就是因为他有强大的类库,无论是用于数据分析还是科学计算、以及应用于web开发等等。
还有就是简洁的语言,(本人一直觉得如果用简单通俗的语言能讲明白一个复杂的道理,说明你已经对这件事彻底的理解了)。
python就这样语言,能用简洁的代码,实现复杂的功能,并且还易于理解和掌握,不过无论用什么语言编程,最后都是玩
的思想....
今天就给大家说说python生成当下比较流行的二维码。
1、首先你需要安装两个类库
pip install qrcode #是个用来生成二维码图片的第三方模块,依赖于 PIL 模块
pip install pillow
2、以下就是简单的代码,如果内容没有超过2331(我自己测试的最大长度,不知道网上为什么说是1108)。
生成二维码图片后直接用手机扫码看内容
#!/usr/bin/env python # -*- coding:utf-8 -*- import qrcode str_data = ''' 这里是二维码内容测试,内容的最大长度2331 ''' print len(str_data) img = qrcode.make(str_data) img.save('/Users/gide/Downloads/erweima.jpg')
3、下面是更完整的带logo的二维码封装代码。我们生成一个直接搜索图书的二维码
logo图片
#!/usr/bin/env python # -*- coding:utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') """ 生成带logo的二维码 """ import qrcode from PIL import Image import os def gen_qrcode(string, path, logo=""): """ 生成中间带logo的二维码 需要安装qrcode, PIL库 :param string: 二维码字符串 :param path: 生成的二维码保存路径 :param logo: logo文件路径 :return: """ qr = qrcode.QRCode( version=6, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=8, border=1 ) qr.add_data(string) qr.make(fit=True) img = qr.make_image() img = img.convert("RGBA") if logo and os.path.exists(logo): icon = Image.open(logo) 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) icon = icon.convert("RGBA") img.paste(icon, (w, h), icon) img.save(path) if __name__ == "__main__": gen_qrcode('http://www.kindlepush.com/search/?sKey=%E6%B0%91%E5%9B%BD%E5%BA%95%E8%89%B2',"/Users/gide/Downloads/erweima.png","logo.jpg")
参数说明:
参数 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)。
运行代码后,会在代码的当前目录下生成一个erweima.png的二维码,用手机扫一下就可以直接跳转到搜索图书的页面了。
所以现在共享单车上贴的二维码其实就是个请求地址,你扫码后会发送参数请求他们的服务器,在服务端进行一系列验证后,就会
启动开锁功能。当然ofo这种单车刚开始很可能就是直接把实现生成好的随机数,返回给你一个,然后你可以使用了。当然真正实际
应用中会比较复杂。
OVER!