Python 每日一练

Posted Konmu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 每日一练相关的知识,希望对你有一定的参考价值。

引言

  • 今天的每日一练,学习了一下用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

以上是关于Python 每日一练的主要内容,如果未能解决你的问题,请参考以下文章

Python每日一练——第5天:闰年问题升级版

python每日一练:0015题

4.3 每日一练

Python每日一练——第3天:三种猜数字小游戏

python每日一练:0011题

Python每日一练——第4天:百钱百鸡问题(升级版)