验证码在网络开发应用中非常重要,广泛应用于用户注册、登录、留言、购物和网络支付中,可以有效阻止恶意用户频繁提交非法数据。图片验证码是比较传统的验证码方式,图片除了经过平移、旋转、错切、缩放等基本变换的字母和数字之外,还有一些线条和其他干扰因素。

# -*- coding: utf-8 -*-
"""
Created on Fri Nov 27 16:10:15 2020@author: pistachio
"""
#生成验证码图片
from PIL import Image,ImageDraw,ImageFont
import random
import string#所有可能的字符,主要是英文字母和数字
characters=string.ascii_letters+string.digits#获取指定长度的字符串
def selectedCharacters(length):'''length:the number of characters to show'''result=""for i in range(length):result+=random.choice(characters)return resultdef getColor():'''get a random color'''r=random.randint(0,255)g=random.randint(0,255)b=random.randint(0,255)return (r,g,b)def main(size=(200,100),characterNumber=6,bgcolor=(255,255,255)):imageTemp=Image.new('RGB',size,bgcolor)#设置字体和字号font=ImageFont.truetype('c:\\windows\\fonts\\TIMESBD.TTF',48)draw=ImageDraw.Draw(imageTemp)text=selectedCharacters(characterNumber)width,heigth=draw.textsize(text,font)#绘制验证码字符串offset=2for i in range(characterNumber):offset+=width//characterNumberposition=(offset,(size[1]-heigth)//2+random.randint(-10,10))draw.text(xy=position,text=text[i],font=font,fill=getColor())#对验证码图片进行简单变换,这里采取简单的点运算imageFinal=Image.new('RGB',size,bgcolor)pixelsFinal=imageFinal.load()pixelsTemp=imageTemp.load()for y in range(0,size[1]):offset=random.randint(-1,1)for x in range(0,size[0]):newx=x+offsetif newx>=size[0]:newx=size[0]-1elif newx<0:newx=0pixelsFinal[newx,y]=pixelsTemp[x,y]draw=ImageDraw.Draw(imageFinal)#绘制干扰噪点像素for i in range(int(size[0]*size[1]*0.07)):draw.point((random.randint(0,size[0]),random.randint(0,size[1])),fill=getColor())#绘制干扰线条for i in range(8):start=(0,random.randint(0,size[1]-1))end=(size[0],random.randint(0,size[1]-1))draw.line([start,end],fill=getColor(),width=1)#绘制干扰弧线for i in range(8):start=(-50,50)end=(size[0]+10,random.randint(0,size[1]+10))draw.arc(start+end,0,360,fill=getColor())#保存验证码图片imageFinal.save('result.jpg')imageFinal.show()if __name__=="__main__":main((200,200),8,(255,255,255))

将上面的程序保存并运行,即可生成验证码图片

用python实现生成验证码图片相关推荐

  1. python实现随机验证码图片生成

    最近在学习 深度学习实现验证码模型训练,因为需要大量的验证码图片,所以要自动生成验证码图片,效果图: 首先安装相应的库包: #验证码生成库 pip install captcha #进度条显示库,显示 ...

  2. Python 生成验证码图片

    使用pillow生成验证码图片 其中的Arial.ttf可以百度下载 from PIL import Image,ImageDraw,ImageFont,ImageFilter import rand ...

  3. Java Web学习总结(6)——通过Servlet生成验证码图片

    2019独角兽企业重金招聘Python工程师标准>>> 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawIma ...

  4. PIL应用之生成验证码图片

    PIL应用之生成验证码图片 - 残阳似血的博客 PIL应用之生成验证码图片 位于分类 我爱Python 现在的网页中,为了防止机器人提交表单,图片验证码是很常见的应对手段之一.这里就不详细介绍了,相信 ...

  5. 转: 通过Servlet生成验证码图片

    孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(九)-- 通过Servlet生成验证码图片 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedIma ...

  6. javaweb学习总结(九):通过Servlet生成验证码图片

    一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 1 package gacl.r ...

  7. J2EE如何生成验证码图片和点击刷新验证码

    验证码图片生成步骤 创建BufferedImage对象. 获取BufferedImage的画笔,即调用getGraphics()方法获取Graphics对象. 调用Graphics对象的setColo ...

  8. PHP生产一个验证码图片,PHP使用GD库生成验证码图片,实现图片验证

    本文记录从php 下载配置GD图片生成库 到使用该库生成验证码图片,网页上实现验证码. 使用技术: php使用GD库绘图 [php版本7.3] php session 缓存 实现最终效果: 一. 配置 ...

  9. php mysql 验证码代码_PHP_PHP 验证码的实现代码,checkcode.php 生成验证码图片, - phpStudy...

    PHP 验证码的实现代码 checkcode.php 生成验证码图片,还有变量 $_SESSION[check_pic]. 复制代码 代码如下: session_start(); for($i=0; ...

最新文章

  1. 迭代器、代码块、闭包
  2. 你知道Spring是怎么解析配置类的吗?
  3. 【教程】win7下无需软件或adhoc补丁通过无线网卡搭建虚拟wifi网络
  4. 1-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案微信小程序篇(域名备案)
  5. 12-Linux下Oracle 11g R2数据库安装
  6. 额度降为0剩下欠款怎么办?
  7. Python的一些用法分享
  8. C语言从链表中删除素数,Data Structures 之 链表
  9. FR按钮调用数据库(MMSQL)存储过程,参数储存有返回值; 模板参数不可见 编辑后可见
  10. l3asnumanode 设置_numa设置与mysql
  11. 如何手动卸载SQLServer 2005
  12. 我的世界联机侠服务器文件夹,我的世界联机侠空岛服务器怎么建 | 手游网游页游攻略大全...
  13. 阿里中间件-全链路压测 总结
  14. springboot微信登陆
  15. 微信公众平台开发实战Java版之如何网页授权获取用户基本信息
  16. 人事管理系统实现(一)
  17. vi打开文件提示Another program may be editing the same file
  18. 央视CCTV摄制组进驻领存深入报道
  19. Java导出数据到Excel文件
  20. android蓝牙传输文件到mysql_蓝牙opp文件发送过程剖析

热门文章

  1. python中geometry_python shapely.geometry.polygon任意两个四边形的IOU计算实例
  2. 数据库MySQL服务
  3. 库存转换是什么意思_社保卡库存转移啥意思 社保卡怎么转出
  4. win10 omnet++5.6.2、INET3.7.0、sumo1.8.0 和 veins 安装记录
  5. 计算机处理器i3性能,笔记本电脑的CPU i3/i5/i7处理器哪个好?
  6. jsp网上商店网上书店
  7. Python爬虫-Selenium(1)
  8. 计算机的音标英语怎么说,电脑的英文怎么读标准发音
  9. 通过计算机名共享文档,共享文档
  10. 【C语言】求s = a + aa + aaa + aaaa + aa...a的值,其中a是一个数字