Python使用PIL模块生成随机验证码
Python生成随机验证码,需要使用PIL模块,具体内容如下
安装:
pip3installpillow
基本使用
1.创建图片
fromPILimportImage img=Image.new(mode='RGB',size=(120,30),color=(255,255,255)) #在图片查看器中打开 #img.show() #保存在本地 withopen('code.png','wb')asf: img.save(f,format='png')
2.创建画笔,用于在图片上画任意内容
img=Image.new(mode='RGB',size=(120,30),color=(255,255,255)) draw=ImageDraw.Draw(img,mode='RGB')
3.画点
img=Image.new(mode='RGB',size=(120,30),color=(255,255,255)) draw=ImageDraw.Draw(img,mode='RGB') #第一个参数:表示坐标 #第二个参数:表示颜色 draw.point([100,100],fill="red") draw.point([300,300],fill=(255,255,255))
4.画线
img=Image.new(mode='RGB',size=(120,30),color=(255,255,255)) draw=ImageDraw.Draw(img,mode='RGB') #第一个参数:表示起始坐标和结束坐标 #第二个参数:表示颜色 draw.line((100,100,100,300),fill='red') draw.line((100,100,300,100),fill=(255,255,255))
5.画圆
img=Image.new(mode='RGB',size=(120,30),color=(255,255,255)) draw=ImageDraw.Draw(img,mode='RGB') #第一个参数:表示起始坐标和结束坐标(圆要画在其中间) #第二个参数:表示开始角度 #第三个参数:表示结束角度 #第四个参数:表示颜色 draw.arc((100,100,300,300),0,90,fill="red")
6.写文本
img=Image.new(mode='RGB',size=(120,30),color=(255,255,255)) draw=ImageDraw.Draw(img,mode='RGB') #第一个参数:表示起始坐标 #第二个参数:表示写入内容 #第三个参数:表示颜色 draw.text([0,0],'python',"red")
7.特殊字体文字
img=Image.new(mode='RGB',size=(120,30),color=(255,255,255)) draw=ImageDraw.Draw(img,mode='RGB') #第一个参数:表示字体文件路径 #第二个参数:表示字体大小 font=ImageFont.truetype("kumo.ttf",28) #第一个参数:表示起始坐标 #第二个参数:表示写入内容 #第三个参数:表示颜色 #第四个参数:表示颜色 draw.text([0,0],'python',"red",font=font)
图片验证码
importrandom defcheck_code(width=120,height=30,char_length=5,font_file='kumo.ttf',font_size=28): code=[] img=Image.new(mode='RGB',size=(width,height),color=(255,255,255)) draw=ImageDraw.Draw(img,mode='RGB') defrndChar(): """ 生成随机字母 :return: """ returnchr(random.randint(65,90)) defrndColor(): """ 生成随机颜色 :return: """ return(random.randint(0,255),random.randint(10,255),random.randint(64,255)) #写文字 font=ImageFont.truetype(font_file,font_size) foriinrange(char_length): char=rndChar() code.append(char) h=random.randint(0,4) draw.text([i*width/char_length,h],char,font=font,fill=rndColor()) #写干扰点 foriinrange(40): draw.point([random.randint(0,width),random.randint(0,height)],fill=rndColor()) #写干扰圆圈 foriinrange(40): draw.point([random.randint(0,width),random.randint(0,height)],fill=rndColor()) x=random.randint(0,width) y=random.randint(0,height) draw.arc((x,y,x+4,y+4),0,90,fill=rndColor()) #画干扰线 foriinrange(5): x1=random.randint(0,width) y1=random.randint(0,height) x2=random.randint(0,width) y2=random.randint(0,height) draw.line((x1,y1,x2,y2),fill=rndColor()) img=img.filter(ImageFilter.EDGE_ENHANCE_MORE) returnimg,''.join(code) if__name__=='__main__': #1.直接打开 #img,code=check_code() #img.show() #2.写入文件 #img,code=check_code() #withopen('code.png','wb')asf: #img.save(f,format='png') #3.写入内存(Python3) #fromioimportBytesIO #stream=BytesIO() #img.save(stream,'png') #stream.getvalue() #4.写入内存(Python2) #importStringIO #stream=StringIO.StringIO() #img.save(stream,'png') #stream.getvalue() pass
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。