首页 > 其他分享 >手搓一个验证码

手搓一个验证码

时间:2024-09-11 19:25:30浏览次数:11  
标签:randrange img width 一个 验证码 captcha font 255

import io
import os
import string
from random import choice, randrange, sample
from PIL import Image, ImageDraw, ImageFont



def generate_captcha():
    img_width = 58
    img_height = 30
    font_size = 16
    font_color = ["black", "darkblue", "darkred"]
    background = (randrange(230, 255), randrange(230, 255), randrange(230, 255))
    line_color = (randrange(0, 255), randrange(0, 255), randrange(0, 255))
    current_path = os.path.dirname(os.path.abspath(__file__))
    sample_file = os.path.join(current_path, "../static/fonts/LucidaSansDemiOblique.ttf")
    font = ImageFont.truetype(sample_file, font_size)
    img = Image.new("RGB", (img_width, img_height), background)
    captcha = "".join(sample(string.ascii_letters + string.digits, 4))
    draw = ImageDraw.Draw(img)
    for i in range(randrange(3, 5)):
        xy = (
            randrange(0, img_width),
            randrange(0, img_height),
            randrange(0, img_width),
            randrange(0, img_height),
        )
        draw.line(xy, fill=line_color, width=1)
    x = 2
    for i in captcha:
        y = randrange(0, 10)
        draw.text((x, y), i, font=font, fill=choice(font_color))
        x += 14
    buf = io.BytesIO()
    img.save(buf, "gif")
    buf.seek(0)
    return captcha, buf

captcha, captcha_img = generate_captcha()
# 验证码内容 存储到session, 返回图片展示
session["captcha"] = captcha.lower()
return captcha_img

标签:randrange,img,width,一个,验证码,captcha,font,255
From: https://www.cnblogs.com/gatling/p/18408794

相关文章

  • 如何构建第一个springboot工程
    如何构建第一个springboot工程SpringBoot简单介绍spring框架是轻量级的,但它的配置却是重量级的所以就在原有spring框架的基础上,通过注解的方式进一步简化spring框架的使用,并基于spring框架开发了全新的springboot框架,需要说明的是:springboot不是替代spring的解决......
  • 给你一个promise数组,我需要并行执行,并且数组里面所有promise全部抛出错误之后,才抛出错
    今天面试,遇到如标题这么一个问题,真的给我问懵逼了,一开始想说使用promise.all,但是不行,因为promise.all只要有一个抛出错误了,整个promise.all就全部失败了。当时给我问的支支吾吾的打答不出来,并且还需要并行执行,想破头了都想不出来。后面回来重新学习ECMAScript才发现,使用一个API,pro......
  • 智能工厂程序设计:一个元宇宙
    Q1、 今天开始,直接考虑程序本身。昨天提到程序、对象和数据。它们各自的意义以及关系。您能总结一下吗?当然可以。在编程的语境中,程序、对象和数据是核心概念,它们各自具有独特的意义,并且相互之间紧密关联,共同构成了编程世界的基石。程序(Program)意义:程序是指一系列按照......
  • 《JavaEE进阶》----14.<SpringMVC配置文件实践之【验证码项目】>
    本篇博客介绍的是Google的开源项目Kaptcha来实现的验证码。这种是最简单的验证码。也是很常见的一种验证码。可以去看项目结果展示。就可以明白这个项目了。前言:随着安全性的要求越来越高、很多项目都使用了验证码。如今验证码的形式也是有许许多多、更复杂的图形验证码......
  • VUE基础大结局-用vue-cli搭建一个简单的vue项目吧!
    一、vue-cli的安装和使用vue-cli是vue官方提供的、快速生成vue工程化项目的工具 vue-cli官网https://cli.vuejs.org/zh/ 特点开箱即用基于webpack功能丰富且易于扩展支持创建vue2和vue3的项目 安装vue-cli开始右键打开PowerShell窗口,运行命令npminstall-g@vue/......
  • Springboot使用kaptcha生成验证码
    <dependency><groupId>com.youkol.support.kaptcha</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version></dependency>importcom.google.code......
  • 一个简约的uniapp登录界面,基于uniapp+vue3+uview-plus
    uniapp-vue3-template一个简约的uniapp登录界面,基于uniapp+vue3+uview-plus页面主要包括:用户登录,手机验证码登录,用户注册,重置密码等页面登录进去后为空白模板源码在文末界面源码uniapp登录界面源码......
  • Cathepsin D Protein, Mouse (HEK293, His)是一个约 56.0 kDa 的小鼠组织蛋白酶 D,带有
    品牌:MedChemExpress(MCE) 纯度:Greaterthan95%asdeterminedbyreducingSDS-PAGE. 分子式:Lyophilizedfroma0.2μmfilteredsolutionof20mMMES,150mMNaCl,pH5.5.分子量:Approximately46kDa存储条件:在-20°C下可保存2年。复溶后,在4°C下可稳定......
  • # yyds干货盘点 # 原始数据都一样,为啥Pyecharts做出来的图一个是彩色的,另一个是黑白的
    大家好,我是Python进阶者。前言前几天在铂金交流群里,有个叫【小朋友】的粉丝在Python交流群里问了一道关于Pyecharts可视化的问题,初步一看觉得很简单,实际上确实是有难度的,问题如下。乍一看,这个问题不知道他在说什么,看完代码之后,我才明白他的意思。一、思路    下面是他的代码,首......
  • OpenCV结构分析与形状描述符(20)计算一个包围给定点集的最小外接圆函数minEnclosingCirc
    操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述找到一个包围二维点集的最小面积的圆。该函数使用迭代算法来寻找一个二维点集的最小外接圆。这意味着函数将会通过反复逼近的过程来计算出能够包围所有给定点且面积最小的圆。mi......