python PIL生成验证码

想做一下验证码的图像识别,所以自己生成验证码图片来做数据集。

第一步生成随机数或者字母:

import random, string
#全部字母
string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
#全部数字
string.digits
'0123456789'
#编写随机函数:
def getRandomChar():
    all = string.ascii_letters + string.digits
    return random.sample(all, 1)[0]

第二步生成随机颜色:

# 获取随机颜色
def getRandomColor(low, high):
    return (random.randint(low, high), random.randint(low, high), random.randint(low, high))

第三步随机生成图片:

from PIL import Image, ImageDraw, ImageFont, ImageFilter
import matplotlib.pyplot as plt

def pic():
    #设置图片size
    width, height = 50, 50
    # 创建空白画布
    image = Image.new('RGB', (width, height), getRandomColor(20, 100))
    # 验证码的字体
    font = ImageFont.truetype('C:/Windows/fonts/stxinwei.ttf', 50)
    # 创建画笔
    draw = ImageDraw.Draw(image)
    draw.text((10, 0), getRandomChar(), font=font, fill=getRandomColor(100,255))
    return image

plt.imshow(pic())
plt.show()

在这里插入图片描述

第四步调整函数,生成有四个符号的验证码

from PIL import Image, ImageDraw, ImageFont, ImageFilter
import matplotlib.pyplot as plt

def pic():
    #设置图片size
    width, height = 180, 60
    # 创建空白画布
    image = Image.new('RGB', (width, height), getRandomColor(20, 100))
    # 验证码的字体
    font = ImageFont.truetype('C:/Windows/fonts/stxinwei.ttf', 50)
    # 创建画笔
    draw = ImageDraw.Draw(image)
    for i in range(0,4):
       draw.text((10 + 40*i, 0), getRandomChar(), font=font, fill=getRandomColor(100,255))
    return image

plt.imshow(pic())
plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第五步保存图片到本地:

name = ''
    for i in range(0,4):
       ch_ar = getRandomChar()
       draw.text((10 + 40*i, 0),ch_ar , font=font, fill=getRandomColor(100,255))
       name += ch_ar
    image.save(f'{name}.png')

汇总:

import random, string
from PIL import Image, ImageDraw, ImageFont, ImageFilter
import matplotlib.pyplot as plt

def getRandomChar():
    all = string.ascii_letters + string.digits
    return random.sample(all, 1)[0]
    
def getRandomColor(low, high):
    return (random.randint(low, high), random.randint(low, high), random.randint(low, high))
    
def pic():
    #设置图片size
    width, height = 180, 60
    # 创建空白画布
    image = Image.new('RGB', (width, height), getRandomColor(20, 100))
    # 验证码的字体
    font = ImageFont.truetype('C:/Windows/fonts/stxinwei.ttf', 50)
    # 创建画笔
    draw = ImageDraw.Draw(image)
    name = ''
    for i in range(0,4):
       ch_ar = getRandomChar()
       draw.text((10 + 40*i, 0),ch_ar , font=font, fill=getRandomColor(100,255))
       name += ch_ar
    image.save(f'{name}.png')
    return image,name

if __name__ == '__main__':
    size = 100#设置生成多少个图片
    for i in range(0, size):
        key = pic()
        print(key[1], 'is ok')
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

<编程路上>

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值