def validate(request): mstream = StringIO.StringIO() validate_code = create_validate_code() img = validate_code[0] img.save(mstream, "GIF") request.session['validate'] = validate_code[1] return HttpResponse(mstream.getvalue(), "image/gif")
def get_validate(): """生成验证码 """ from validate import create_validate_code import StringIO mstream = StringIO.StringIO() img, code = create_validate_code() img.save(mstream, "PNG", quality=70) session['validate'] = code buf_str = mstream.getvalue() response = app.make_response(buf_str) response.headers['Content-Type'] = 'image/png' return response
0, 0, 0, 1 - float(random.randint(1, 10)) / 100, float(random.randint(1, 2)) / 500, 0.001, float(random.randint(1, 2)) / 500 ] img = img.transform(size, Image.PERSPECTIVE, params) # create distorstion img = img.filter(ImageFilter.EDGE_ENHANCE_MORE) # 滤镜,边界加强(阈值更大) return img, strs if __name__ == "__main__": code_img = create_validate_code() code_img[0].save("validate.gif", "GIF") code_img[0].show() ''' 最后结果返回一个元组,第一个返回值是Image类的实例,第二个参数是图片中的字符串(比较是否正确的作用)。 最后结果返回一个元组,第一个返回值是Image类的实例,第二个参数是图片中的字符串(比较是否正确的作用)。 需要提醒的是,如果在生成ImageFont.truetype实例的时候抛出IOError异常,有可能是运行代码的电脑没有包含指定的字体,需要下载安装。 这时候,细心的同学可能要问,如果每次生成验证码,都要先保存生成的图片,再显示到页面。这么做让人太不能接受了。这个时候,我们需要使用python内置的StringIO模块,它有着类似file对象的行为,但是它操作的是内存文件。于是,我们可以这么写代码: '''