pillow模块生成验证码

from PIL import Image, ImageDraw, ImageFont

'''
Image   生成图片
ImageDraw   在图片上写字
ImageFont   字体样式
'''
from io import BytesIO, StringIO

'''
BytesIO     临时在内存中保存数据并且返回bytes格式
StringIO    临时在内存中保存数据并且返回字符串格式
'''
import random


# 生成一个三个值是0-255的一个元组
def get_random():
    return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)


# 图片验证码
def get_code(request):
    # 1.生成一个图片,图片的颜色是随机产生的
    img_obj = Image.new('RGB', (150, 30), get_random())
    # 2.将图片交给画笔对象
    img_draw = ImageDraw.Draw(img_obj)
    # 3. 生成一个字体对象  并设置字体的样式和字体大小
    img_font = ImageFont.truetype('static/fonts/2.ttf', 30)
    # 4.生成一个bytesio对象来存放图片数据
    io_obj = BytesIO()
    # 定义一个存储随机验证码的变量
    code = ''
    # 生成五位随机验证码,有大小写字母和数字
    for i in range(5):
        random_upper = chr(random.randint(65, 90))
        random_lower = chr(random.randint(97, 122))
        random_num = str(random.randint(0, 9))
        random_choice = random.choice([random_upper, random_lower, random_num])
        code += random_choice
        # 将每次生成的码设置随机颜色后写入图片
        img_draw.text((30 * i, 0), random_choice, get_random(), img_font)

    # 将验证码存入session中
    request.session['code'] = code
    img_obj.save(io_obj, 'png')
    return HttpResponse(io_obj.getvalue())
posted @ 2021-08-23 20:10  zheng-sn  阅读(46)  评论(0)    收藏  举报