美文网首页
生成验证码

生成验证码

作者: 清晨起床敲代码 | 来源:发表于2018-07-31 14:50 被阅读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()
    

    相关文章

      网友评论

          本文标题:生成验证码

          本文链接:https://www.haomeiwen.com/subject/mbhhvftx.html