验证码生成

提示:

windows查看系统字体位置:
win + r:打开命令窗口
输入:fonts即可找到

linux下字体文件夹位置,任意选择一个字体文件(以 .ttf 作为后缀的文件)
下面freefont这是系统自带免费字体文件夹,也可以自己下载喜欢的字体存放在/usr/share/fonts/truetype这个路径下方便调用

/usr/share/fonts/truetype/freefont
    from PIL import Image, ImageDraw, ImageFont, ImageFilter
    
    import random
    import math, string
    
    
    # 字体的位置,不同版本的系统会有不同
    font_path = 'C:\Windows\Fonts\Arial.ttf'
    # font_path = '/Library/Fonts/Hanzipen.ttc'
    # 生成几位数的验证码
    number = 4
    # 生成验证码图片的高度和宽度
    size = (100, 30)
    # 背景颜色,默认为白色
    bgcolor = (255, 255, 255)
    # 字体颜色,默认为蓝色
    fontcolor = (0, 0, 255)
    # 干扰线颜色。默认为红色
    linecolor = (255, 0, 0)
    # 是否要加入干扰线
    draw_line = True
    # 加入干扰线条数的上下限
    line_number = (1, 5)
    
    
    def gen_text():
        source = list(string.ascii_letters)
        for index in range(0,10):
            source.append(str(index))
        return ''.join(random.sample(source, number))  # number是生成验证码的位数
    
    
    # 用来绘制干扰线
    def gene_line(draw, width, height):
        begin = (random.randint(0, width), random.randint(0, height))
        end = (random.randint(0, width), random.randint(0, height))
        draw.line([begin, end], fill=linecolor)
    
    
    def gene_code(save_path,filename):
        width, height = size  # 宽和高
        image = Image.new('RGBA', (width, height), bgcolor)  # 创建图片
    
        font = ImageFont.truetype(font_path, 25)  # 验证码的字体和字体大小
        # font = ImageFont.truetype(25) #验证码的字体和字体大小
        draw = ImageDraw.Draw(image)  # 创建画笔
        # text = "我是中国人" # 生成字符串
        text = gen_text()  # 生成字符串
        print(text)
        font_width, font_height = font.getsize(text)
        draw.text(((width - font_width) / number, (height - font_height) / number), 
                  text, font=font, fill=fontcolor)  # 填充字符串
    
        if draw_line:
            gene_line(draw, width, height)
            gene_line(draw, width, height)
            gene_line(draw, width, height)
            gene_line(draw, width, height)
    
        image = image.transform((width + 20, height +10), Image.AFFINE, (1, -0.3, 0, -0.1, 1, 0), Image.BILINEAR)  # 创建扭曲
        image = image.filter(ImageFilter.EDGE_ENHANCE_MORE)  # 滤镜,边界加强
        image.save('%s/%s.png' % (save_path, filename))  # 保存验证码图片
        return text
    
    
    if __name__ == "__main__":
        gene_code('./img', 'test')  # 会把生成的图片保存在当前img文件夹下/img/test.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值