python使用pil生成图片验证码的方法


Posted in Python onMay 08, 2015

本文实例讲述了python使用pil生成图片验证码的方法。分享给大家供大家参考。具体实现方法如下:

# -*- coding: utf-8 -*-
#导入三个模块
import Image,ImageDraw,ImageFont
import random
import math
'''基本功能'''
#图片宽度
width = 100
#图片高度
height = 40
#背景颜色
bgcolor = (255,255,255)
#生成背景图片
image = Image.new('RGB',(width,height),bgcolor)
#加载字体
font = ImageFont.truetype('FreeSans.ttf',30)
#字体颜色
fontcolor = (0,0,0)
#产生draw对象,draw是一些算法的集合
draw = ImageDraw.Draw(image)
#画字体,(0,0)是起始位置
draw.text((0,0),'1234',font=font,fill=fontcolor)
#释放draw
del draw
#保存原始版本
image.save('1234_1.jpeg')
'''演示扭曲,需要新建一个图片对象'''
#新图片
newImage = Image.new('RGB',(width,height),bgcolor)
#load像素
newPix = newImage.load()
pix = image.load()
offset = 0
for y in range(0,height):
  offset += 1
  for x in range(0,width):
    #新的x坐标点
    newx = x + offset
    #你可以试试如下的效果
    #newx = x + math.sin(float(y)/10)*10
    if newx < width:            
      #把源像素通过偏移到新的像素点
      newPix[newx,y] = pix[x,y]
#保存扭曲后的版本      
newImage.save('1234_2.jpeg')
'''形变一下'''
#x1 = ax+by+c
#y1 = dx+ey+f
newImage = image.transform((width+30,height+10), Image.AFFINE, (1,-0.3,0,-0.1,1,0))
newImage.save('1234_3.jpeg')
'''画干扰线,别画太多,免得用户都看不清楚'''    
#创建draw,画线用
draw = ImageDraw.Draw(newImage)
#线的颜色
linecolor= (0,0,0)
for i in range(0,15):
  #都是随机的
  x1 = random.randint(0,width)
  x2 = random.randint(0,width)
  y1 = random.randint(0,height)
  y2 = random.randint(0,height)
  draw.line([(x1, y1), (x2, y2)], linecolor)      
#保存到本地
newImage.save('1234_4.jpeg')

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python深入学习之装饰器
Aug 31 Python
使用Python的PEAK来适配协议的教程
Apr 14 Python
python实现向ppt文件里插入新幻灯片页面的方法
Apr 28 Python
Python 查看文件的编码格式方法
Dec 21 Python
python @property的用法及含义全面解析
Feb 01 Python
python如何获取列表中每个元素的下标位置
Jul 01 Python
详解DeBug Python神级工具PySnooper
Jul 03 Python
详解Pandas之容易让人混淆的行选择和列选择
Jul 10 Python
python如何获取apk的packagename和activity
Jan 10 Python
通过python调用adb命令对App进行性能测试方式
Apr 23 Python
浅谈Python 命令行参数argparse写入图片路径操作
Jul 12 Python
Django利用AJAX技术实现博文实时搜索
May 06 Python
python实现连接mongodb的方法
May 08 #Python
python写入xml文件的方法
May 08 #Python
python从sqlite读取并显示数据的方法
May 08 #Python
python创建一个最简单http webserver服务器的方法
May 08 #Python
python分析网页上所有超链接的方法
May 08 #Python
python使用htmllib分析网页内容的方法
May 08 #Python
python使用nntp读取新闻组内容的方法
May 08 #Python
You might like
PHP基础之运算符的使用方法
2013/04/28 PHP
基于PHP静态类的原罪详解
2013/05/06 PHP
php curl post 时出现的问题解决
2014/01/30 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
php采集内容中带有图片地址的远程图片并保存的方法
2015/01/03 PHP
php的debug相关函数用法示例
2016/07/11 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
jQuery 常见操作实现方式和常用函数方法总结
2011/05/06 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
javascript改变position值实现菜单滚动至顶部后固定
2013/01/18 Javascript
jquery删除数据记录时的弹出提示效果
2014/05/06 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
2016/01/26 Javascript
即将发布的jQuery 3 有哪些新特性
2016/04/14 Javascript
深入理解Angular.JS中的Scope继承
2017/06/04 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
python目录与文件名操作例子
2016/08/28 Python
Python中index()和seek()的用法(详解)
2017/04/27 Python
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
python os用法总结
2018/06/08 Python
Django上使用数据可视化利器Bokeh解析
2019/07/31 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
Python Request类源码实现方法及原理解析
2020/08/17 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
美国最大的无人机经销商:DroneNerds
2018/03/20 全球购物
预订全球最佳旅行体验:Viator
2018/03/30 全球购物
Carter’s OshKosh加拿大:购买婴幼儿服装和童装
2018/11/27 全球购物
物理力学求职信
2014/02/18 职场文书
药品营销专业毕业生自荐信
2014/07/02 职场文书
社会实践的活动方案
2014/08/22 职场文书
2015年大学辅导员工作总结
2015/05/12 职场文书
关爱空巢老人感想
2015/08/11 职场文书