网站首页 > 开源技术 正文
web项目中遇到使用验证码的情况有很多,进行介绍下使用PIL 生成验证码的方法。
安装
开始安装PIL的过程确实麻烦各种问题层出不绝,不过不断深入后就没有这方面的困扰了:
windows安装:直接安装Pillow,最好使用编译好的对应版本。
linux系统:直接使用yum或apt-get包管理工具安装python-imaging包即可正常使用
遇到难缠的问题,请资源:http://stackoverflow.com/
使用
首先导入模块
from PIL import Image,ImageDraw, ImageFont
实现如图:此截图是截取自Tornado框架的项目中所以会有cookie代码,下面是代码:
头条对代码的格式化着实让人头疼,请对照上图自行缩进
size=(160, 70)
im = Image.new('RGB',size ,(random.randrange(160,255), random.randrange(160,255),random.randrange(160,255)))
draw = ImageDraw.Draw(im)
#绘制干扰线
line_num = random.randint(*(5, 10)) # 干扰线条数
for i in range(line_num):
# 起始点
begin = (random.randint(0, size[0]), random.randint(0, size[1]))
# 结束点
end = (random.randint(0, size[0]), random.randint(0, size[1]))
draw.line([begin, end], fill=(random.randrange(0,255), random.randrange(0,255),random.randrange(0,255)))
#绘制干扰点
point_chance = 2
chance = min(100, max(0, int(point_chance))) # 大小限制在[0, 100]
for w in xrange(size[0]):
for h in xrange(size[1]):
tmp = random.randint(0, 100)
if tmp > 100 - chance:
draw.point((w, h), fill=(random.randrange(0,255), random.randrange(0,255),random.randrange(0,255)))
mp =getMd5(str(datetime.now()))
rand_str = mp[0:4] #验证码内容
index=10
for i in rand_str:
draw.text((index,10), i, font=ImageFont.truetype(SERVER.S_PATH+"/static/font/arial.ttf" , random.randrange(40,50)),
fill=(random.randrange(0,200), random.randrange(0,200),random.randrange(0,200)))
index=index+size[0]/4
del draw
self.set_cookie("checkcode",str(rand_str))
buf = cStringIO.StringIO()
im.save(buf, 'gif')
网站验证流程是:
提交验证码申请→生成验证码→将验证码存在cookie→验证图片发送到页面中→用户输入后→后台校验验证码→完成验证
成功通过,不成功返回错误,重新提交验证码申请。
此文章由Python实践派原创,转载请注明。
欢迎订阅我的头条号,关注最实践的Python开发内容。
猜你喜欢
- 2024-09-22 python PIL库的详细使用方法(python-pip-whl)
- 2024-09-22 「话说嵌入式」STM32控制算法验证之Matlab PIL
- 2024-09-22 Python玩转PIL库(python pil库官网)
- 2024-09-22 Python制作验证码(图像处理工具包PIL基本操作)
- 2024-09-22 Python处理验证码:基于PIL和Tesseract的数字计算识别处理思路
- 2024-09-22 Python:这有可能是最详细的PIL库基本概念文章了
- 2024-09-22 虚拟仿真测试介绍:MIL、SIL、PIL和HIL是个啥
- 2024-06-10 Pilz安全继电器—PNOZ s7/s7.1/s7.2的使用
- 2024-06-10 Python图片处理模块PIL(pillow)(4)
- 2024-06-10 python给图片加水印很简单!你选Opencv还是PIL?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)