python创建方法draw_Python做图像处理(五)---ImageDraw综合应用实例:自制验证码...

python创建方法draw_Python做图像处理(五)---ImageDraw综合应用实例:自制验证码..._第1张图片

前面几讲讲解了pillow库中两个最重要的模块,Image模块与ImageDraw模块,本讲小编将这两个模块综合应用起来,来制作一个随机自动生成验证码的程序。

1.生成验证码程序的算法设计原理

验证码通常用于网络,是网站为了防止恶意注册和网络机器人登录所采用的一种验证手段。验证码就是随机数字或符号生成的一幅图片,图片里加上一些干扰象素(防止OCR即光学字符识别),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能等登入系统,使用系统的某项功能。

依据验证码的生成原理,本程序的算法设计流程图如下:

python创建方法draw_Python做图像处理(五)---ImageDraw综合应用实例:自制验证码..._第2张图片

2.算法的实现过程

(1).首先生成背景为白色的一张image对象

imageTemp=Image.new('RGB',(200,200),

(255,255,255))

得如下一张200x200的白色背景的图片

python创建方法draw_Python做图像处理(五)---ImageDraw综合应用实例:自制验证码..._第3张图片

(图一)

(2) 接下来开始利用ImageDraw模块在图片上写入随机生成的字母与数字,具体代码如下:

font=ImageFont.truetype('STHUPO.TTF',45)

draw=ImageDraw.Draw(imageTemp)

text=getCharacters(6)

width,height=draw.textsize(text,font)

#绘制验证码offset=2fori inrange(characterNumber):

offset+=width//characterNumber

position=(offset,

(size[1]-height)//2+random.randint(-10,10))

draw.text(xy=position,text=text[i],

font=font,fill=getColor())imageTemp.show()

注意:以上代码中出现了两个函数:一个是getCharacters(num)函数用于生成num个的随机字母与数字的组合字符串。代码如下

defgetCharacters(length):

result=''fori inrange(length):

result+=random.choice(characters)

returnresult

其中的characters是由所有字母+数字构成的字符串,生成方式采用python的标准库string中的方法来实现,具体实现方式为

characters=string.ascii_letters+string.digits

以上代码中出现的另一个自定义函数为getColor函数,作用是生成随机颜色。代码如下

defgetColor():

r=random.randint(0,255)

g=random.randint(0,255)

b=random.randint(0,255)

return(r,g,b)

最终,代码运行后会实现向图一中写入随机字母与数字。效果如下:

python创建方法draw_Python做图像处理(五)---ImageDraw综合应用实例:自制验证码..._第4张图片

(3) 为了绕开OCR技术,利用ImageDraw模块向图片中写入干扰元素,包括位置与颜色均随机的像素点、直线以及曲线,具体代码如下:

#绘制干扰点fori inrange(int(size[0]*size[1]*0.03)):

draw.point((random.randint(0,size[0]),

random.randint(0,size[1])),fill=getColor())# 绘制干扰线条fori inrange(8):

start=(0,random.randint(0,size[1]-1))

end = (size[0],random.randint(0,size[1] - 1))

draw.line([start,end],fill=getColor(),width=1)

#绘制弧线fori inrange(8):

start=(-10,-10)

end = (size[0]+10,random.randint(0,size[1]+10))

draw.arc(start+end,0,270,fill=getColor(),width=1)

imageTemp.save('result.jpg')

imageTemp.show()

最终,程序运行后,效果如下图所示:

python创建方法draw_Python做图像处理(五)---ImageDraw综合应用实例:自制验证码..._第5张图片

当然,由于字母与数字与颜色都是随机选取的,因此,程序每运行一次效果都不一样。以下列出了一些随机的运行效果。怎么样,你也来试一试吧!

python创建方法draw_Python做图像处理(五)---ImageDraw综合应用实例:自制验证码..._第6张图片

python创建方法draw_Python做图像处理(五)---ImageDraw综合应用实例:自制验证码..._第7张图片

python创建方法draw_Python做图像处理(五)---ImageDraw综合应用实例:自制验证码..._第8张图片

python创建方法draw_Python做图像处理(五)---ImageDraw综合应用实例:自制验证码..._第9张图片

89af5159b5e121f088597213876762dd.png

python创建方法draw_Python做图像处理(五)---ImageDraw综合应用实例:自制验证码..._第10张图片end

python创建方法draw_Python做图像处理(五)---ImageDraw综合应用实例:自制验证码..._第11张图片

扫码关注公众号

python创建方法draw_Python做图像处理(五)---ImageDraw综合应用实例:自制验证码..._第12张图片

推荐阅读

你可能感兴趣的:(python创建方法draw)