其他分享
首页 > 其他分享> > 验证码生成

验证码生成

作者:互联网

 1 from django.http import HttpResponse
 2 from PIL import Image, ImageDraw, ImageFont
 3 import random
 4 
 5 def rmdRGB():
 6     C1 = random.randrange(0,255)
 7     C2 = random.randrange(10,255)
 8     C3 =random.randrange(60,255)
 9     return (C1,C2,C3)
10 
11 def verifycode(request):
12     # 背景色,长度,宽度
13     # bgcolor = '#997679'
14     bgcolor = '#FFFFFF'
15     width = 100
16     height = 25
17     # 创建画布
18     im = Image.new('RGB',(width,height),bgcolor)
19     # 创建画笔
20     draw = ImageDraw.Draw(im)
21     # 画点
22     for i in range(0, 100):
23         xy=(random.randrange(0,width),random.randrange(0,height))
24         fill=(random.randrange(0,255),255,random.randrange(0,255))
25         draw.point(xy,fill=fill)
26 
27     # 添加文字
28     # str1 = 'ABCD123DEFGHIJK456LMNOPQRS789TUVWXYZ0'
29     # rand_str = ''
30     # for i in range(0,4):
31     #     rand_str += str1[random.randrange(0,len(str1))]
32     font = ImageFont.truetype('/usr/share/fonts/truetype/fonts-japanese-gothic.ttf',23)
33     # draw.text((5,2),rand_str,fill=rmdRGB(),font=font)
34 
35     numb_1 = {"1":"以","2":"贰","3":"叁","4":"肆","5":"伍","6":"陆","7":"柒","8":"捌","9":"玖",}
36     numb_2 = random.randint(1,50)
37     sign = ["+","-"]
38     numb_1_n = random.randrange(1,10)
39     numb_1_s = str(numb_1_n)
40     first_s = numb_1[numb_1_s]
41     third_s = str(numb_2)
42     sign_n = random.randrange(0,2)
43     second_s = sign[sign_n]
44     if sign_n == 0:
45         last = numb_1_n +numb_2
46     else:
47         last = numb_2 - numb_1_n
48     last_s = str(last)
49     draw.text((5,2),'?',font=font,fill=rmdRGB())
50     draw.text((20,2),second_s,font=font,fill=rmdRGB())
51     draw.text((35,2),first_s,font=font,fill=rmdRGB())
52     draw.text((60,2),'=',font=font,fill=rmdRGB())
53     draw.text((75,2),last_s,font=font,fill=rmdRGB())
54 
55     # 添加干扰线
56     for i in range(5):
57         x1 = random.randrange(0,width)
58         y1 = random.randrange(0,height)
59         x2 = random.randrange(0,width)
60         y2 = random.randrange(0, height)
61         draw.line((x1,y1,x2,y2),fill=rmdRGB())
62 
63     # 添加圆
64     for i in range(40):
65         x = random.randrange(0, width)
66         y = random.randrange(0, height)
67         draw.arc((x,y,x+4,y+4),0,90,fill=rmdRGB())
68 
69     # 结束
70     del draw
71     import io
72     buf = io.BytesIO()
73     im.save(buf,'png')
74     return HttpResponse(buf.getvalue(),'image/png')

 

标签:draw,randrange,random,验证码,生成,numb,font,fill
来源: https://www.cnblogs.com/yanhuazidi/p/10337373.html