python生成验证码

简化版

提供一些思路

大致思路其实很简单,就是

生成一个画布,在画布上面用画笔完成验证码的输入

类似于ps中的

新建画布—给画布填充颜色—选择填充文字

from PIL import Image,ImageFont,ImageDraw
import string
import random

#定义画布大小
w = 60*4
h = 60

#生成画布	rgb模式  长宽  底色
im = Image.new('RGB',(w,h),(0,0,0))

#定义画笔的字体大小		需要指定路径  大小
font = ImageFont.truetype(r'C:\Windows\Fonts\Arial.ttf',30)

#生成随机大小写字母或者数字
def RandCode():
    code = ''
    if random.randint(0,1) ==1:
    	code += str(random.randint(0,9))
    else:
    	code += random.choice(string.ascii_letters)
    return code

#新建绘图对象
draw = ImageDraw.Draw(im)

#在画布上填写验证码(默认四位验证码)	位置		内容		画笔		画笔颜色
for temp in range(4):
	draw.text((60*temp+10,10),RandCode(),font = font,fill = (255,255,255))

im.show()

出结果~
在这里插入图片描述

复杂化

生成验证码的时候我们基本上是三步走

新建画布—填充画布—选择画笔

那增加复杂度的操作大致也是用在画布和画笔上面

生活中有很多可以识别验证码的操作

我们生产验证码就是要与之相反,给他们增加难度

简而言之

画布变复杂

画笔变复杂

#生成随机字体颜色
def RandColor():
	return (random.randint(0,255),random.randint(0,255),random.randint(0,255))

#生成噪点复杂的背景
for x in range(w):
	for y in range(h):
		draw.point((x,y),RandColor())

#简单模糊一下
im = im.filter(ImageFilter.BLUR)

简单来说

完成复杂化就是增加识别的难度

比如说增加噪点,增加模糊程度……

当然,画布可以增加噪点来处理,同理画笔也可以增加噪点来处理

from PIL import Image,ImageFont,ImageDraw,ImageFilter
import string
import random

#定义画布大小
w = 60*4
h = 60

#生成画布	rgb模式  长宽  底色
im = Image.new('RGB',(w,h),(0,0,0))

#定义画笔的字体大小		需要指定路径  大小
font = ImageFont.truetype(r'C:\Windows\Fonts\Arial.ttf',30)

#生成随机大小写字母或者数字
def RandCode():
    code = ''
    if random.randint(0,1) ==1:
    	code += str(random.randint(0,9))
    else:
    	code += random.choice(string.ascii_letters)
    return code

#新建绘图对象
draw = ImageDraw.Draw(im)

#随机颜色
def RandColor():
    return (random.randint(0,255),random.randint(0,255),random.randint(0,255))

#背景噪点填充
for x in range(w):
    for y in range(h):
        draw.point((x,y),fill = RandColor())

#在画布上填写验证码(默认四位验证码)	位置		内容		画笔		画笔颜色
for temp in range(4):
	draw.text((60*temp+10,10),RandCode(),font = font,fill = (255,255,255))

#模糊
im = im.filter(ImageFilter.BLUR)

im.show()

在这里插入图片描述
你告诉我

大声的告诉我

你能识别的出来????

我人眼都怀疑自己营养跟不上了

好吗????

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值