# 引入绘图模块 from PIL import Image, ImageDraw, ImageFont # 引入numpy生成随机数 import random # 随机生成一个画板颜色 bgcolor = (random.randrange(0, 256), random.randrange(0, 256), random.randrange(0, 256)) width = 100 # 定义宽度 height = 50 # 定义高度 # 创建画面对象,接受三个参数 # 参数一:表示三原色 # 参数二:宽度和高度 # 参数三:背景色 im = Image.new("RGB", (width, height), bgcolor) # 创建画笔对象,接受画面对象 draw = ImageDraw.Draw(im) # 调用画笔的point()函数绘制噪点 for i in range(100): # 噪点的横纵坐标 x_y_point = (random.randrange(0, width), random.randrange(0, height)) # 填充的颜色 fill = (random.randrange(0, 256), random.randrange(0, 256), random.randrange(0, 256)) # 绘制 draw.point(x_y_point, fill=fill) # 获取所有的字母加上数字 import string alpha_digit = string.digits + string.ascii_lowercase + string.ascii_uppercase # 随机选取四个作为验证码中的字符 verify_code = random.sample(alpha_digit, 4) # 构造字体对象 font = ImageFont.truetype(r'C:\Users\Administrator\Desktop\satori.ttf', 40) # 构造字体颜色,四个字符,构造四种随机颜色 fontcolor = [(random.randrange(0, 255), random.randrange(0, 255), random.randrange(0, 255)) for i in range(4)] # 绘制四个字符 draw.text((5, 5), verify_code[0], font=font, fill=fontcolor[0]) draw.text((25, 10), verify_code[1], font=font, fill=fontcolor[0]) draw.text((60, 5), verify_code[2], font=font, fill=fontcolor[0]) draw.text((85, 10), verify_code[3], font=font, fill=fontcolor[0]) # 释放画笔 del draw # 引入字节流,用于存储图片 from io import BytesIO buf = BytesIO() # 将图片的内容存储到buf当中,并制定格式 im.save(buf, 'png') # 将图片保存到本地 with open("verify_code.png", "wb") as f: f.write(buf.getvalue())