上班忙里偷闲,更新一下昨天的项目。
首先展示一下项目的目录树形图:
上代码:
1 # -*- coding:utf-8 -*- 2 3 import qrcode 4 import web 5 import time 6 from PIL import Image 7 import sys 8 reload(sys) 9 sys.setdefaultencoding('utf8') 10 '''不添加sys模块的setdefaultencoding方法,将会报错: 11 UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 17: ordinal not in range(128) ''' 12 13 14 #urls是一个元祖对象,左边的'/'是代表首页的意思,右边的‘Index’是映射到下文的Index类 15 urls = ( 16 '/', 'Index' 17 18 ) 19 render = web.template.render('templates') #此行代码作用是调用templates文件夹下的html模板 20 21 22 def code(info): 23 qr = qrcode.QRCode( 24 #二维码的基本配置: 25 version = 1, #二维码的大小12*12 26 error_correction = qrcode.constants.ERROR_CORRECT_H, #二维码容错率,容错率越高,越容易被识别,中间的图片可以设置越大,二维码越密集;容错率最小,中间不能内嵌图片,二维码稀疏 27 box_size = 10, 28 border = 4, 29 ) 30 #二维码的数据导入: 31 qr.add_data( 32 ''' 33 BEGIN:VCARD\n #名片开始 34 VERSION:3.0\n #版本3.0 35 FN:%s\n #名字 36 ORG:%s\n #公司 37 TITLE:%s\n #职位 38 ADR;WORK:%s\n #地址 39 TEL;WORK:%s\n #联系电话 40 EMAIL;WORK:%s\n #邮箱 41 URL:%s\n #个人主页 42 NOTE:%s\n #备注 43 END:VCARD #名片结束 44 ''' % (info['name'], info['company'], info['title'], info['address'], info['mobile'], info['email'], info['url'],info['desc']) 45 ) #添加数据 46 img = qr.make_image() #创建二维码 47 img = img.convert("RGBA") #转换为黑白格式 48 icon = Image.open("static/images/logo1.png") #打开图片 49 img_w, img_h = img.size #整个二维码的宽高 50 n = 4 51 size_w = int(img_w/n) #size是二维码中间Logo图片的宽和高 52 size_h = int(img_w/n) 53 54 icon_w, icon_h = icon.size #获取原始图片的宽高 55 if icon_w > size_w: #假如原始图片的宽度大于二维码中间Logo图片,则让原始图片宽度等于二维码中间Logo图片的宽度 56 icon_w = size_w 57 if icon_h > size_h: #同上 58 icon_h = size_w 59 icon = icon.resize((icon_w, icon_h), Image.ANTIALIAS) #重采样 60 w = int(img_w-icon_w)/2 #二维码区域的宽度 61 h = int(img_h-icon_h)/2 #二维码区域的高度 62 img.paste(icon, (w,h), icon) #将图片粘贴到二维码中 63 64 '''生成的二维码的路径保存位置, 65 必须事先在static文件夹下创建CardImg文件夹,否则会报错 66 ''' 67 path = "static/CardImg/%s.png" % time.time() 68 img.save(path) #保存二维码 69 return path 70 71 class Index(object): 72 def GET(self): #浏览器请求后,web服务输出index.html 73 return render.index() 74 def POST(self): #输入完表单,点击生成二维码的请求 75 print web.input() 76 return code(web.input()) #返回图片地址 77 78 if __name__ == '__main__': #主函数,启动web服务 79 web.application(urls, globals()).run()
注:1、web框架实现服务的启动:
(1)import web
(2)url('匹配路由', '视图类')
(3)render = web.template.render('templates') #绑定html模板所在的文件夹
(4)class 视图类(object) :
GET(self):
return render.xxx() #xxx是templates目录下的html文件
POST(self): #假如涉及到表单提交,就用POST方法
pass
(5)主函数运行
if __name__ == '__main__': #主函数,启动web服务 web.application(urls, globals()).run() #globals()返回包含当前范围的全局变量的字典。
2、二维码名片格式:vcard
参考:http://www.cnblogs.com/qqhfeng/p/3584739.html 写得挺详细的,赞一个
以上就是对代码的详细解释,要是写得有什么不对的地方,欢迎大家轻轻地提出批评意见,在此谢谢大家!反正我也不会改( wo hui hao hao gai jin de )。