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类的基础入门知识
Nov 24 Python
Python 字典dict使用介绍
Nov 30 Python
python字典键值对的添加和遍历方法
Sep 11 Python
Python应用03 使用PyQT制作视频播放器实例
Dec 07 Python
Python实现的基数排序算法原理与用法实例分析
Nov 23 Python
Django渲染Markdown文章目录的方法示例
Jan 02 Python
详解python selenium 爬取网易云音乐歌单名
Mar 28 Python
pandas的连接函数concat()函数的具体使用方法
Jul 09 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
Jan 25 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
Python的flask接收前台的ajax的post数据和get数据的方法
Apr 12 Python
Python 中数组和数字相乘时的注意事项说明
May 10 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实现PDO操作mysql存储过程示例
2019/02/13 PHP
Laravel框架Eloquent ORM删除数据操作示例
2019/12/03 PHP
Laravel中GraphQL接口请求频率实战记录
2020/09/01 PHP
jquery 指南/入门基础
2007/11/30 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
JavaScript中的面向对象介绍
2012/06/30 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
2013/12/28 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
2016/12/27 Javascript
详解Angular 4.x Injector
2017/05/04 Javascript
清空元素html(&quot;&quot;) innerHTML=&quot;&quot; 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
微信小程序实现指定显示行数多余文字去掉用省略号代替
2018/07/25 Javascript
详解适配器在JavaScript中的体现
2018/09/28 Javascript
VUE脚手架的下载和配置步骤详解
2019/04/01 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
2019/10/30 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
在Python的Django框架的视图中使用Session的方法
2015/07/23 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
2019/06/21 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
基于Keras中Conv1D和Conv2D的区别说明
2020/06/19 Python
党员政治学习材料
2014/05/14 职场文书
饭店服务员岗位职责
2015/02/09 职场文书
2015年小学一年级班主任工作总结
2015/05/21 职场文书
电影建国大业观后感
2015/06/01 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
高一作文之暖冬
2019/11/09 职场文书