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(平滑滤波) - 最终效果:

Python 每日一练(3)的更多相关文章
- python每日一练:0007题
第 0007 题: 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但是要分别列出来. # -*- coding:utf-8 -*- import os def count ...
- [python每日一练]--0012:敏感词过滤 type2
题目链接:https://github.com/Show-Me-the-Code/show-me-the-code代码github链接:https://github.com/wjsaya/python ...
- Python 每日一练 | Flask 实现半成品留言板
留言板Flask实现 引言 看了几天网上的代码,终于写出来一个半成品的Flask的留言板项目,为什么说是半成品呢?因为没能实现留言板那种及时评论刷新的效果,可能还是在重定向上有问题 或者渲染写的存在问 ...
- Python 每日一练(5)
引言 Python每日一练又开始啦,今天的专题和Excel有关,主要是实现将txt文本中数据写入到Excel中,说来也巧,今天刚好学校要更新各团支部的人员信息,就借此直接把事情做了 主要对于三种数据类 ...
- Python 每日一练(4)
引言 今天继续是python每日一练的几个专题,主要涵盖简单的敏感词识别以及图片爬虫 敏感词识别 这个敏感词的识别写的感觉比较简单,总的概括之后感觉功能可以简略成if filter_words in ...
- Python每日一练(1)
这两天在做Python的每日一练,感觉收获颇丰,所以来记录分享一下,一共做了三个,涉及socket,PIL,pymysql三个库,另外终于开始了Flask框架的学习,后续也会做出一些分析 第一个是一个 ...
- Python 每日一练(2)
引言 我又双叒叕的来啦,新博客的第二篇文章,这次是继之前公众号上每日一练的第二个,这次是专题实对于文件的一些处理的练习 主要有以下几类: 1.实现英文文章字频统计 2.统一剪裁某一指定目录下的所有图片 ...
- Python每日一练(1):计算文件夹内各个文章中出现次数最多的单词
#coding:utf-8 import os,re path = 'test' files = os.listdir(path) def count_word(words): dic = {} ma ...
- Python 每日一练(7)
引言 今天的练习比较轻松,原本是有两题的,但是第一题那个大致看了一下,其实和之前的6个练习差不多,就是把xls中的文件数据读取出来后,进行一下处理,对于那题而言就是一个求和操作,所以就没练了,所以今天 ...
随机推荐
- Android Library 发布开源库 JCenter & JitPack 攻略
对于Android 的开源库,一般通过 JCenter 或者 JitPack 发布开源.两种方式均可~ 当你造了一个好玩有用的东西想要分享给大家时,开源出来便是一种好方式~ 一. 上传开源库到 JCe ...
- 安卓commandlinetools-win-6200805_latest配置
JDK:1.8.0_251 系统:win10 64bit 问题1 官网下载commandlinetools,解压运行报错 解决方法 打开sdkmanager.bat,修改第17行为set DEFAUL ...
- 字典树变形 A - Gaby And Addition Gym - 101466A
A - Gaby And Addition Gym - 101466A 这个题目是一个字典树的变形,还是很难想到的. 因为这题目每一位都是独立的,不会进位,这个和01字典树求最大的异或和是不是很像. ...
- 在ef core中使用postgres数据库的全文检索功能实战
起源 之前做的很多项目都使用solr/elasticsearch作为全文检索引擎,它们功能全面而强大,但是对于较小的项目而言,构建和维护成本显然过高,尤其是从关系数据库/文档数据库到全文检索引擎的数据 ...
- jvm启动参数调优
1.背景 eclipse启动了一个项目,用了15分钟,我佛了,在家办公也懒得弄一直没管,好嘛,越用越气,越来越慢,现在启动一次要半小时了,气不气,然后下定决心调优一下. 2.知识库(自认为调优重要的几 ...
- 1005 Spell It Right (20分)
1005 Spell It Right (20分) 题目: Given a non-negative integer N, your task is to compute the sum of all ...
- 用项目强化你的webpack
用你的webpack实现vue-cli 本文围绕前端工程化,用webpack从零搭建一个完整项目的过程 本文核心知识点: webpack的使用 vue组件化思想 Element-UI的使用 别走别走, ...
- java ->多线程_线程池
线程池概念 线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源. 我们详细的解释一下为什么要使用线程池?(程序优化) 在jav ...
- Failed to start mongod.service: Unit not found
其实自己用惯的是MYSQL,然后项目最后一步完善数据读写的部分,本来打算用mysql的,然而在centOS系统上发现安装总是出问题,后来查找一下资料,发现centOS系统上一般用的是Mariadb,这 ...
- flask之jinjia2模板语言
flask_jinjia2.py ''' flask中的jinjia2模板语言(和django中模板类似): (1)模板变量{{ }} (2)模板标签{% %} ①for循环遍历 {% for foo ...