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的迭代器和生成器使用实例
Jan 14 Python
利用python实现简单的循环购物车功能示例代码
Jul 05 Python
python使用PIL实现多张图片垂直合并
Jan 15 Python
用pyqt5 给按钮设置图标和css样式的方法
Jun 24 Python
django使用haystack调用Elasticsearch实现索引搜索
Jul 24 Python
详解Python 4.0 预计推出的新功能
Jul 26 Python
python中的反斜杠问题深入讲解
Aug 12 Python
python TCP包注入方式
May 05 Python
Python新手学习标准库模块命名
May 29 Python
Python 如何反方向迭代一个序列
Jul 28 Python
Python ConfigParser模块的使用示例
Oct 12 Python
pycharm 实现光标快速移动到括号外或行尾的操作
Feb 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
CodeIgniter配置之SESSION用法实例分析
2016/01/19 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
2019/09/03 PHP
javascript实现轮显新闻标题链接
2007/08/13 Javascript
Javascript 强制类型转换函数
2009/05/17 Javascript
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
javascript修改图片src的方法
2015/01/27 Javascript
nodejs实现HTTPS发起POST请求
2015/04/23 NodeJs
整理Javascript基础语法学习笔记
2015/11/29 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
2016/06/12 Javascript
JS常用加密编码与算法实例总结
2016/12/22 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
[02:47]2018年度DOTA2最佳辅助位选手4号位-完美盛典
2018/12/17 DOTA
Python 元组(Tuple)操作详解
2014/03/11 Python
Python程序设计入门(2)变量类型简介
2014/06/16 Python
Python实现爬取知乎神回复简单爬虫代码分享
2015/01/04 Python
操作Windows注册表的简单的Python程序制作教程
2015/04/07 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
python使用socket实现的传输demo示例【基于TCP协议】
2019/09/24 Python
基于python实现文件加密功能
2020/01/06 Python
python读取与处理netcdf数据方式
2020/02/14 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
Numpy中np.max的用法及np.maximum区别
2020/11/27 Python
Canvas 文本转粒子效果的实现代码
2019/02/14 HTML / CSS
英国知名的皮手套品牌:Dents
2016/11/13 全球购物
路由表示做什么用的?在linux环境中怎么来配置一条默认路由?
2013/06/07 面试题
银行职员思想汇报
2013/12/31 职场文书
趣味运动会策划方案
2014/06/02 职场文书
购房个人委托书范本
2014/10/11 职场文书
2016幼儿园新学期寄语
2015/12/03 职场文书
详解vue中v-for的key唯一性
2021/05/15 Vue.js
Python Pandas常用函数方法总结
2021/06/15 Python
python 常用的异步框架汇总整理
2021/06/18 Python
CSS中calc(100%-100px)不加空格不生效
2023/05/07 HTML / CSS