使用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
相关推荐
IC 见路不走1 小时前
LeetCode 第91题:解码方法
linux·运维·服务器
翻滚吧键盘1 小时前
查看linux中steam游戏的兼容性
linux·运维·游戏
小能喵2 小时前
Kali Linux Wifi 伪造热点
linux·安全·kali·kali linux
汀沿河2 小时前
8.1 prefix Tunning与Prompt Tunning模型微调方法
linux·运维·服务器·人工智能
zly35002 小时前
centos7 ping127.0.0.1不通
linux·运维·服务器
小哥山水之间3 小时前
基于dropbear实现嵌入式系统ssh服务端与客户端完整交互
linux
旷世奇才李先生3 小时前
Pillow 安装使用教程
深度学习·microsoft·pillow
power 雀儿3 小时前
集群聊天服务器---MySQL数据库的建立
服务器·数据库·mysql
ldj20203 小时前
2025 Centos 安装PostgreSQL
linux·postgresql·centos
翻滚吧键盘3 小时前
opensuse tumbleweed上安装显卡驱动
linux