zoukankan      html  css  js  c++  java
  • Python 每日一练(3)

    引言

    • 今天的每日一练,学习了一下用Python生成四位的图像验证码,就是我们常常在登录时见到的那种(#`O′)

    思路分析

    • 正如常见的那种图像验证码,它是由数字和字母的随机组合产生的,所以我们首先的第一步就是生成这样的数字字母组合
    • 完成第一步后,剩下的就和之前第一次练习给图片加文字一样的操作了

    具体实现

    • 生成随机验证码
    def genUnit():
        ascii_and_num=string.ascii_uppercase+string.digits
        Verification_Code=random.choices(ascii_and_num,k=4) 
        # 第二个参数表示取四次
        return(Verification_Code)
    #生成四位随机验证码
    
    • 背景色及文字色
    def back_rndColor():
        return(random.randint(64,255),random.randint(64,255),random.randint(64,255))
    #生成填充的随机色(用作背景色)
    
    def code_rndColor():
        return(random.randint(32,127),random.randint(32,127),random.randint(32,127))
    
    #生成验证码的随机色
    
    • 完整代码示例:
    # -*- coding: utf-8 -*-
    # Author : Konmu
    # 使用 Python 生成类似于下图中的字母验证码图片
    
    import string
    import random
    from PIL import Image,ImageDraw,ImageFont,ImageFilter
    
    def genUnit():
        ascii_and_num = string.ascii_uppercase + string.digits
        Verification_Code = random.choices(ascii_and_num,k=4) # 第二个参数表示取四次
        return(Verification_Code)
    #生成四位随机验证码
    
    def back_rndColor():
        return(random.randint(64,255),random.randint(64,255),random.randint(64,255))
    #生成填充的随机色(用作背景色)
    
    def code_rndColor():
        return(random.randint(32,127),random.randint(32,127),random.randint(32,127))
    #生成验证码的随机色
    
    if __name__ == '__main__':
        #创建背景画布(设置宽高)
        width = 60*4
        height = 60
        image = Image.new('RGB',(width,height),(255,255,255))
        #创建一个纯白的背景图,此方法不指定颜色的话默认是纯黑色
        font = ImageFont.truetype('C:/xxx/字酷堂海藏楷体.ttf',36)
        #指定字体及大小,字体文件存在Windows/Fonts目录下
        draw = ImageDraw.Draw(image)
        #创建绘制draw对象
        for x in range(width):
            for y in range(height):
                draw.point((x,y),fill=back_rndColor())
        #填充背景
        for t in range(4):
            draw.text((60*t + 10,10),genUnit()[t],font=font,fill=code_rndColor())
        #图片填充文字(类似第一个题)
    
        image = image.filter(ImageFilter.BLUR)
        #图像模糊处理
        image.save('C:/xxx/Desktop/Ver_code.png')
    
    • 注:
      如果觉得生成图片太模糊,可以选择换一种滤镜,这里推荐一种ImageFilter.SMOOTH(平滑滤波)
    • 最终效果:
      Ver_code
  • 相关阅读:
    ThinkPHP框架返回插入记录的id号
    TP框架中关于if、else 分支结构逻辑错误
    SVN 快速入门!
    TP框架中如何使用SESSION限制登录?
    TP框架M方法 create方法丢失字段问题
    .NET Framework 工具
    X86-64寄存器和栈帧
    微软开源资源 NET Foundation Projects
    Import 元素 (MSBuild)
    C#开源资源项目
  • 原文地址:https://www.cnblogs.com/Konmu/p/12522578.html
Copyright © 2011-2022 走看看