python实现验证码-图片类型

1 utils.py

import random


def get_random_code():
    code = ''
    for i in range(5):
        # 随机生成大写字母
        upper_char = chr(random.randint(65, 90))
        lower_char = chr(random.randint(97, 122))
        num_char = str(random.randint(0, 9))
        res = random.choice([upper_char, lower_char, num_char])
        code += res

    return code


def get_random_rgb():
    return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))

注意:ttf字体下载

2 生成验证码

from PIL import Image, ImageDraw, ImageFont
from io import BytesIO

import random

from .utils import get_random_code, get_random_rgb


def get_code(request):
    width, hight = 300, 38
    image_tmp = Image.new('RGB', (width, hight), get_random_rgb())
    # 把空图片放在画板上
    draw = ImageDraw.Draw(image_tmp)
    # 加入字体需要去下载哦
    img_font = ImageFont.truetype('./static/font/ss.ttf', 23)
    # 验证码
    code_str = get_random_code()
    for i, item in enumerate(code_str):
        draw.text((20 + i * 45, 0), item, fill=get_random_rgb(), font=img_font)

    # 在图片上画点
    for i in range(50):
        # 画点
        draw.point([random.randint(0, width), random.randint(0, hight)], fill=get_random_rgb())

        # 画弧形
        x = random.randint(0, width)
        y = random.randint(0, hight)

        draw.arc((x, y, x + 4, y + 4), 0, 90, fill=get_random_rgb())

    # 在图片上划线
    for i in range(6):
        x1 = random.randint(0, width)
        x2 = random.randint(0, width)
        y1 = random.randint(0, hight)
        y2 = random.randint(0, hight)

        # 在图片上画线
        draw.line((x1, y1, x2, y2), fill=get_random_rgb())

    my_io = BytesIO()
    image_tmp.save(my_io, 'png')
    return HttpResponse(my_io.getvalue())

效果图:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

merge and rebase

文章目录 什么是merge什么是rebasemerge和rebase的区别操作执行git merge操作git rebase操作冲突解决解决冲突的步骤 Git Merge 和 Git Rebase 都是用于集成来自不同分支的修改的 Git 命令。 什么是merge Git Merge 是将一个分支的改动合并到另一个分支的方式。当你执行一个 m…

牛客热题:链表中环的入口结点

📟作者主页:慢热的陕西人 🌴专栏链接:力扣刷题日记 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 文章目录 牛客热题:**链表中环的入口结点**题目链接…

搭建并配置HTTPD文件服务及访问权限控制

一、安装HTTPD服务 yum -y install httpd 查看安装版本 httpd -v 二、HTTPD服务目录结构 conf: 存放主要的配置文件,如httpd.conf。 conf.d: 包含额外的配置文件,可以通过主配置文件包含进来。 conf.modules.d: 包含Apache模块的配置文件。 logs: 存放…

【python】python新闻数据抓取情感分析可视化(源码+数据)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

ArmSoM-Sige5 RK3576开发板 正式发布!

简介​ ArmSoM-Sige5 采用Rockchip RK3576第二代8nm高性能AIOT平台,6 TOPS算力NPU,最大可配16GB大内存。支持8K视频编解码,拥有丰富的接口,支持双千兆网口,WiFi6 & BT5和多种视频输出。支持多种操作系统&#xff…

如何基于nginx搭建https网站

华子目录 使用nginx的http_ssl模块建立加密传输的网站查看配置文件ssl配置文件的主要参数实验:搭建nginxssl加密认证的web服务器 使用nginx的http_ssl模块建立加密传输的网站 查看 [rootserver ~]# nginx -V #查看是否有--with-http_ssl_module模块,如…

MIPS32 指令架构

指令格式 R 类型 说明: 用于寄存器和寄存器操作 参数说明: Op: 指令操作码Rs: 第一个源操作数寄存器号,参与运算使用Rd: 目的操作数寄存器号,保存结果使用Shamt: 位偏移量,仅在位移指令使用,在此直接置0Func: 指令函…

uni-app scroll-view隐藏滚动条的小细节 兼容主流浏览器

开端 想写个横向滚动的列表适配浏览器,主要就是隐藏一下滚动条在手机上美观一点。 但是使用uni-app官方文档建议的::-webkit-scrollbar在目标标签时发现没生效。 .scroll-view_H::-webkit-scrollbar{display: none; }解决 F12看了一下,原来编译到浏览…

postman一直转圈圈,无法启动

解决 地址栏输入%appdata%进入此目录,删除%appdata%目录下的postman文件可以解决问题。

北京金融大数据有限公司X百望云签署战略合作协议 共同发布“金数数据要素流通云平台”

随着数据资产与数据要素相关政策密集出台,资本与实业企业均跃跃欲试。但因为没有龙头企业的方案引领和成熟的落地实践,市场呈谨慎观望态势,热度无处安放。 北京金融大数据有限公司(以下简称“金融大数据公司”)作为市…

基于ssm+jsp+mysql+java的人事管理系统

💞文末获取源码联系🙉 👇🏻 精选专栏推荐收藏订阅👇🏻 🎀《Java精选实战项目-计算机毕业设计题目推荐-期末大作业》😘更多实战项目~ https://www.yuque.com/liuyixin-rotwn/ei3euo/d…

顺序栈--c语言实现

#include <stdio.h> #include <stdlib.h> #include <stdbool.h>#define MAXSIZE 100 // 定义栈的最大容量// 顺序栈的结构体定义 typedef struct {int data[MAXSIZE]; // 存储元素的数组int top; // 栈顶指针&#xff0c;初始化为-1表示空栈 } SqStack;// 初…

Python 操作 json 数据

在Python中&#xff0c;操作JSON数据主要包括序列化&#xff08;将Python对象转换为JSON格式&#xff09;和反序列化&#xff08;将JSON字符串转换回Python对象&#xff09;。 以下是使用Python内置的json模块进行这些操作的基本示例&#xff1a; JSON 序列化 (Serialization…

MFC 列表控件删除实例(源码下载)

1、本程序基于前期我的博客文章《MFC下拉菜单打钩图标存取实例&#xff08;源码下载) 》 2、程序功能选中列表控件某一项&#xff0c;删除按钮由禁止变为可用&#xff0c;点击删除按钮&#xff0c;选中的项将删除。 3、首先在主界面添加一个删除参数按钮。 4、在myDlg.cpp 文件…

DS:链表的分类

欢迎来到Harper.Lee的学习世界&#xff01; 博主主页传送门&#xff1a;Harper.Lee的博客主页 想要一起进步的uu欢迎来后台找我哦&#xff01; 链表的结构⾮常多样&#xff0c;以下情况组合起来就有8种&#xff08;2 * 2 * 2&#xff09;链表结构。下面我们依次来认识它们吧&am…

等级保护测评一般多长时间能做完?

一个二级或三级的系统&#xff0c;整体持续周期一到两个月 具体时间还要根据信息系统数量&#xff0c;及信息系统的规模&#xff0c;以及测评方与被测方的配合情况等&#xff0c;有所增减。 现场测评周期一般一周左右 小规模安全整改&#xff0c;包括管理制度策略配置技术&a…

ASP.NET图书馆管理信息系统

摘  要 本文首先阐述了基于.NET Framework平台的图书馆管理信息系统的开发背景以及其实践意义&#xff0c;其次说明了图书馆管理信息系统的功能以及相比同类软件的创新之处。然后就图书馆管理系统开发中所使用的一些的技术进行研究探讨。主要针对数据库的设计技术、存储过程…

Qt模型视图代理之MVD(模型-视图-代理)概念的简单介绍

往期回顾 Qt绘图与图形视图之Graphics View坐标系的简单介绍-CSDN博客 Qt绘图与图形视图之基本图元绘制的简单介绍-CSDN博客 Qt绘图与图形视图之自定义图元实现拖拽、拉伸、旋转功能-CSDN博客 Qt模型视图代理之MVD(模型-视图-代理)概念的简单介绍 一、基本概念 Qt模型视图代理…

浅谈MOS管的发热原因和解决办法

大家好&#xff0c;我是砖一。 今天给大家分享一下MOS管基础知识&#xff0c;为什么内阻那么小的MOS管&#xff0c;也会发热&#xff1f;有做功率元器件&开关电源和IC的朋友可以了解一下&#xff0c;希望对你有用~ 一&#xff0c;MOS管发热影响因素 经常查阅MOS管的数据手…

xftp破解版?No!xftp平替开源工具✔

文章目录 一、背景说明二、WindTerm介绍三、简单使用说明3.1 新建一个ssh连接窗口![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/bfbe5114916e4a7e94ca0f9ceb05ca37.png)3.2 输入主机ip和端口号3.3 点击Continue3.4 输入密码3.5 登入成功3.6 下载文件到本地3.7 上…