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的导入 ...
随机推荐
- 2018-2019-2 20175234 实验一 Java开发环境的熟悉(Linux + IDEA)
目录 20175234 实验一 Java开发环境的熟悉(Linux + IDEA) 第一部分 代码及运行结果截图 第二部分 要求 代码及截图 第三部分 题目 需求分析 设计 程序及运行结果 问题和解决 ...
- 6M - 循环多少次?
我们知道,在编程中,我们时常需要考虑到时间复杂度,特别是对于循环的部分.例如, 如果代码中出现 for(i=1;i<=n;i++) OP ; 那么做了n次OP运算,如果代码中出现 fori=1; ...
- Android工具
2018-09-27 安卓签名工具 AndroidKiller 比如包打好了,想替换一个图片,就用zip打开,替换图片,重新签名.
- Cmd控制台修改编码方法
Cmd控制台修改编码方法 一.前言 在Unbuntu中用sqlite3-command-line操作sqlite3还好好的,到了windows下查询表内容时发现中文全部乱码了!马上想到sqlite3内 ...
- python模块:configparser
"""Configuration file parser. A configuration file consists of sections, lead by a &q ...
- wordpress添加文章固定字段
让wordpress的文章数据表 增加一个字段,使其能在文章编辑页能编辑,并能通过rest api 获取出来. 例:给文章加一个缩略图字段 litpic 首先 通过mysql 给文章表 wp_post ...
- orabbix监控oracle
Orabbix 是一个用来监控 Oracle 数据库实例的 Zabbix 插件.下载地址: http://www.smartmarmot.com/product/orabbix/download/ O ...
- 深入理解java虚拟机一之走进Java
Java技术体系 Java程序设计语言.Java虚拟机.Java API类库统称为JDK Java API类库中Java SE API子集和Java虚拟机统称为JRE Java发展史 1991年4月 ...
- Codeforces828 B. Black Square
B. Black Square time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- 前端vue框架 路由的安装及使用
安装: 1.cmd下输入: npm install vue-router --save //安装路由 2.npm run dev //重新启动 使用: 1.在mian.js下引入路由 import V ...