使用pillow创建动态图形验证码

使用pillow创建动态图形验证码

python 复制代码
#安装pillow模块:pip3 install pillow
from PIL import Image,ImageDraw,ImageFont
import random
import string

def id_code(width,height,bit,font_file,font_size):
    """
    功能:生成随机图片验证码
    :param width: 图片宽度
    :param height: 图片高度
    :param bit:验证码位数
    :param font_file:字体文件路径和文件名
    :param font_size:字体大小
    :return:
        code:验证码(字符串)
        im:Image图片对象
    """
    im=Image.new(mode='RGB',size=(width,height),color=(255,255,255))   #创建Image对象
    draw = ImageDraw.Draw(im)                                          #创建ImageDraw对象
    code_list=[]                                                       #验证码列表
    x=width/20                                                         #x坐标初始值
    font = ImageFont.truetype(font=font_file, size=font_size)          #创建字体对象
    for i in range(bit):                                               #循环绘制验证码字符
        y = random.randrange(0, int(height/3))
        color = (random.randint(0,255),random.randint(0,255),random.randint(0,255))       #生成随机颜色
        var = random.choice(string.ascii_letters + string.digits)
        draw.text((x,y),text=var,fill=color,font=font)
        x+=font_size
        code_list.append(var)
    code=''.join(code_list)

    for i in range(30):                                                #循环绘制干扰点
        x = random.randrange(1, width - 1)
        y = random.randrange(1, height - 1)
        color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))   #生成随机颜色
        draw.ellipse((x,y,x+2,y+2), fill=color)

    for i in range(2):                                                 #循环绘制干扰线
        y = random.randrange(5, height - 5)
        color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))   #生成随机颜色
        draw.line((0,y,width,y),width=1,fill=color)

    return code,im                                                     #返回验证码字符串和Image对象

code,im=id_code(120,50,4,'c:/windows/Fonts/simsun.ttc',30)             #调用函数
print(code)                                                            #可以获取验证码字符串
im.show()                                                              #显示图片

每次调用都能生成一个不同的图片验证码,并返回验证码字符串

返回结果:

python 复制代码
code= bW8h
相关推荐
盐焗鹌鹑蛋1 小时前
【Linux】基本指令
linux
海阔天空任鸟飞~8 小时前
Linux 权限 777
linux·运维·服务器
Kina_C10 小时前
Linux iptables 防火墙原理与实操——从四表五链到 NAT 配置
linux·运维·服务器·iptables
wdfk_prog11 小时前
嵌入式面试真题第 15 题:不可恢复异常后的通用崩溃快照、调用栈保存与离线分析架构
linux·开发语言·面试·架构
灵机一物15 小时前
企业选型参考:2026 CXL 内存扩展方案六强测评与落地指南
服务器·网络·数据库·人工智能
Web极客码15 小时前
如何用三段式确定性剪枝,为 LLM Agent 砍掉 35% 的 Token 成本?
服务器·人工智能·算法·机器学习
雷工笔记15 小时前
什么是Ubuntu?
linux·运维·ubuntu
yeflx15 小时前
速腾Airy雷达使用记录
java·服务器·网络
公众号:fuwuqiBMC16 小时前
(转自“服务器BMC”)服务器BMC芯片——多Die(芯片)封装
运维·服务器·人工智能
jsons116 小时前
autofs挂载
linux·服务器·网络