栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【无标题】

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【无标题】

python PIL图片验证码简单生成
  • 代码都是中文的简单易懂 依赖库少

代码都是中文的简单易懂 依赖库少
# coding:utf-8
from PIL import Image, ImageDraw, ImageFont
import string, random, base64
from io import BytesIO


def code_add(图片大小=(100, 38), 验证码个数=4, 图片类型='png'):
    try:
        背景颜色 = (30, 159, 225)  # 背景颜色的RGB值  可以自行定义
        空白图片对象 = Image.new('RGB', 图片大小, 背景颜色)  # 生成一张空白图片
        字体对象 = ImageFont.truetype('C:/Windows/Fonts/Dengl.ttf', int(图片大小[1] * (8 / 10)))  # 生成字体对象 如果字体文件位置错误请百度一下,我也不知道。。。
        画笔对象 = ImageDraw.Draw(空白图片对象)  # 生成画笔对象
        验证码实码 = ''.join(random.sample(string.digits, k=验证码个数))  # 生成随机字符也就是验证码文本    随机类型a-zA-Z所有字符中选取 string.ascii_letters  随机类型0-9所有数字中选取 string.digits
        字体总宽, 字体总高 = 字体对象.getsize(验证码实码)  # 获取字符串需要占用的总宽高
        单个文字宽度 = int(字体总宽 / 验证码个数)  # 得到单个文字的大概宽度
        字体线宽 = 1
        干扰点比例 = 5  # 5就是5%

        # 计算文字所在位置
        图片切分后宽度 = 图片大小[0] / 验证码个数
        单个文字两边间隙 = (图片切分后宽度 - 单个文字宽度) / 2
        文字分块起点列表 = []
        for i1 in range(验证码个数):
            图片分块起点 = 0 + (图片切分后宽度 * i1)
            文字分块起点 = 图片分块起点 + 单个文字两边间隙
            文字分块起点列表.append(文字分块起点)

        # 向空白图片添加文字
        for i2 in 文字分块起点列表:
            文字竖向位置 = (图片大小[1] - 字体总高) / 2
            文字横向位置 = i2
            文字位置 = 文字横向位置, 文字竖向位置
            文字所在列表位置 = 文字分块起点列表.index(i2)  # 文字列表和文字位置列表是一一对应的所以可以直接使用
            当前要写的文字 = 验证码实码[文字所在列表位置]
            画笔对象.text(文字位置, 当前要写的文字, stroke_width=字体线宽, font=字体对象, fill=(random.randint(0, 225), random.randint(0, 225), random.randint(0, 225)))

        # 按照概率随机绘制干扰小圆点
        for w in range(图片大小[0]):
            for h in range(图片大小[1]):
                tmp = random.randint(0, 100)
                if tmp < 干扰点比例:
                    画笔对象.point((w, h), fill=(random.randint(0, 225), random.randint(0, 225), random.randint(0, 225)))  # w是横向位置h是竖向位置 fill是圆点的RGB颜色

        # 生成base64
        临时的二进制对象 = BytesIO()
        空白图片对象.save(临时的二进制对象, format=图片类型)
        新的图片对象 = 临时的二进制对象.getvalue()
        base64字符串 = base64.b64encode(新的图片对象).decode('utf-8')

        # 其他
        # 空白图片对象.save('空白图片对象.png', format=图片类型)# 保存图片
        # 空白图片对象.show()#展示图片

        # 构建输出
        return {"图片明文": 验证码实码, "图片base": "data:image/jpg;base64," + base64字符串}

    except Exception as e:
        print(str(e))
        return False

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/954251.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号