python验证码
Python的验证码
在Python中不管是做网站开发还是爬虫分析,都需要跟验证码打交道,然而Python简洁的一点就是有很多的库,可以代替我们去做验证码的生成,以及验证码的识别的操作,但是我们也是需要明白验证码的原理的。
写一个简单的程序,来生成验证码
项目思路:
1)定义一张图片
2)创建画笔
3)绘制线条和点
4)绘制验证码文字
5)定义扭曲的参数
6)使用滤镜
简而言之,就是生成一张图片,在这个图片上随机生成文字,以及一些点、线、扭曲字体等来稍做干扰。
代码如下:
# -*- coding:utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
from PIL import Image,ImageDraw,ImageFont,ImageFilter
import random # 随机模块,生成随机数
# 1.Image 处理图片
# 2.Imagedraw 处理画笔
# 3.ImageFont 处理字体
# 4.ImageFilter
# 项目思路
# 1.定义一张图片
img = Image.new("RGB",(150,50),(255,255,255))
'''
1.代表采用RGB色彩模式
2.代表图片大小
3.具体图片颜色
'''
# 2.创建画笔
draw = ImageDraw.Draw(img)
# 3.绘制线条和点
# 绘制线
for i in range(random.randint(1,10)):
draw.line(
# 绘制线条时,每条线有两个点,每个点靠x,y两个值确定位置
[
(random.randint(1,150),random.randint(1,150)),
(random.randint(1,150),random.randint(1,150))
],
fill=(0,0,0)
)
# 绘制点
for i in range(1000):
draw.point(
[
random.randint(1,150),
random.randint(1,150)
],
fill=(0,0,0)
)
# 4.绘制我们的文字
# 文字随机产生
# 个数一定
# 定义生成随机的字母和数字
font_list = list("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890")
# random.sample 随机从列表中取出一定个数的元素
c_chars = "".join(random.sample(font_list,5))
# 绘制字体
# 定制字体
font = ImageFont.truetype("simsun.ttc",32)
draw.text((10,5),c_chars,font=font,fill="red")
'''
1 代表文字的位置,距离上,左的位置
2 代表文字的内容
3 代表字体
4 代表字体颜色
'''
# 5.定义扭曲的参数
params = [1 - float(random.randint(1,2))/100,
0,
0,
0,
1 -float(random.randint(1,2))/100,
float(random.randint(1,2))/500,
0.001,
float(random.randint(1,1))/500,
]
# 6.使用滤镜
# 添加滤镜
img = img.transform((150,50),Image.PERSPECTIVE,params)
'''
1.扭曲范围
2.扭曲样式
3.扭曲参数
'''
# 添加扭曲
img = img.filter(ImageFilter.EDGE_ENHANCE_MORE)
img.show()运行就可生成简单的验证码,可根据实际需求,做相应复杂度的验证码

浙公网安备 33010602011771号