python基于PIL模块写的验证码小组件:
import random from PIL import Image,ImageDraw,ImageFont,ImageFilter from static.character import * #导入字体类型 def check_code(width=120,height=30,char_length=5,font_file='kumo.ttf',font_size=28): code=[] img=Image.new(mode='RGB',size=(width,height),color=(255,255,255)) draw=ImageDraw.Draw(img,mode='RGB') def rdChar(): '''生成随机字母''' return chr(random.randint(65,90)) def rdColor(): '''生成随机颜色''' return (random.randint(0,255),random.randint(0,255),random.randint(0,255)) font=ImageFont.truetype(font_file,font_size) # 写文字 for i in range(char_length): char=rdChar() code.append(char) h=random.randint(0,8) draw.text([i*width/char_length,h],char,font=font,fill=rdColor()) # 写干扰点 for i in range(20): draw.point([random.randint(0,width),random.randint(0,height)],fill=rdColor()) # 写干扰圆圈 for i in range(20): draw.point([random.randint(0, width), random.randint(0, height)], fill=rdColor()) x=random.randint(0,width) y=random.randint(0,height) draw.arc((x,y,x+4,y+4),0,90,fill=rdColor()) # 画干扰线 for i in range(5): x1=random.randint(0,width) y1=random.randint(0,height) x2=random.randint(0,width) y2=random.randint(0,height) draw.line((x1,y1,x2,y2),fill=rdColor()) img=img.filter(ImageFilter.EDGE_ENHANCE_MORE) #过滤 return img,''.join(code)
返回img图片和验证号码