python之使用PIL模块制作随机验证码
制作随机验证码,需要如下知识点:
1、随机验证码的制作(这里用的是random模块随机产生字符)
2、图片的制作
3、随机直线干扰项
4、其他随机干扰项
代码如下:
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
import random
#随机颜色
def get_random_color():
r = random.randint(0,255)
g = random.randint(0,255)
b = random.randint(0,255)
return (r,g,b)
#随机位置
def get_random_position(x,y):
x = random.randint(0,x - 50)
y = random.randint(0,y - 15)
return (x,y)
#线条随机俩个坐标
def get_random_line_position(x,y):
x1 = random.randint(0,x)
y1 = random.randint(0,y)
x2 = random.randint(0,x)
y2 = random.randint(0,y)
return (x1,y1,x2,y2) def get_random_eci_position(x,y):
x1 = random.randint(0,x)
y1 = random.randint(0,y)
x2 = x1 + 4
y2 = y1 + 4
return (x1,y1,x2,y2)
#随机字符
def get_random_str():
num = str(random.randint(0,9))
low_letter = chr(random.randint(97,122))
upper_letter = chr(random.randint(65,90))
#print(num,low_letter,upper_letter)
randomStr = random.choice([num,low_letter,upper_letter])
return randomStr x = 200
y = 60
#创建一个随机颜色的图形
img = Image.new('RGB',(x,y),get_random_color()) #在图形上随机位置显示4个随机颜色的文字
draw = ImageDraw.Draw(img)
font = ImageFont.truetype('segoeuib.ttf',20)
randomStr = ''
for i in range(4):
v = get_random_str()
randomStr += v
#print(randomStr)
draw.text(get_random_position(x,y),randomStr,get_random_color(),font = font) #在图形上随机位置显示随机颜色的直线
for i in range(8):
draw.line(get_random_line_position(x,y),get_random_color())
draw.ellipse(get_random_eci_position(x,y),get_random_color())
draw.arc(get_random_line_position(x,y),0,90,get_random_color()) img.show()
执行效果如下:
aaarticlea/png;base64,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" alt="" />
python之使用PIL模块制作随机验证码的更多相关文章
- Python使用PIL模块生成随机验证码
PIL模块的安装 pip3 install pillow 生成随机验证码图片 import random from PIL import Image, ImageDraw, ImageFont fro ...
- canvas制作随机验证码
看到人家彩色背景的验证码想测试一下: 创建html代码: <canvas id="myCanvas" width="200" height="1 ...
- python之~利用PIL模块在图片上写写画画
借鉴了教程: http://yxnt.github.io/2016/05/15/Pillow-Python3.5/ 完成作业如下: 后来学着写给自己的图片加了水印. from PIL import I ...
- JAVA_SE基础——71.Random类制作随机验证码
public class Demo5 { public static void main(String[] args) { char[] arr={'s','b','g','h','a','c'}; ...
- Python Selenium、PIL、pytesser 识别验证码
思路: 使用Selenium库把带有验证码的页面截取下来 利用验证码的xpath截取该页面的验证码 对验证码图片进行降噪.二值化.灰度化处理后再使用pytesser识别 使用固定的账户密码对比验证码正 ...
- [ Python - 5 ] 通过random模块生成随机字符串
import random checkcode = '' for i in range(4): if i == random.randint(0,3): current = chr(random.ra ...
- Python之路----------random模块
随机数模块: import random #随机小数 print(random.random()) #随机整数 print(random.randint(1,5))#他会打印5 #随机整数 print ...
- python基础11 ---函数模块1
函数模块 一.函数模块的作用(为什么要有函数模块) 1.函数模块可以减少代码量 2.函数模块方便阅读 3.函数模块维护性强二.函数模块的本质以及调用方法 1.函数模块的本质就是一个.py结尾的文件,该 ...
- python模块之PIL模块(生成随机验证码图片)
PIL简介 什么是PIL PIL:是Python Image Library的缩写,图像处理的模块.主要的类包括Image,ImageFont,ImageDraw,ImageFilter PIL的导入 ...
随机推荐
- IO高级应用关于字符码表
ASCII码表: 计算机里只有数字,我在计算机软件里的一切都是用数字来表示,屏幕上显示的一个个字符也不例外.计算机诞生在美国,最开始所用到字符就是我们现在键盘上的一些符号和少数几个特殊的符号,每一个字 ...
- Python中使用%还是format来格式化字符串?
Python中应该使用%还是format来格式化字符串? %还是format Python中格式化字符串目前有两种阵营:%和format,我们应该选择哪种呢? 自从Python2.6引入了form ...
- 113. Path Sum II 输出每个具体路径
[抄题]: Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the gi ...
- 微信小程序之---- 数据处理
exports 关键字 .wxs 通过该属性,可以对外共享本模块的私有变量与函数 使用步骤 1. 在 .wxs后缀文件 exports定义参数 var foo = "'hell ...
- [原]Docker部署SuperMap8.1.1
摘要:本文主要实践在Docker上制作SuperMap(超图)V8.1.1镜像,文中将使用 docker commit 方式创新镜像(Dockerfile择机再做).本文中使用的宿主环境及镜像环境都是 ...
- C++字符串结束标识
用一个字符数组可以存放一个字符串中的字符.如: char str[12]={'I',' ','a','m',' ','h','a','p','p','y'}; 用一维字符数组str来存放一个字符串″I ...
- latex相关概念
关于Latex,收到网友的鼓励,决定好好整理下相关的信息. 在初次使用相关的程序时,遇到很多迷惑的概念,下面这篇帖子汇总得很详细. 关于latex各种概念与理解 帖子中提到了三个概念,引擎,宏集(即下 ...
- NC 自定义参照类
package nc.ui.hzctr.costctr.ref; import nc.ui.bd.ref.AbstractRefModel; import nc.vo.pubapp.pattern.p ...
- SQL 不常用的一些命令sp_OACreate,xp_cmdshell,sp_makewebtask
开启和关毕xp_cmdshell EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cm ...
- 2019.03.01 bzoj3075: [Usaco2013]Necklace(kmp+dp)
传送门 题意简述:给出S,TS,TS,T两个字串,∣S∣≤10000,∣T∣≤1000|S|\le10000,|T|\le1000∣S∣≤10000,∣T∣≤1000,问至少从SSS中删去几个字符能够 ...