使用PIL生成验证码
使用PIL生成二维码的步骤如下:
1、 需要创建一张白色背景图,指定背景图的长和宽;
2、 给白色背景图按照每个像素点填充颜色,每个点的颜色随机,可以使用一个生成随机颜色的函数来填充;
3、 在填充了颜色的图像上绘制字母,这里需要生成字母的函数,可使用生成随机数的函数来生成随机数,然后将随机数转换为字母;需要给每一个字母指定位置,即在图像上的横纵坐标;需要给字母指定字体、大小;需要给字母填充颜色;
4、 使生成的验证码模糊;
5、 将绘制好的验证码打印显示。
示例代码如下:
from PIL import Image,ImageDraw,ImageFilter,ImageFont import random #生成随机字母A-Z def randchar(): return chr(random.randint(65,90)) #生成三个随机数,范围为64-255,用来给二维码上的每一个背景点填充颜色 def rndColor1(): return (random.randint(64,255),random.randint(64,255),random.randint(64,255)) #生成三个随机数,范围为32-128,用来给二维码上的字母填充颜色,为避免颜色与背景重合,故设置与背景颜色范围不同 def rndColor2(): return (random.randint(32,128),random.randint(32,128),random.randint(32,128)) width=240#二维码的长 height=60#二维码的高 #创建一张新图片,颜色纯白,这样方便在图片上填充颜色、增加字母 img = Image.new("RGB", (width, height), (255, 255, 255)) #设置字母的字体类型,使用系统字体,将系统字体文件复制并放置于程序文件所在目录 font = ImageFont.truetype("arial.ttf", 36) #在img上绘图 draw = ImageDraw.Draw(img) #为所有的点填充颜色 for x in range(width): for y in range(height): draw.point((x, y), fill=rndColor1()) #在图片上增加字母,在长度方向上放置4个字母,字母由自定义函数rndchar()随机生成,字母颜色由rndColor2()填充 for i in range(4): draw.text((60 * i+20, 10), randchar(), font=font, fill=rndColor2()) #使验证码模糊 img = img.filter(ImageFilter.BLUR) img.show() img.save("code.jpg", "jpeg")