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使用CMD模块更优雅的运行脚本
May 11 Python
python实现将文本转换成语音的方法
May 28 Python
5种Python单例模式的实现方式
Jan 14 Python
Python将一个Excel拆分为多个Excel
Nov 07 Python
python 获取等间隔的数组实例
Jul 04 Python
python ubplot使用方法解析
Jan 10 Python
python3操作注册表的方法(Url protocol)
Feb 05 Python
Python中使用filter过滤列表的一个小技巧分享
May 02 Python
Python实现文件压缩和解压的示例代码
Aug 12 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 11 Python
celery在python爬虫中定时操作实例讲解
Nov 27 Python
python使用PySimpleGUI设置进度条及控件使用
Jun 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
Aster vs KG BO3 第一场2.18
2021/03/10 DOTA
JavaScript与函数式编程解释
2007/04/27 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
JS版的date函数(和PHP的date函数一样)
2014/05/12 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
javascript实现简单的二级联动
2015/03/19 Javascript
JavaScript实现表格快速变色效果代码
2015/08/19 Javascript
jQuery插件 Jqplot图表实例
2016/06/18 Javascript
JavaScript实现鼠标点击导航栏变色特效
2017/02/08 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
2017/06/29 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
2018/08/30 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
2019/12/13 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
python实现排序算法
2014/02/14 Python
Python中os.path用法分析
2015/01/15 Python
仅用50行代码实现一个Python编写的计算器的教程
2015/04/17 Python
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
图文详解WinPE下安装Python
2016/05/17 Python
Python字符串对象实现原理详解
2019/07/01 Python
python groupby 函数 as_index详解
2019/12/16 Python
python函数调用,循环,列表复制实例
2020/05/03 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
英国网上购买门:Direct Doors
2018/06/07 全球购物
实习生求职自荐信
2014/02/07 职场文书
工厂仓管员岗位职责范本
2014/07/17 职场文书
员工试用期自我评价
2014/09/18 职场文书
长城导游词300字
2015/01/30 职场文书
2019新员工心得体会
2019/06/25 职场文书
什么是创业计划书?什么是商业计划书?这里一一解答
2019/07/12 职场文书
Java日常练习题,每天进步一点点(38)
2021/07/26 Java/Android