Python如何生成随机图形验证码

news2025/6/27 4:36:22

python生成随机图形验证码

使用python生成随机图片验证码,需要使用pillow模块

1.安装pillow模块

pip install pillow

2.pillow模块的基本使用

1.创建图片

from PIL import Image
#定义使用Image类实例化一个长为400px,宽为400px,基于RGB的(255,255,255)颜色的图片
img1=Image.new(mode="RGB",size=(400,400),color=(255,255,255))
#把生成的图片保存为"pic.png"格式
with open("pic.png","wb") as f:
    img1.save(f,format="png")
#显示图片
img1.show()

运行程序,程序会在py文件的同级下生成一个名为"pic.png"的小图片,图片长为400px,宽为400px,颜色为白色。

2.创建画笔

#创建画笔,用于在图片上生成内容
draw1=ImageDraw.Draw(img1,mode="RGB")

3.在图片上生成点

#在(100,100)坐标上生成一个红点,指定的坐标不能超过图片的尺寸
draw1.point([100,100],pill="red")
#在(80,80)坐标上生成一个黑点,指定的坐标不能超过图片的尺寸
draw1.point([80,80],fill=(0,0,0))

4.在图片上画线

#第一个括号里面的参数是坐标,前两个数为开始坐标,后两个数为结束坐标
#括号里的第二个参数指定颜色,可以直接指定,也可以用RGB来表示颜色
draw1.line((100,100,100,300),fill="red")
draw1.line((100,200,200,100),fill="blue")

运行程序,画笔会在(100,100)到(100,300)坐标之间画一条红色的竖线,在(100,200)到(200,100)坐标之间画一根蓝色的斜线。

5.在图片上画圆

#括号里的第一个参数是坐标,前两个数为起始坐标,后两个为结束坐标
#用这两个坐标之间的正方形区域生成一个圆,大括号里的第二个参数为圆的开始角度
#第三个参数为圆的结束角度,0到360表示所画的是一个完整的圆形,
#也可以指定的数字来生成一段为圆弧,最后一个参数表示颜色,也可以用RGB来表示想要的颜色
draw1.arc((100,100,300,300),0,360,fill="red")
draw1.arc((0,0,300,300),0,90,fill="blue")

6.在图片上写文本

#使用画笔的text方法在图片上生成文本
#第一个参数为坐标,第二个参数为所有生成的文本的内容
#第三个参数为文本的颜色
draw1.text([0,0],"python","blue")

7.在图片上生成指定字体的文本

#先实例化一个字体对象,第一个参数表示字体的路径,第二个参数表示字体大小
font1=ImageFont.truetype("One Chance.ttf",28)
#在图片上生成字体
#第一个括号里的参数表示坐标,第二个参数表示写入的内容
#第三个参数表示颜色,第四个参数表示使用的字体对象
draw1.text([200,200],"linux","red",font=font1)

图片验证码的实例

#导入random模块
import random
#导入Image,ImageDraw,ImageFont模块
from PIL import Image,ImageDraw,ImageFont
#定义使用Image类实例化一个长为120px,宽为30px,基于RGB的(255,255,255)颜色的图片
img1=Image.new(mode="RGB",size=(120,30),color=(255,255,255))
 #实例化一支画笔
draw1=ImageDraw.Draw(img1,mode="RGB")
#定义要使用的字体
font1=ImageFont.truetype("One Chance.ttf",28)
for i in range(5):
    #每循环一次,从a到z中随机生成一个字母或数字
    #65到90为字母的ASCII码,使用chr把生成的ASCII码转换成字符
    #str把生成的数字转换成字符串
    char1=random.choice([chr(random.randint(65,90)),str(random.randint(0,9))])
    
    #每循环一次重新生成随机颜色
    color1=(random.randint(0,255),random.randint(0,255),random.randint(0,255))
    
    #把生成的字母或数字添加到图片上
    #图片长度为120px,要生成5个数字或字母则每添加一个,其位置就要向后移动24px
    draw1.text([i*24,0],char1,color1,font=font1)
#把生成的图片保存为"pic.png"格式
with open("pic.png","wb") as f:
    img1.save(f,format="png")

每次运行,程序在程序的同级目录会生成一个包含随机字符的小图片。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1328849.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Halcon 检测焊点短路

Halcon 检测焊点短路 read_image (Image1, D:/image/bilibili/photo/检测焊接短路 (4).bmp) dev_close_window () dev_open_window (0, 0, 512, 512, black, WindowHandle) dev_display (Image1) set_display_font (WindowHandle, 16, mono, true, false) threshold (Image1, …

modbus_tcp的实现 through python.

0.引言 当前科技似乎处于加速发展期,各个模块都在快速迭代,迭代的速度会让既有的一些经验产生问题,在用python实现modbus_tcp协议时,网上流传的一些代码中import语句会出现问题。导致pymodbus模块用起来很不好用。 这个原因出在…

集合工具类Collections

概述 java.utils.Collections:是集合工具类 作用:Collections并不属于集合,是用来操作集合的工具类。 Collections常用的API Collections排序相关API 使用范围:只能对于List集合的排序。 排序方式1: 注意:本方式…

23 在HST场景中,考虑物理层相关技术

文章目录 实验参数A:解调参考信号(DMRS)1 DMRS分配图2 实验结果图figur3figur4 3. 实验结论 B 映射资源元素。1 映射图2 实验结果图figure 6figure 7 3. 实验结论figure8 3 补充结论 C μ1 实验结果图:figure 9figure 10 2 结论 实验参数 注释&#xff1…

数据结构和算法-红黑树(定义 性质 查找 插入 删除)

文章目录 红黑树的定义和性质为什么要发明红黑树?红黑树怎么考总览红黑树的定义实例:一颗红黑树练习:是否符合红黑树的要求一种可能的出题思路补充概念:节点黑高 红黑树的性质 红黑树的查找红黑树的插入实例小结与黑高相关的理论 …

web前端游戏项目-堆木头游戏【附源码】

web前端游戏项目-堆木头游戏 《堆木头》游戏玩法简单,通过鼠标点击放木头的按钮,叠加在一起,构建出各种结构。游戏适合所有年龄段的孩子,可以锻炼孩子的动手能力和手眼协调能力,激发孩子的创造力和想象力 运行效果 …

使用GitZip下载GitHub指定文件

目录 一、GitZip二、安装GitZip三、链接GitHub四、检验是否安装成功五、总结 一、GitZip GitZip是一个非常实用的浏览器插件,它主要有以下几个优点: 下载指定文件:在我们浏览Github时,如果只想下载某个子目录的内容,…

15-高并发-如何扩容

对于一个发展初期的系统来说,不太确定商业模型到底行不行,最好的办法是按照最小可行产品方法进行产品验证,因此,刚开始的功能会比较少,是一个大的单体应用,一般按照三层架构进行设计开发,使用单…

服务器IBM x3650 m2 管理口访问故障处理

服务器的内存告警后,连接管理口查看信息,管理口状态灯显示正常,但是无法ping通和访问。 处理过程如下: 1、在centos 6.6中安装ipmitool,替换为阿里云的yum源,然后安装。 # wget -O /etc/yum.repos.d/Cen…

【String、StringBuilder 和 StringBuffer 的 区别】

✅ String、StringBuilder 和 StringBuffer 的 区别 ✅典型解析✅扩展知识仓✅String 的不可变性✅ 为什么JDK 9 中把String 的char[ ] 改成了 byte[ ] ? ✅为什么String设计成不可变的✅缓存✅安全性✅线程安全✅hashcode缓存✅ 性能 ✅String 的 " " 是如何实现的…

Ubuntu 常用命令之 du 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 Ubuntu系统下的du命令是一个用来估计和显示文件和目录所占用的磁盘空间的命令。du是“disk usage”的缩写,这个命令可以帮助用户了解磁盘被哪些文件和目录使用。 du命令的常见参数有 -a:列出所有文件和目…

STM32的以太网外设+PHY(LAN8720)使用详解(3):PHY寄存器详解

0 工具准备 1.野火 stm32f407霸天虎开发板 2.LAN8720数据手册 3.STM32F4xx中文参考手册1 PHY寄存器 前面介绍到,站管理接口(SMI)允许应用程序通过2线时钟和数据线访问任意PHY寄存器,同时该接口支持访问最多32个PHY,也…

一个基于多接口的业务自动化测试框架!

这是一个成熟的框架,不是要让别人当小白鼠,它已经先后在两家公司的5条业务线进行了推广应用,用例条数到了几千条以上,并且从2018年开始每天都在CI/CD流程中被调用执行。 已有那么多接口测试框架,为什么重复造轮子&…

在芯片设计端,从事DFT岗位是什么体验?

从1975年PHILIPS公司实验中心首次提出“可测性设计”概念至今,DFT已经伴随着芯片走过了半个世纪。 但DFT在数字IC设计岗位中还是显得很神秘很低调。 你说他重要吧,并不是所有芯片设计公司都有这个岗位,你说他不重要吧,但凡芯片产…

数据结构 | 北京大学期末试卷查漏补缺

目录 顺序存储 优点 缺点 适用于: 链式存储 优点 缺点 适用于: 折半查找为什么要使用顺序存储结构 树的存储结构​编辑 对于一个数据结构,一般包括 DFS&BFS 什么是递归程序 C语言不带头结点的单链表逆置 检测字符…

【CMake保姆级教程】制作动静态链接库、指定动静态库输出路径

文章目录 前言一、动静态链接库的介绍1.1 动态链接库 (DLL)1.2 静态链接库 (LIB) 二、制作静态库三、制作动态库四、指定动静态库输出路径4.1 方式1 - 适用于动态库4.2 方式2 - 都适用 总结 前言 在软件开发中,我们经常听到动态链接库(Dynamic Link Lib…

c语言易错题之数据类型变换

1.题目 #include<stdio.h> int main() {int arr[]{1,2,3,4,5};short*p (short*)arr;int i 0;for(i0;i<4;i){*(pi)0;}for(i0;i<5;i){printf("%d ",arr[i];}return 0; }2.解析 这道题主要容易错在&#xff0c;大家会以为通过指针赋值的时候&#xff0c;…

基于springboot的日记本系统源码+数据库+安装使用说明

之前写的SpringBoot日记本系统备受好评&#xff0c;考虑到还是有很多小伙伴不会部署&#xff0c;所以这一篇文章就单独来讲一下部署步骤吧。 需要资源 idea&#xff08;破不破解都行&#xff09; MySQL&#xff08;最好5.7以上版本&#xff0c;最好8.0&#xff09; Navicat…

SpringBoot Elasticsearch全文搜索

文章目录 概念全文搜索相关技术Elasticsearch概念近实时索引类型文档分片(Shard)和副本(Replica) 下载启用SpringBoot整合引入依赖创建文档类创建资源库测试文件初始化数据创建控制器 问题参考 概念 全文搜索&#xff08;检索&#xff09;&#xff0c;工作原理&#xff1a;计算…

Node.js-模块化(二)

1. 模块化的基本概念 1.1 什么是模块化 模块化是指解决一个复杂问题时&#xff0c;自顶向下逐层将系统拆分成若干模块的过程。对于整个系统来说&#xff0c;模块是可组合、分解和更换的单元。 1.2 编程领域中的模块化 编程领域中的模块化&#xff0c;就是遵守固定的规则&…