from random import randint , choice from PIL import Image , ImageDraw , ImageFont # 制作随机验证码:数字,大小写字母 def get_random_code(): # 随机数字 number = str(randint(0,9)) # 随机大写字母 upper = chr(randint(65 , 90)) # 随机小写字母 lower = chr(randint(97 , 122)) # 在大小字母和数字中随机获取一个 code = choice([number , upper , lower]) return code # 获取随机颜色 def get_color(): return (randint(0,255),randint(0,255),randint(0,255)) # 制作图片 def create_img(): # 创建图片对象 img = Image.new(mode='RGB' , size=(150 , 30) , color=get_color()) # 创建画笔工具 draw = ImageDraw.Draw(img) # 制作图片噪点 # 噪点 for i in range(70): # point([xy:图片坐标] , fill颜色) draw.point([randint(0,150) , randint(0,30)] , fill=get_color()) # 噪线 for i in range(10): # line([xy:起始和终点图片坐标] , fill颜色) draw.line([randint(0, 150), randint(0, 30),randint(0, 150), randint(0, 30)], fill=get_color()) # 弧线 x = randint(0, 150) y = randint(0, 30) for i in range(10): # line([xy:起始和终点图片坐标] , fill颜色) draw.arc([x, y, x + 2 , y + 2], 0, 90,fill=get_color()) # 设置字体 , 导入字体文件, 设置字体大小 font = ImageFont.truetype('fonts/Georgia.ttf' , 24) # 生成验证码 for i in range(5): c = get_random_code() # 将获取到的验证码写如到图片中 draw.text((10+30*i , 2) , text=c , fill=get_color() , font=font) # 图片保存成为文件 f = open('yzm.png' , 'wb') # 将制作好的图片保存 img.save(f , format='png') f.close() create_img()