python随机图片验证码的生成
Python生成随机验证码,需要使用PIL模块.
安装:
|
1
|
pip3 install pillow |
基本使用
1. 创建图片
|
1
2
3
4
5
6
7
8
9
|
from PIL import Imageimg = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255)) # 在图片查看器中打开# img.show() # 保存在本地with open('code.png','wb') as f: img.save(f,format='png') |
2. 创建画笔,用于在图片上画任意内容
|
1
2
|
img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))draw = ImageDraw.Draw(img, mode='RGB') |
3. 画点
|
1
2
3
4
5
6
|
img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))draw = ImageDraw.Draw(img, mode='RGB')# 第一个参数:表示坐标# 第二个参数:表示颜色draw.point([100, 100], fill="red")draw.point([300, 300], fill=(255, 255, 255)) |
4. 画线
|
1
2
3
4
5
6
|
img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))draw = ImageDraw.Draw(img, mode='RGB')# 第一个参数:表示起始坐标和结束坐标# 第二个参数:表示颜色draw.line((100,100,100,300), fill='red')draw.line((100,100,300,100), fill=(255, 255, 255)) |
5. 画圆
|
1
2
3
4
5
6
7
|
img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))draw = ImageDraw.Draw(img, mode='RGB')# 第一个参数:表示起始坐标和结束坐标(圆要画在其中间)# 第二个参数:表示开始角度# 第三个参数:表示结束角度# 第四个参数:表示颜色draw.arc((100,100,300,300),0,90,fill="red") |
6. 写文本
|
1
2
3
4
5
6
|
img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))draw = ImageDraw.Draw(img, mode='RGB')# 第一个参数:表示起始坐标# 第二个参数:表示写入内容# 第三个参数:表示颜色draw.text([0,0],'python',"red") |
7. 特殊字体文字
|
1
2
3
4
5
6
7
8
9
10
|
img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))draw = ImageDraw.Draw(img, mode='RGB')# 第一个参数:表示字体文件路径# 第二个参数:表示字体大小font = ImageFont.truetype("kumo.ttf", 28)# 第一个参数:表示起始坐标# 第二个参数:表示写入内容# 第三个参数:表示颜色# 第四个参数:表示颜色draw.text([0, 0], 'python', "red", font=font) |
图片验证码的生成
import random
from io import BytesIO
from PIL import Image,ImageDraw,ImageFont
def valid_color(): color=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
return color def get_valid_code(request):
'''获取随机验证码图片'''
img=Image.new(mode="RGB",size=(170,40),color=valid_color())#创建一张背景图片随机的图片
draw=ImageDraw.Draw(img,mode="RGB")#给图片创建一个画笔
font=ImageFont.truetype(font="blog/static/font/kumo.ttf",size=25)#创建字体
valid_list=[]
for i in range(5):
random_num = str(random.randint(0, 9)) #产生随机的数字
random_lower_letter = chr(random.randint(65, 90))#产生随机的小写字母
random_upper_letter = chr(random.randint(97, 122))#产生随机的大写字母
random_str=random.choice([random_num,random_lower_letter,random_upper_letter])#从以上的随机字符中随机出一个随机字符
draw.text(xy=[30+i*24,10],text=random_str,fill=valid_color(),font=font)#在背景图片中写入随机字符
valid_list.append(random_str)#将随机字符串保存到列表中
for i in range(40):
'''在图片中画如随机的点'''
draw.point([random.randint(0,170),random.randint(0,40)],fill=valid_color())
for i in range(5):
'''在图片中画如随机的线'''
draw.line((random.randint(0, 170), random.randint(0, 40),random.randint(0,170),random.randint(0,40)), fill=valid_color()) f=BytesIO() #在内存中创建一个文件对象
img.save(f,"png") #将随机字符串的图片保存到文件中
data=f.getvalue() #获取随机字符串图片的二进制
valid_str=''.join(valid_list)
request.session["valid_str"]=valid_str#将图片中产生的随机字符串保存到session中
return HttpResponse(data)
python随机图片验证码的生成的更多相关文章
- springboot搭建项目,实现Java生成随机图片验证码。
这篇文章主要介绍了如何通过Java如何生成验证码并验证.验证码的作用我想必大家都知道,话不多说开始实施! 首先创建一个springboot项目以下是项目结构,内有utli工具类.存放生成图片验证码方法 ...
- 字符识别Python实现 图片验证码识别
字符型图片验证码识别完整过程及Python实现 1 摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...
- 【Python实现图片验证码】
"```python import base64 import random from PIL import Image from PIL import ImageDraw # 画笔对象 f ...
- python 识别图片验证码报IOError
说一下困扰了我一周的问题:识别图片验证码 本来我按照安装步骤(http://www.cnblogs.com/yeayee/p/4955506.html?utm_source=tuicool&u ...
- python 生成随机图片验证码
1.安装pillow模块 pip install pillow (1)创建图片 from PIL import Image #定义使用Image类实例化一个长为400px,宽为400px,基于RGB的 ...
- Java生成随机图片验证码
前台html代码 [Java] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 <div style="margin-top: 50px;&quo ...
- python实现图片验证码
1 验证基础知识1.1 Python生成随机验证码,需要使用PIL模块. # 安装 pip3 install pillow 1.2 创建图片 from PIL import Image img = I ...
- python添加图片验证码
1.创建验证码模块 #!/usr/bin/env python # -*- coding:utf-8 -*- import random from PIL import Image, ImageDra ...
- servlet awt随机图片验证码
package rd.test; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java. ...
随机推荐
- Linux CentOS7 安装 Mysql5.7.19
第二次安装会安装失败 1.先停止mysql服务 service mysql stop 2.检查是否卸载干净 find / -name mysql 多用几个命令检查,不要删到其他组件的 ...
- 利用Dropbox同步Arch下一些软件的配置文件
一些软件后要好好的配置一番才能好好为自己所用,比如vim,比如conky等等,但是万一系统真出了问题,或者硬盘跪了,要重新安装系统重新配置的时候真是一种折磨,前阵子想到如果用dropbox同步那些配置 ...
- Windows NT 之父 - David Cutler
David Cutler,大卫·卡特勒,一位传奇程序员,1988年去微软前号称硅谷最牛的内核开发人员,是VMS和Windows NT的首席设计师,被人们成为“操作系统天神”.他曾供职于杜邦.DEC等公 ...
- 大话JPA
JPA 是什么 Java Persistence API:用于对象持久化的 API Java EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层: 首先看一下传统方式访问数据库 ...
- Java基础总结--泛型总结
-----泛型------JDK1.5出现的机制1.泛型出现的原因--简化书写,提高安全性技术的由来是为了解决问题,现在存在该问题,所有的容器定义类型为Object,所以任何对 象均可以放入容器--进 ...
- Msys2配置总结
一.MSYS2的MirrorList配置 1.修改msys2安装目录下的/etc/pacman.d文件夹里面的3个mirrorlist.*文件 [mirrorlist.mingw32] #中国科学技术 ...
- Oracle 表空间扩充
Oracle 表空间扩充 一.现场环境: (1)操作系统:AIX (2)数据库:Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - ...
- 默认权限umask、文件系统权限、特殊权限
第1章 权限相关错误 1.1 普通用户 ls /root/ /root 属于root 普通用户没有任何权限,所以无法查看 [oldboy@znix ~]$ ls /root/ ls: cannot ...
- 0_Simple__simpleAssert + 0_Simple__simpleAssert_nvrtc
在核函数中使用强制终止函数 assert().并且在静态代码和运行时编译两种条件下使用. ▶ 源代码:静态使用 #include <windows.h> #include <stdi ...
- 关于easyui隐藏后数据不能刷新??
原因是div用display属性隐藏后不能重新加载table数据 解决方法:使用hide()方法在初始化时隐藏 $("#two").hide(); //点击按钮隐藏与显示表单域 $ ...