验证码小组件

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图片和验证号码

猜你喜欢

转载自www.cnblogs.com/hejunqing/p/9155780.html