制作随机验证码,需要如下知识点:

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模块制作随机验证码的更多相关文章

  1. Python使用PIL模块生成随机验证码

    PIL模块的安装 pip3 install pillow 生成随机验证码图片 import random from PIL import Image, ImageDraw, ImageFont fro ...

  2. canvas制作随机验证码

    看到人家彩色背景的验证码想测试一下: 创建html代码: <canvas id="myCanvas" width="200" height="1 ...

  3. python之~利用PIL模块在图片上写写画画

    借鉴了教程: http://yxnt.github.io/2016/05/15/Pillow-Python3.5/ 完成作业如下: 后来学着写给自己的图片加了水印. from PIL import I ...

  4. JAVA_SE基础——71.Random类制作随机验证码

    public class Demo5 { public static void main(String[] args) { char[] arr={'s','b','g','h','a','c'}; ...

  5. Python Selenium、PIL、pytesser 识别验证码

    思路: 使用Selenium库把带有验证码的页面截取下来 利用验证码的xpath截取该页面的验证码 对验证码图片进行降噪.二值化.灰度化处理后再使用pytesser识别 使用固定的账户密码对比验证码正 ...

  6. [ Python - 5 ] 通过random模块生成随机字符串

    import random checkcode = '' for i in range(4): if i == random.randint(0,3): current = chr(random.ra ...

  7. Python之路----------random模块

    随机数模块: import random #随机小数 print(random.random()) #随机整数 print(random.randint(1,5))#他会打印5 #随机整数 print ...

  8. python基础11 ---函数模块1

    函数模块 一.函数模块的作用(为什么要有函数模块) 1.函数模块可以减少代码量 2.函数模块方便阅读 3.函数模块维护性强二.函数模块的本质以及调用方法 1.函数模块的本质就是一个.py结尾的文件,该 ...

  9. python模块之PIL模块(生成随机验证码图片)

    PIL简介 什么是PIL PIL:是Python Image Library的缩写,图像处理的模块.主要的类包括Image,ImageFont,ImageDraw,ImageFilter PIL的导入 ...

随机推荐

  1. .NET代码混淆——开源.net 混淆器ConfuserEx介绍

    转载:https://blog.csdn.net/xiaoyong_net/article/details/78988264

  2. UVA10600 次小生成树

    题目链接:https://vjudge.net/problem/UVA-10600 题意:叫我们求出最小生成树的边权之和 和次小生成树的边权之和. 思路:我们可以先求出最小生成树,这个不难,如果要求次 ...

  3. SSM框架整合思想

    -------------------siwuxie095                                 SSM 框架整合思想         1.SSM 框架,即 SpringMV ...

  4. FortiGate设置E-mail告警

    1.配置邮件服务器 2.配置告警

  5. 348. Design Tic-Tac-Toe设计井字游戏

    [抄题]: Design a Tic-tac-toe game that is played between two players on a n x n grid. You may assume t ...

  6. Kettle (5) - 获取 Web 数据

    使用 Kettle 获取网页数据.当然,这里的网页数据主要指结构化数据,可能是 xml 格式.json 格式 或者 csv 文件等.以 http://services.odata.org/V3/Nor ...

  7. 3U - 算菜价

    妈妈每天都要出去买菜,但是回来后,兜里的钱也懒得数一数,到底花了多少钱真是一笔糊涂帐.现在好了,作为好儿子(女儿)的你可以给她用程序算一下了,呵呵. Input 输入含有一些数据组,每组数据包括菜种( ...

  8. java基础面试(上)

    面向对象的特征 答:抽象.继承.封装.多态 short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗? 答:对于short s1 = 1; s1 ...

  9. MongoDB、Hbase、Redis等NoSQL分析

    NoSQL的四大种类 NoSQL数据库在整个数据库领域的江湖地位已经不言而喻.在大数据时代,虽然RDBMS很优秀,但是面对快速增长的数据规模和日渐复杂的数据模型,RDBMS渐渐力不从心,无法应对很多数 ...

  10. windows Sql server performance monitor

    对于sql server 性能的监控主要从2个方面: 1. sql server自带的监控 Management->SQL Server Logs->Activity Monitor 在这 ...