python每日一练数字_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(平滑滤波)

最终效果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值