生成验证码

2018-07-31  本文已影响0人  清晨起床敲代码

生成验证码比较简单,可以直接用,我这里直接拿了一个系统的字体文件(BELLB.TTF),也可以写一串代码从系统中获取。

from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random
import string


#生成随机字符串
def  GetRandomChar(count=4):
    #string模块包含各种字符串,以下为小写字母加数字
    myList = list(string.ascii_lowercase + string.digits)  # 指定要生成验      证码的集合,数字,小写字母
    # 在指定的mylist集合中随机取出count个集合
    lists = random.sample(myList, count)
    # 用指定的字符串连接集合中的内容
    return "".join(lists)

#返回一个随机的RGB颜色
def GetRandomColor():
    return  (random.randint(50,150),random.randint(50,150),random.randint(50,150))


def CreateCode(width = 120, higth = 50):
    #创建图片,模式,大小,背景色
    img = Image.new('RGB', (width, higth), (255, 255, 255))
    #创建画布
    draw = ImageDraw.Draw(img)
    #设置字体
    font = ImageFont.truetype('BELLB.TTF', higth)

    code = GetRandomChar()
    #将生成的字符画在画布上
    for t in range(4):
        draw.text((30*t+5, 0), code[t], GetRandomColor(),font)

    #生成干扰点
    for _ in range(random.randint(0,50)):
        #位置,颜色
        draw.point((random.randint(0, width), random.randint(0, higth)),fill= GetRandomColor())

    # 画干扰线
    for i in range(5):
        x = random.randint(0, 20)
        y = random.randint(0, higth)
        z = random.randint(width - 20, width)
        w = random.randint(0, higth)
        draw.line(((x, y), (z, w)), fill= GetRandomColor())
    #使用模糊滤镜使图片模糊
    img = img.filter(ImageFilter.SMOOTH_MORE)
    #保存
    #img.save(''.join(code)+'.jpg','jpeg')
    return img, code

if __name__ == '__main__':
    img, content = CreateCode()
    img.show()
上一篇下一篇

猜你喜欢

热点阅读