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

原文地址:https://www.cnblogs.com/Konmu/p/12522578.html

时间: 2024-10-09 03:27:41

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

python每日一练之20170611

#!/usr/local/bin/python #-*- coding: UTF-8 -*- #端口扫描器 import socket import thread import time socket.setdefaulttimeout(3)  #设置了全局默认超时时间 def socket_port(ip,PORT):  #扫描开放端口     try:         if PORT>=65535:             print u"端口扫描结束0-65535"    

Python 每日一练(6)

引言 今天的练习可以说是昨天的那个的反操作,今天要尝试将xls文件的内容写入xml文件中 所涉及到的库有xml,xlrd xls文件内容写入xml python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库(就是上一篇用到的那个库). 而今天的另一个主角xml又是一个什么呢? XML指的是可扩展标记语言eXtensible Markup Language,和json类似也是用于存储和传输数据,还可以用作配置文件.类似于HTML超文本标记语言

Python每日一练(2):找出html中的所有链接(Xpath、正则两个版本)

要在hrml文件中找出特定的内容,首先需要观察该内容是什么东西,在什么位置,这样才能找出来. 假设html的文件名称是:"1.html".href属性全都在a标签里. 正则版: #coding:utf-8 import re with open('1.html','r') as f: data = f.read() result = re.findall(r'href="(.*?)"',data) for each in result: print each Xpa

python每日一练:0004题

第 0004 题: 任一个英文的纯文本文件,统计其中的单词出现的个数. import re count = 0 with open('./EnglishText.txt','r') as f: temp = f.readlines() for i in temp: regList = re.findall('[a-zA-Z0-9]+',i) #找出每一行中的单词数 count += len(regList) print("文本EnglishText.txt中单词的个数为:{0}".fo

python每日一练:0015题

第 0015 题: 纯文本文件 city.txt为城市信息, 里面的内容(包括花括号)如下所示: { "1" : "上海", "2" : "北京", "3" : "成都" } 请将上述内容写到 city.xls 文件中,如下图所示: 代码如下: import xlwt import re workbook = xlwt.Workbook() worksheet = workbook.ad

python每日一练:0011题

第 0011 题: 敏感词文本文件 filtered_words.txt,里面的内容为以下内容,当用户输入敏感词语时,则打印出 Freedom,否则打印出 Human Rights. 北京 程序员 公务员 领导 牛比 牛逼 你娘 你妈 love sex jiangge 示例代码: inputs = input('请输入内容:') with open('filtered_words.txt','r',encoding='utf-8') as f: while True: word = f.read

CSS3每日一练之内容处理-嵌套编号

出处:http://www.w3cfuns.com/thread-5592229-1-17.html 1.大标题一   1.子标题   2.子标题   3.子标题2.大标题二   1.子标题   2.子标题3.大标题三   1.子标题   2.子标题   3.子标题 这种问题,你可能会觉得直接定义两个计数器,分别编号不就行了,于是就写出了如下代码: <!DOCTYPE HTML> <html> <head> <meta charset="gb2312&q

每日一小练——最长平台问题

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:最长平台问题 内容:一直一个已经从小到大排序的数组,这个数组中的一个平台就是连续的一串同样的元素.而且这个元素不能再延伸. 比如,在1,2,2,3,3,3,4,5,5,6中1,2,2,3,3,3,4,5,5,6都是平台.试编写一个程序,接受一个数组,把这个数组中最长的平台找出来.在这个样例中, 3,3,3就是该数组的中的最长的平台. 说明: 这个程序十分简单,可是编写好却不easy,因此在编敲代码时应注意考虑以下几点:

每日一小练——列出全部子集

上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:列出全部子集 内容:写一个程序,列出{1,2,3,4,...,n}这个集合的全部子集,包含空集{ }. 解决问题的算法应该有非常多种,只是我发现了一种非常easy也非常好玩的方法,就是用二进制表示几何元素的方法 比方假设n是3,则子集有(不包含空集){1}{2}{3}{1,2}{1,3}{2,3}{1,2,3}就是1*{0,1}and2*{0,1}and3{0,1}每一个组合出现一次,所以也能够看成是{0,0,1}{0