基于python的captcha生成图像验证码

使用基于python的captcha生成图像验证码 、添加噪点和干扰线。

将图像保存至BytesIO对象,无需生成临时文件。

使用base64.b64encode方法直接将字节流转换为base64编码。

返回验证码字符串和图像的验证码图像的base64编码。

from captcha.image import ImageCaptcha
from random import randint
from base64 import b64encode
from io import BytesIO


def VCode(length=6, randcolor=GenerateRandColor(),
    # length:              验证码长度
    # randcolor:           随机颜色
    # words:               字符集
    # noisecurve_number:   干扰线数量
    # noisedot_width:      噪点尺寸
    # noisedot_number:     噪点数量
    # 返回值:
    # key:                 验证码字符串
    # b64encode:           将验证码转换为base64
    # 字典:去除了易混淆的O和l
    words="0123456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ",
    noisecurve_number=1, noisedot_width=6, noisedot_number=32):
    n, key = len(words), ""
    generator = ImageCaptcha(width=290,height=60)
    for i in range(length):
        key += words[randint(0, n-1)]
    img = generator.create_captcha_image(key, randcolor, inversedrgbcolor(randcolor))
    for i in range(noisecurve_number):
        img = generator.create_noise_curve(img, randcolor)
    img = generator.create_noise_dots(img, randcolor, noisedot_width, noisedot_number)
    file = BytesIO()
    # 将图像保存在内存中
    img.save(file, format='png')
    # 使用BytesIO().getvalue()转换为字节流
    bytes = file.getvalue()
    return key, b64encode(bytes)

注意:captcha图像默认尺寸为160×60. 

效果图

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python生成随机图形验证码通常涉及到图像处理库,如PIL(Python Imaging Library)或其更新版本Pillow,以及可能用到的随机数生成库如random和numpy。以下是一个简单的步骤概述: 1. 导入所需的库: ```python from PIL import Image, ImageDraw, ImageFont import random import numpy as np ``` 2. 定义图形元素,如线条、圆形、矩形、字母和数字: ```python def draw_random_shape(size, shapes): shape = random.choice(shapes) if shape == 'line': draw.line((random.randint(0, size), random.randint(0, size)), (random.randint(0, size), random.randint(0, size)), fill=(0, 0, 0)) elif shape == 'circle': center = (random.randint(0, size), random.randint(0, size)) draw.ellipse((center-10, center-10, center+10, center+10), fill=(0, 0, 0)) # 添加其他形状,如矩形等 def generate_text(): return ''.join(random.choices('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', k=random.randint(4, 6))) ``` 3. 创建验证码图像: ```python size = 100 image = Image.new('RGB', (size, size), color='white') draw = ImageDraw.Draw(image) shapes = ['line', 'circle', 'rectangle'] # 可自定义形状列表 for _ in range(random.randint(4, 6)): draw_random_shape(size, shapes) text = generate_text() font = ImageFont.truetype("arial.ttf", size=random.randint(20, 30)) # 加载字体 text_position = (random.randint(10, size-10), random.randint(10, size-10)) draw.text(text_position, text, font=font, fill=(0, 0, 0)) # 保存验证码图片 image.save('captcha.png') ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值