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

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. 2019南昌网络赛-M(二分)

    题目链接:https://nanti.jisuanke.com/t/38232 题意:给定字符串s(长度<=1e5),然后N组样例(N<=1e5),每组输入一个字符串t判断t是否为s的字串 ...

  2. PC滚动条样式

    #jmwin2为外部容器             #jmwin2{   width: 90%;   height: 65%;   background: white;   position: abso ...

  3. 牛客小白月赛12 J 月月查华华的手机(序列自动机)

    ---恢复内容开始--- 题目来源:https://ac.nowcoder.com/acm/contest/392/J 题意: 题目描述 月月和华华一起去吃饭了.期间华华有事出去了一会儿,没有带手机. ...

  4. AndFix注意事项

    1.生成补丁,修改前后的apk包都必须签名. 2.AndFix 不支持修改布局文件. 3.文件的路径必须正确. 4.AndFix 不支持添加匿名内部类(就是点击事件). 5.AndFix 不支持添加新 ...

  5. 如何在3GPP下载协议

    以下载AT Commands协议为例. 1. 打开3GPP网址:http://www.3gpp.org/ 2. 打开Specification-Specification Numbering,如图.去 ...

  6. xib中的label加边框

    选中xib中的label,在右边栏的第三个标签页中第三项是User Defined Runtime Attributes 添加一个keyPath,keyPath值为layer.borderWidth, ...

  7. PyCharm选择性忽略PEP8代码风格警告信息

    用了几天的PyCharm,发现确实在编写Python代码上非常好用,但有一点体验不太好,就是代码编写时要按照PEP8代码风格编写,不然会有波浪线的警告信息.解决方法如下: 方法一: 将鼠标移到提示的地 ...

  8. iPhone屏幕分辨率和适配规则 图片文字适配

    基本概念 - 逻辑分辨率 pt (point),物理分辨率 px (pixel) - 缩放因子 scale 或者 dpr, scale ≈ px / pt - 缩放采样 例如 iPhone 6 Plu ...

  9. tensorflow学习之(五)构造简单神经网络 并展示拟合过程

    # def 添加层 如何构造神经网络 并展示拟合过程 import tensorflow as tf import numpy as np import matplotlib.pyplot as pl ...

  10. OpenCV-可视化界面Image Watch

    平台:Win10 x64+vs2015专业版+opencv-3.4.1-vc14_vc15 一直觉得OpenCV在调试方面不如MATLAB灵活方便,没成想OpenCV官方早就推出了一个叫Image W ...