生成验证码
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()