python制作图片验证码示例

主要用到python图片处理库-PIL库,同时需要注意字体.tff文件存放的具体目录,通常在/usr/share/fonts下,自己找找看

# coding:utf-8
import random
import stringfrom PIL import Image, ImageDraw, ImageFont

def createCaptcha():
    #定义变量,用于画面的背景色、宽、高
    bgcolor = (random.randrange(255),random.randrange(255),100)
    width = 100
    height = 30
    #创建画面对象
    im = Image.new('RGB', (width, height), bgcolor)
    #创建画笔对象
    draw = ImageDraw.Draw(im)
    #绘制50个噪点
    for i in range(50):
        point_position = (random.randrange(width),random.randrange(height))
        point_color = (random.randrange(255),random.randrange(255),random.randrange(255))
        draw.point(point_position,point_color)
    #绘制2条干扰线
    for i in range(2):
        start_position = (random.randrange(width),random.randrange(height))
        end_position = (random.randrange(width),random.randrange(height))
        line_color = (random.randrange(255),random.randrange(255),random.randrange(255))
        draw.line([start_position,end_position],line_color)
    #定义验证码的备选值
    str1 = string.ascii_letters+string.digits #大小写字母+数字共62个
    #随机选取5个值作为验证码
    rand_str = ''
    for i in range(5):
        rand_str += str1[random.randrange(len(str1))]
    #字体
    font_type = 'arial.ttf' #字体类型
    font_size = 20 #字体大小
    #构造字体对象
    font = ImageFont.truetype(font_type,font_size)
    #构造字体颜色
    fontcolor = (random.randrange(255),random.randrange(255),random.randrange(255))
    #绘制5个字
    for i in range(5):
        draw.text((20*i+random.randint(1,3),random.randint(0,1)),rand_str[i],font=font, fill=fontcolor)
    im.save(rand_str+'.png') #验证码内容命名图片,保存在当前目录下

if __name__ == '__main__':
    createCaptcha()

 

posted @ 2021-04-02 19:53  eliwang  阅读(151)  评论(0编辑  收藏  举报