首页 > 编程语言 >图片验证码 python版本

图片验证码 python版本

时间:2024-04-12 11:25:26浏览次数:24  
标签:randint python text random 验证码 height width 版本 font

import random
import string
import base64
from io import BytesIO

from PIL import Image, ImageDraw, ImageFont


chars_lower_digits = string.ascii_lowercase + string.digits
def rndColor():
    """
    生成随机颜色
    :return:
    """
    return (random.randint(0, 255), random.randint(10, 255), random.randint(64, 255))

def generate_captcha(_list: list = []):
    captcha_text = "".join(random.choices(_list or chars_lower_digits, k=4))

    width, height = 120, 40
    image = Image.new("RGB", (width, height), color=(255, 255, 255))

    draw = ImageDraw.Draw(image)

    # font = ImageFont.truetype('DejaVuSerif.ttf', 36)
    try:
        font = ImageFont.truetype(
            "DejaVuSerif.ttf", 36
        )  # fix 可能出现问题的地方:需要服务器上面拥有这个字体才可以
    except IOError:
        font = ImageFont.load_default()  # type: ignore

    # text_width, text_height = draw.textsize(captcha_text, font)
    _, _, text_width, text_height = draw.textbbox((0, 0), captcha_text, font=font)
    draw.text(
        ((width - text_width) / 2, (height - text_height) / 2),
        captcha_text,
        font=font,
        fill=(0, 0, 0),
    )

    for i in range(80):
        # 写干扰点
        draw.point(
            [random.randint(0, width), random.randint(0, height)], fill=rndColor()
        )

    for i in range(40):
        # 写干扰圆圈
        draw.point(
            [random.randint(0, width), random.randint(0, height)], fill=rndColor()
        )
        x = random.randint(0, width)
        y = random.randint(0, height)
        draw.arc((x, y, x + 4, y + 4), 0, 90, fill=rndColor())

    byte_arr = BytesIO()
    image.save(byte_arr, format="PNG")

    base64_img = base64.b64encode(byte_arr.getvalue()).decode("utf-8")

    return base64_img, captcha_text

 pip install pillow==10.2.0

标签:randint,python,text,random,验证码,height,width,版本,font
From: https://www.cnblogs.com/Pyxin/p/18130769

相关文章

  • Visual Studio Code & Python教程2环境
    2简介本章将使用简单的编程概念来修改基本的Python程序和VSCode功能,如任务运行、编辑默认设置、了解键盘快捷键和运行Python程序。我们必须做的第一件事是建立一个工作的开发环境。我们将从安装Python和安装VS代码开始,然后设置Python环境。本章的第二部分是了解全局......
  • day8(老男孩-Python3.5-S14期全栈开发)
    作者:赵俊           发布日期:2020/09/15三、Socket实现简单的ssh客户端1、os.system和os.popen的区别os.system   返回值是脚本的退出状态码,只有0,1,2三种状态,直接输出命令结果在控制台os.popen   返回值是一个内存地址,需要用read()方法取出返......
  • python语言基础
    python语言基础第一章你好python1.1安装pythonhttps://www.python.org/downloads/release/python-3104/自定义安装,全选配置python的安装路径验证:cmd输入python1.2python解释器解释器主要做了两件事:翻译代码提交给计算机去运行解释器就是这个python.exe在命令......
  • MySQL 查看主机和版本信息
    1、使用SELECT@@hostname查看主机名  2、使用SELECT@@versionASVersion;查看版本信息 3、一起查看SELECT@@hostnameASHostname,@@versionASVersion; ......
  • Python - [06] 桌面开发
     一、安装工具安装PyQt6和pyqt6-toolspipinstallPyQt6-ihttps://pypi.tuna.tsinghua.edu.cn/simplepipinstallpyqt6-tools-ihttps://pypi.tuna.tsinghua.edu.cn/simple //TODO       — 要养成终生学习的习惯— ......
  • Python爬虫学习
    基础语法字符串单引号双引号都行,是为了打印出引号才设计出两种的s1='"haha"'s2="'haha'"print(s1)print(s2)#结果是:"haha"'haha'事实上就近匹配,比如s=''haha''会被解析成前面俩一对后面俩一对s='''haha&......
  • 20个Python 正则表达式应用与技巧
    本文分享自华为云社区《Python正则表达式大揭秘应用与技巧全解析》,作者:柠檬味拥抱。Python中的re模块是用于处理正则表达式的强大工具。正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式。在本文中,我们将探讨Python中re模块的应用和一些技......
  • 读论文-基于Python的协同过滤算法的研究与应用实现
    前言今天读的论文为一篇名为《基于Python的协同过滤算法的研究与应用实现》的论文,文章是在2019年9月发表于《电脑知识与技术》的一篇期刊论文。摘要随着科学技术的快速发展和知识产权的日益重要,大多数用户会选择在播放平台上看电影。例如腾讯视频、爱奇艺等,用户迫切需要一个合......
  • Python中利用enumerate()精简循环中的索引和元素访问
    ​ Python中,enumerate()函数是一个内置函数,用于在遍历序列(如列表、元组或字符串)时同时获取每个元素的索引和值。可以使代码更简洁、更易读,特别是在需要索引时。使用enumerate()可以避免使用传统的范围(range())和长度(len())组合来访问元素和它们的索引。参考文档:Python中......
  • python基础-函数(函数参数、返回值、执行、传参、作用域、函数名)
    前言!!!注意:本系列所写的文章全部是学习笔记,来自于观看视频的笔记记录,防止丢失。观看的视频笔记来自于:哔哩哔哩武沛齐老师的视频:2022Python的web开发(完整版)入门全套教程,零基础入门到项目实战1.初识函数函数就是一大堆代码的集合,这一堆的代码再起个名字。#定义函数def函数名......