使用pillow创建动态图形验证码
python
#安装pillow模块:pip3 install pillow
from PIL import Image,ImageDraw,ImageFont
import random
import string
def id_code(width,height,bit,font_file,font_size):
"""
功能:生成随机图片验证码
:param width: 图片宽度
:param height: 图片高度
:param bit:验证码位数
:param font_file:字体文件路径和文件名
:param font_size:字体大小
:return:
code:验证码(字符串)
im:Image图片对象
"""
im=Image.new(mode='RGB',size=(width,height),color=(255,255,255)) #创建Image对象
draw = ImageDraw.Draw(im) #创建ImageDraw对象
code_list=[] #验证码列表
x=width/20 #x坐标初始值
font = ImageFont.truetype(font=font_file, size=font_size) #创建字体对象
for i in range(bit): #循环绘制验证码字符
y = random.randrange(0, int(height/3))
color = (random.randint(0,255),random.randint(0,255),random.randint(0,255)) #生成随机颜色
var = random.choice(string.ascii_letters + string.digits)
draw.text((x,y),text=var,fill=color,font=font)
x+=font_size
code_list.append(var)
code=''.join(code_list)
for i in range(30): #循环绘制干扰点
x = random.randrange(1, width - 1)
y = random.randrange(1, height - 1)
color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) #生成随机颜色
draw.ellipse((x,y,x+2,y+2), fill=color)
for i in range(2): #循环绘制干扰线
y = random.randrange(5, height - 5)
color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) #生成随机颜色
draw.line((0,y,width,y),width=1,fill=color)
return code,im #返回验证码字符串和Image对象
code,im=id_code(120,50,4,'c:/windows/Fonts/simsun.ttc',30) #调用函数
print(code) #可以获取验证码字符串
im.show() #显示图片
每次调用都能生成一个不同的图片验证码,并返回验证码字符串
返回结果:
python
code= bW8h