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 相关文章推荐
MySQL适配器PyMySQL详解
Sep 20 Python
python在html中插入简单的代码并加上时间戳的方法
Oct 16 Python
python 自定义异常和异常捕捉的方法
Oct 18 Python
Python装饰器用法实例分析
Jan 14 Python
Python列表(List)知识点总结
Feb 18 Python
python图形绘制奥运五环实例讲解
Sep 14 Python
PHP统计代码行数的小代码
Sep 19 Python
Jupyter notebook 远程配置及SSL加密教程
Apr 14 Python
Python基于requests实现模拟上传文件
Apr 21 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
Jun 22 Python
python pip如何手动安装二进制包
Sep 30 Python
Python多线程 Queue 模块常见用法
Jul 04 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
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
php读取mysql乱码,用set names XXX解决的原理分享
2011/12/29 PHP
php中smarty区域循环的方法
2015/06/11 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
PHP正则表达式之捕获组与非捕获组
2015/11/06 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
div层的移动及性能优化
2010/11/16 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
高效的jquery数字滚动特效
2015/12/17 Javascript
基于JavaScript实现文字超出部分隐藏
2016/02/29 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
vue登录注册及token验证实现代码
2017/12/14 Javascript
JavaScript中toLocaleString()和toString()的区别实例分析
2018/08/14 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
Python使用email模块对邮件进行编码和解码的实例教程
2016/07/01 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
pow在python中的含义及用法
2019/07/11 Python
Django Form常用功能及代码示例
2020/10/13 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
美国网上眼镜商城:Zenni Optical
2016/11/20 全球购物
Lyle & Scott苏格兰金鹰官网:英国皇室御用品牌
2018/05/09 全球购物
Subside Sports德国:足球球衣和球迷商品
2019/06/08 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
中华魂演讲稿
2014/05/13 职场文书
管理人员岗位职责
2015/02/14 职场文书
2015年度高中教师工作总结
2015/05/26 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python
div与span之间的区别与使用介绍
2021/12/06 HTML / CSS
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫
SQL Server使用导出向导功能
2022/04/08 SQL Server
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技