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操作时间和日期之asctime()方法的使用
May 22 Python
python opencv 图像尺寸变换方法
Apr 02 Python
更换Django默认的模板引擎为jinja2的实现方法
May 28 Python
详解python while 函数及while和for的区别
Sep 07 Python
Python+OpenCV图片局部区域像素值处理详解
Jan 23 Python
python re库的正则表达式入门学习教程
Mar 08 Python
Python使用sqlalchemy模块连接数据库操作示例
Mar 13 Python
python微信撤回监测代码
Apr 29 Python
简单了解Python matplotlib线的属性
Jun 29 Python
关于Python3 lambda函数的深入浅出
Nov 27 Python
Pycharm添加虚拟解释器报错问题解决方案
Oct 13 Python
python 读取串口数据的示例
Nov 09 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 resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
2016/03/23 PHP
Laravel的throttle中间件失效问题解决方法
2016/10/09 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
如何通过Apache在本地配置多个虚拟主机
2020/07/29 PHP
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
2009/11/24 Javascript
js获得网页背景色和字体色的方法
2014/03/21 Javascript
Ext GridPanel加载完数据后进行操作示例代码
2014/06/17 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
2016/01/25 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
2016/09/17 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
Angular中实现树形结构视图实例代码
2017/05/05 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
AngularJS动态添加数据并删除的实例
2018/02/27 Javascript
JavaScript对象的浅拷贝与深拷贝实例分析
2018/07/25 Javascript
详解Vue中watch对象内属性的方法
2019/02/01 Javascript
详解jenkins自动化部署vue
2019/05/14 Javascript
[05:05]给小松五分钟系列 第二期介绍为什么打DOTA2
2014/07/02 DOTA
[01:25]2014DOTA2国际邀请赛 zhou分析LGD比赛情况
2014/07/14 DOTA
python+selenium实现自动抢票功能实例代码
2018/11/23 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
python super用法及原理详解
2020/01/20 Python
tensorflow之自定义神经网络层实例
2020/02/07 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
python中sys模块是做什么用的
2020/08/16 Python
python中绕过反爬虫的方法总结
2020/11/25 Python
机械设计及其自动化专业推荐信
2013/10/31 职场文书
大四毕业生自荐书
2014/07/05 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
正规欠条模板
2015/07/03 职场文书
微信早安问候语
2015/11/10 职场文书
Python网络编程之ZeroMQ知识总结
2021/04/25 Python
python munch库的使用解析
2021/05/25 Python