视图接口开发-绘制完整图片验证码
import random
from PIL import Image, ImageDraw, ImageFont
from io import BytesIO
def code_img(request):
# 需要一张背景图
# (189, 244, 9) 0-255 red green #000fff
width = 159
height = 33
bgcolor = (random.randrange(20, 200), random.randrange(20, 200), random.randrange(20, 200))
im = Image.new('RGB', (width, height), color=bgcolor)
# 需要一些噪点500
draw = ImageDraw.Draw(im) # 创建一个画笔对象
for i in range(0, 500):
xy = (random.randrange(0, width), random.randrange(0, height))
fill = (random.randrange(0, 255), random.randrange(0, 255), random.randrange(0, 255))
draw.point(xy, fill=fill)
# 需要4个数字
str1 = '0123456789'
rand_str = ''
for i in range(0, 4):
rand_str += str1[random.randrange(0, len(str1))]
font = ImageFont.truetype('static/font/angsab.ttf', 23)
fill = (random.randrange(0, 255), random.randrange(0, 255), random.randrange(0, 255))
draw.text((5, 2), rand_str[0], font=font, fill=fill)
draw.text((23, 5), rand_str[1], font=font, fill=fill)
draw.text((59, 1), rand_str[2], font=font, fill=fill)
draw.text((92, 5), rand_str[3], font=font, fill=fill)
del draw
request.session['code'] = rand_str
buf = BytesIO()
im.save(buf, 'png')
return HttpResponse(buf.getvalue())