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 相关文章推荐
pydev使用wxpython找不到路径的解决方法
Feb 10 Python
Python下singleton模式的实现方法
Jul 16 Python
Python挑选文件夹里宽大于300图片的方法
Mar 05 Python
让python在hadoop上跑起来
Jan 27 Python
pycharm中使用anaconda部署python环境的方法步骤
Dec 19 Python
用python求一重积分和二重积分的例子
Dec 06 Python
在Django中自定义filter并在template中的使用详解
May 19 Python
Java爬虫技术框架之Heritrix框架详解
Jul 22 Python
使用Python Tkinter实现剪刀石头布小游戏功能
Oct 23 Python
Python利器openpyxl之操作excel表格
Apr 17 Python
Python 如何安装Selenium
May 06 Python
pytorch finetuning 自己的图片进行训练操作
Jun 05 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会员权限控制实现原理分析
2011/05/29 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
php通过smtp邮件验证登陆的方法
2016/05/11 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
2016/12/02 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
php5.x禁用eval的操作方法
2018/10/19 PHP
详解CSS样式中的 !important * _ 符号
2021/03/09 HTML / CSS
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
ExtJS下grid的一些属性说明
2009/12/13 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
JavaScript中实现继承的三种方式和实例
2015/01/29 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
2015/08/31 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
jQuery Easyui 验证两次密码输入是否相等
2016/05/13 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
React之PureComponent的使用作用
2018/07/10 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
2019/08/07 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
基于Python的文件类型和字符串详解
2017/12/21 Python
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
对python_discover方法遍历所有执行的用例详解
2019/02/13 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
2020/03/06 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
CSS3之多背景background使用示例
2013/10/18 HTML / CSS
阿根廷网上配眼镜:SmartBuyGlasses阿根廷
2016/08/19 全球购物
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
博柏利美国官方网站:Burberry美国
2020/11/19 全球购物
铭立家具面试题
2012/12/06 面试题
个人优缺点自我评价
2014/01/27 职场文书
银行反四风对照检查材料
2014/09/29 职场文书
悬空寺导游词
2015/02/05 职场文书
css常用字体属性与背景属性介绍
2022/02/28 HTML / CSS