图片验证码推导逻辑,Image.new,ImageDraw, ImageFont.truetype的用法


#一,  创建图片并在图上添加文本 

from PIL import Image,ImageDraw,ImageFont
a = '我们不一样' # 定义文本
font = ImageFont.truetype('./font/platech.ttf',24) # 定义字体,这是本地自己下载的
img = Image.new('RGB',(300,300),(255,180,0)) # 新建长宽300像素,背景色为(255,180,0)的画布对象 
draw = ImageDraw.Draw(img) # 新建画布绘画对象
draw.text( (50,50), a,(255,0,0),font=font) # 在新建的对象 上坐标(50,50)处开始画出红色文本
# 左上角为画布坐标(0,0)点
img.show()
img.save('./logs/img.jpeg')


图片验证码代码实现


# 推导步骤4(最终推导)  在图片上写字
    img_obj = Image.new('RGB',(360,35),get_random())
    # 将生成好的图片对象交给ImageDraw
    img_draw = ImageDraw.Draw(img_obj)  # 生成了一个画笔对象
    # 字体样式
    img_font = ImageFont.truetype('static/font/111.ttf',30)

    # 随机验证码    大小写英文加数字   五位 每一位都可以是大写字母或小写字母或数字
    code = ''
    for i in range(5):
        upper_str = chr(random.randint(65,90))
        lower_str = chr(random.randint(97,122))
        random_int = str(random.randint(0,9))
        # 随机选取一个
        tmp = random.choice([upper_str,lower_str,random_int])
        # 朝图片上写一个
        img_draw.text((i*60+60,0),tmp,get_random(),img_font)
        # 存储写的字
        code += tmp
    print(code)
    # 这个验证码后面其他视图函数可能要用到  找个地方存储一下 并且这个地方全局的视图函数都能访问
    request.session['code'] = code
    io_obj = BytesIO()
    img_obj.save(io_obj,'png')
    return HttpResponse(io_obj.getvalue())


posted @ 2019-12-17 20:58  大海一个人听  阅读(1734)  评论(0编辑  收藏  举报