引言

  • 今天的每日一练,学习了一下用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(平滑滤波)
  • 最终效果:

Python 每日一练(3)的更多相关文章

  1. python每日一练:0007题

    第 0007 题: 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但是要分别列出来. # -*- coding:utf-8 -*- import os def count ...

  2. [python每日一练]--0012:敏感词过滤 type2

    题目链接:https://github.com/Show-Me-the-Code/show-me-the-code代码github链接:https://github.com/wjsaya/python ...

  3. Python 每日一练 | Flask 实现半成品留言板

    留言板Flask实现 引言 看了几天网上的代码,终于写出来一个半成品的Flask的留言板项目,为什么说是半成品呢?因为没能实现留言板那种及时评论刷新的效果,可能还是在重定向上有问题 或者渲染写的存在问 ...

  4. Python 每日一练(5)

    引言 Python每日一练又开始啦,今天的专题和Excel有关,主要是实现将txt文本中数据写入到Excel中,说来也巧,今天刚好学校要更新各团支部的人员信息,就借此直接把事情做了 主要对于三种数据类 ...

  5. Python 每日一练(4)

    引言 今天继续是python每日一练的几个专题,主要涵盖简单的敏感词识别以及图片爬虫 敏感词识别 这个敏感词的识别写的感觉比较简单,总的概括之后感觉功能可以简略成if filter_words in ...

  6. Python每日一练(1)

    这两天在做Python的每日一练,感觉收获颇丰,所以来记录分享一下,一共做了三个,涉及socket,PIL,pymysql三个库,另外终于开始了Flask框架的学习,后续也会做出一些分析 第一个是一个 ...

  7. Python 每日一练(2)

    引言 我又双叒叕的来啦,新博客的第二篇文章,这次是继之前公众号上每日一练的第二个,这次是专题实对于文件的一些处理的练习 主要有以下几类: 1.实现英文文章字频统计 2.统一剪裁某一指定目录下的所有图片 ...

  8. Python每日一练(1):计算文件夹内各个文章中出现次数最多的单词

    #coding:utf-8 import os,re path = 'test' files = os.listdir(path) def count_word(words): dic = {} ma ...

  9. Python 每日一练(7)

    引言 今天的练习比较轻松,原本是有两题的,但是第一题那个大致看了一下,其实和之前的6个练习差不多,就是把xls中的文件数据读取出来后,进行一下处理,对于那题而言就是一个求和操作,所以就没练了,所以今天 ...

随机推荐

  1. ST函数(ST表)RMQ O(1)查询 离线

    ST算法是基于倍增的动态规划算法. #include<iostream> #include<cstdio> #include<cstdlib> #include&l ...

  2. String-StringBuilder-StringBuffer 的区别

    String StringBuilder StringBuffer 的区别 String:不可改变的字符串,不能够被修改                    (https://baijiahao.b ...

  3. P4370 [Code+#4]组合数问题2

    题目要求当\(0\leq a\leq b\leq n\)时,\(k\)个\(\tbinom{b}{a}\)的和的最大值 观察杨辉三角形,可以发现,最大的\(\tbinom{b}{a}\),为\(\tb ...

  4. python(If 判断)

    一.if判断 如果 条件满足,才能做某件事情, 如果 条件不满足,就做另外一件事情,或者什么也不做 注意: 代码的缩进为一个 tab 键,或者 4 个空格 在 Python 开发中,Tab 和空格不要 ...

  5. 配置 Ant 执行 Jmeter 脚本

    1.将  Jmeter 下 extras 目录中 ant-jmeter-1.1.1.jar 包拷贝至 ant 安装目录下的lib目录中,否则会报错 ant-jmeter-1.1.1 不存在 2.创建 ...

  6. RF(自定义关键字)

    1.在 D:\work_software\python\Lib\site-packages 文件夹下, 新建 python package 包 ,例如我的是 TestLibrary 建好后的完整路径: ...

  7. HC32F003C4PA GPIO Output

    1.打开启动文件,找到并跳转至SystemInit函数 void SystemInit(void) { stc_clk_systickcfg_t stcCfg; // TODO load trim f ...

  8. STC8A8K64S4A12通过SPI接口操作基于ST7920的LCD12864液晶模块

    文章地址:https://www.cnblogs.com/jqdy/p/12665430.html 1. 硬件连接 1.1 64引脚的STC8A8K64S4A12 使用的是最小核心板,所以引脚皆引出可 ...

  9. DP之石子堆合并问题

    相邻 环形 总结 (1)相邻:在一个圆形操场的四周摆放着n堆石子(n<= 100),现要将石子有次序地合并成一堆.规定每次只能选取相邻的两堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得 ...

  10. 设计模式之GOF23备忘录模式

    备忘录模式Memento 场景: -Word文档编辑时,电脑死机或者断电,再次打开时,word提醒恢复之前的文档 -文件的撤回 核心: -就是保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原 ...