导入刚刚安装的Pillow包
from PIL import Image, ImageDraw, ImageFont
def verifyCode(requset):
print("-----------")
# 引入随机函数模块
import random
# 定义变量,用于画面的背景色、宽、高
bgcolor = (random.randrange(20, 100), random.randrange(20, 100), random.randrange(20, 100))
print("-----------1")
width = 100
height = 25
# 创建画布对象
im = Image.new('RGB', (width, height), bgcolor)
# 创建画笔对象
draw = ImageDraw.Draw(im)
print("-----------2")
# 调用画笔的poin()函数绘制噪点
for i in range(0, 100):
xy = (random.randrange(0,width), random.randrange(0, height))
fills = (random.randrange(0,255), 255, random.randrange(0, 255))
draw.point(xy, fill=fills)
# 定义验证码的备选值
print("-----------3")
str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0'
# 随机选取4个值作为验证码
rand_str = ''
print("-----------4")
for i in range(0, 4):
rand_str += str1[random.randrange(0, len(str1))]
print("-----------5")
# 构造字体对象
# ubuntu的字体路径:“/usr/share/fonts/truetype/freefont”
# 因此这段代码只能在Linux下运行,如果要在window环境下请自己选择window的免费字体
font = ImageFont.truetype('C:\Windows\Fonts\AGaramondPro-Regular.otf', 23)
#构造字体颜色
print("-----------6")
fontcolor1 = (255, random.randrange(0, 255), random.randrange(0, 255))
fontcolor2 = (255, random.randrange(0, 255), random.randrange(0, 255))
fontcolor3 = (255, random.randrange(0, 255), random.randrange(0, 255))
fontcolor4 = (255, random.randrange(0, 255), random.randrange(0, 255))
#绘制4个字
draw.text((5, 2), rand_str[0], font=font, fill=fontcolor1)
draw.text((25, 2), rand_str[1], font=font, fill=fontcolor2)
draw.text((50, 2), rand_str[2], font=font, fill=fontcolor3)
draw.text((75, 2), rand_str[3], font=font, fill=fontcolor4)
# 释放画笔
print("-----------7")
del draw
# 存入session,用于做进一步验证
# request.session['verifycode'] = rand_str
# 内存文件操作
# 因为验证码是随用随弃的,无需在硬盘中长期存储,所以选择使用内存文件操作
# 注意:Python3内存文件操作是io.BytesIO模块与Python2不一样
from io import BytesIO
buf = BytesIO()
# 下面给出了Python2 的内存文件操作:
# 内存文件操作(python2)
# import cStringIO
# buf = cStringIO.StringIO()
#将图片保存在内存中,文件类型为png
im.save(buf, 'png')
#将内存中的图片数据返回给客户端,MIME类型为图片png
return HttpResponse(buf.getvalue(), 'image/png')
本文转载修改他人代码
html实现
view实现