python3 验证码生成工具包

使用了pillow这个库用来生成图片(PIL),另外需要一个字体(验证码图片的字体风格),我这里用的是 MS Mincho.TTF, 自行更换即可。

pip install pillow

实现了随机验证码图片的生成,可保存到本地,也可以直接被前端引用base64格式

html img引用方式:

<img src="https://img-blog.csdnimg.cn/2022010706300695063.jpeg" alt="vc">

调用

getVerifyCode()获取验证码图片对象(pillow Image)与验证码字符串,图片对象的save方法可以保存图片。
getBase64Code()获取验证码图片base64字符串与验证码字符串。

以下是实现代码:

"""
随机生成验证码,图片(base64Str)
基于pillow
"""

import random
import string
from PIL import Image, ImageFont, ImageDraw
import base64
from io import BytesIO

__version__ = 'v1'


def _randColor():
    """随机颜色"""
    return random.randint(32, 127), random.randint(32, 127), random.randint(32, 127)


def _getText():
    """4位验证码"""
    return ''.join(random.sample(string.ascii_letters + string.digits, 4))


def _drawLines(draw, num, width, height):
    """划线"""
    for temp in range(num):
        x1 = random.randint(0, width / 2)
        y1 = random.randint(0, height / 2)
        x2 = random.randint(0, width)
        y2 = random.randint(height / 2, height)
        draw.line(((x1, y1), (x2, y2)), fill='black', width=1)


def getVerifyCode():
    """
    获取图片对象, 验证码字符串
    img.save(‘vc.jpg’) 保存验证码图片
    :return: (img对象, str)
    """
    code = _getText()
    # 图片大小
    width, height = 100, 36
    # 新图片对象
    image = Image.new('RGB', (width, height), 'white')
    # 字体
    font = ImageFont.truetype('./MS Mincho.TTF', 30)
    # draw对象
    draw = ImageDraw.Draw(image)
    # 绘制字符串
    for item in range(4):
        draw.text((8 + 24 * item, random.randint(-3, 3)),
                  text=code[item], fill=_randColor(), font=font)
    # 划线
    _drawLines(draw, 2, width, height)
    return image, code


def getBase64Code():
    """
    获取验证码base64数据, 验证码字符串
    :return: (base64Str, str)
    """
    image, code = getVerifyCode()
    outputBuffer = BytesIO()
    image.save(outputBuffer, format='JPEG')
    byteData = outputBuffer.getvalue()
    base64Str = base64.b64encode(byteData)
    return base64Str.decode("utf-8"), code

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值