ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python-web开发验证码的制作

2021-06-15 15:53:09  阅读:148  来源: 互联网

标签:web 150 Python randint 验证码 height width font


一、安装依赖包Pillow

pip install Pillow

二、验证码一般是放在一个项目的工具方法中

这里写图片描述

三、验证码的代码

#!/usr/bin/env python
# encoding: utf-8
from random import randint,choice
from PIL import Image,ImageDraw,ImageFont
from cStringIO import StringIO
from string import printable

def pillow_test():
    #设置选用的字体
    font_path = "utils/captcha/font/Arial.ttf"
    font_color = (randint(150, 200), randint(0, 150), randint(0, 150))
    line_color = (randint(0, 150), randint(0, 150), randint(150, 200))
    point_color = (randint(0, 150), randint(50, 150), randint(150, 200))

    #设置验证码的宽与高
    width, height = 100, 34
    image = Image.new("RGB",(width, height),(200,200,200))
    font = ImageFont.truetype(font_path,height - 10)
    draw = ImageDraw.Draw(image)

    #生成验证码
    text = "".join([choice(printable[:62]) for i in xrange(4)])
    font_width, font_height = font.getsize(text)
    #把验证码写在画布上
    draw.text((10, 10), text, font=font, fill=font_color)
    #绘制干扰线
    for i in xrange(0, 5):
        draw.line(((randint(0, width), randint(0, height)),
                   (randint(0, width), randint(0, height))),
                  fill=line_color, width=2)

    # 绘制点
    for i in xrange(randint(100, 1000)):
        draw.point((randint(0, width), randint(0, height)), fill=point_color)
    #输出
    out = StringIO()
    image.save(out, format='jpeg')
    content = out.getvalue()
    out.close()
    return text, content

四、创建一个视图返回验证码(基于tornado)

#获取图像验证码
class TestHandler(BaseHandler):
    def get(self):
        text, img = pillow_test()
        #设置头信息
        self.set_header("Content-Type", "image/jpg")
        self.write(img)

五、直接在前端页面中的img中使用这个视图

标签:web,150,Python,randint,验证码,height,width,font
来源: https://blog.51cto.com/u_3409716/2904168

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有