简化版
提供一些思路
大致思路其实很简单,就是
生成一个画布,在画布上面用画笔完成验证码的输入
类似于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()
你告诉我
大声的告诉我
你能识别的出来????
我人眼都怀疑自己营养跟不上了
好吗????