使用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")

 

posted @ 2018-06-29 10:44  Neal_Pu  阅读(219)  评论(0编辑  收藏  举报