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 ORM框架SQLAlchemy学习笔记之安装和简单查询实例
Jun 10 Python
Python内置函数—vars的具体使用方法
Dec 04 Python
PyQt5每天必学之滑块控件QSlider
Apr 20 Python
Python基于property实现类的特性操作示例
Jun 15 Python
python进程间通信Queue工作过程详解
Nov 01 Python
python 实现return返回多个值
Nov 19 Python
Python操作redis和mongoDB的方法
Dec 19 Python
Python Dataframe常见索引方式详解
May 27 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
Jul 01 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
Nov 20 Python
Django celery异步任务实现代码示例
Nov 26 Python
Python time库的时间时钟处理
May 02 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系统流量分析的程序
2006/10/09 PHP
HTML中嵌入PHP的简单方法
2016/02/16 PHP
Yii2中多表关联查询hasOne hasMany的方法
2017/02/15 PHP
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
js 禁用只读文本框获得焦点时的退格键
2010/04/25 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
学习JavaScript鼠标响应事件
2015/12/25 Javascript
AngularJS 使用 UI Router 实现表单向导
2016/01/29 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
JS设置手机验证码60s等待实现代码
2017/06/14 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
vue弹出框组件封装实例代码
2019/10/31 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
2020/06/25 Javascript
jQuery实现电梯导航模块
2020/12/22 jQuery
浅析AST抽象语法树及Python代码实现
2016/06/06 Python
Python中的多行注释文档编写风格汇总
2016/06/16 Python
python3结合openpyxl库实现excel操作的实例代码
2018/09/11 Python
Python 利用pydub库操作音频文件的方法
2019/01/09 Python
在PyCharm中批量查找及替换的方法
2019/01/20 Python
python3.6根据m3u8下载mp4视频
2019/06/17 Python
完美解决pycharm导入自己写的py文件爆红问题
2020/02/12 Python
Python日志处理模块logging用法解析
2020/05/19 Python
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
中专生自我鉴定
2013/12/17 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
治安消防安全责任书
2014/07/23 职场文书
沈阳故宫导游词
2015/01/31 职场文书
谢师宴邀请函
2015/02/02 职场文书
react合成事件与原生事件的相关理解
2021/05/13 Javascript
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
2021/11/11 Python
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle