49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
|
|
||
|
from random import randint
|
||
|
from PIL import Image, ImageDraw, ImageFont
|
||
|
|
||
|
|
||
|
def get_random_color():
|
||
|
# 随机颜色RGB
|
||
|
return randint(120, 200), randint(120, 200), randint(120, 200)
|
||
|
|
||
|
|
||
|
def get_random_code():
|
||
|
# 随机字符
|
||
|
codes = [[chr(i) for i in range(48, 58)], [chr(i) for i in range(65, 91)], [chr(i) for i in range(97, 123)]]
|
||
|
codes = codes[randint(0, 2)]
|
||
|
return codes[randint(0, len(codes)-1)]
|
||
|
|
||
|
|
||
|
def generate_captcha(width=140, height=60, length=4):
|
||
|
# 生成验证码
|
||
|
img = Image.new("RGB", (width, height), (250, 250, 250))
|
||
|
draw = ImageDraw.Draw(img)
|
||
|
font = ImageFont.truetype("static/font/font.ttf", size=36)
|
||
|
# 验证码文本
|
||
|
text = ""
|
||
|
for i in range(length):
|
||
|
c = get_random_code()
|
||
|
text += c
|
||
|
|
||
|
rand_len = randint(-5, 5)
|
||
|
draw.text((width * 0.2 * (i+1) + rand_len, height * 0.2 + rand_len), c, font=font, fill=get_random_color())
|
||
|
# 加入干扰线
|
||
|
for i in range(3):
|
||
|
x1 = randint(0, width)
|
||
|
y1 = randint(0, height)
|
||
|
x2 = randint(0, width)
|
||
|
y2 = randint(0, height)
|
||
|
draw.line((x1, y1, x2, y2), fill=get_random_color())
|
||
|
# 加入干扰点
|
||
|
for i in range(16):
|
||
|
draw.point((randint(0, width), randint(0, height)), fill=get_random_color())
|
||
|
# 保存图片
|
||
|
img.save("static/captcha/" + text + ".jpg")
|
||
|
return text + ".jpg"
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
for i in range(1000):
|
||
|
generate_captcha()
|