模拟动态生成验证码图片模拟生成验证码,首先要做的是生成随机字母,然后对字母进行模糊处理。这里介绍一下Python提供的Pillow模块。PillowPIL:PythonImageLibrary,Python的图像处理标准库,功能强大。PIL是第三方库,使用前需要先安装。具体命令如下:(如果安装了Anaconda,这一步可以跳过)$pipinstallpillow下面简单介绍一下Pillow的功能。缩放和操纵图像是Pillow的一项功能。例子如下:fromPILimportImage#打开图片,注意路径img=Image.open('pitbull.jpeg')#获取图片大小weight,height=img.sizeprint('OriginalImagesize:{}x{}'.format(weight,height))#缩放,缩放50%img.thumbnail((weight//2,height//2))print('调整后的图片大小:{}x{}'.format(weight//2,height//2))#保存缩放后的图片img.save('thumbnail.jpg','jpeg')Pillow还有其他功能,比如旋转,裁剪,滤镜,输出文字,调色板,等尝试在ImageFilter下进行模糊处理:fromPILimportImage,ImageFilter#打开图片文件,注意路径img=Image.open('pitbull.jpeg')#应用模糊滤镜img2=img.filter(ImageFilter.BLUR)img2.save('blur.jpg','jpeg')ImageFilter是Python提供的图像滤镜,ImageFilter.BLUR是模糊滤镜。上面代码的具体效果如下:ImageDraw同时,Pillow的ImageDraw提供了一系列的绘制方法,方便我们直接绘制。以下方法尝试生成字母验证码图片:#-*-coding:utf-8-*-'''@File:generate_random_code.py@Time:2020/01/3120:32:10@作者:大梦三千秋@联系方式:yiluolion@126.com'''#把importlib放在这里fromrandomimportrandint,choicefromPILimportImage,ImageDraw,ImageFont,ImageFilterdefrnd_chr(chr_set):'''获取随机字符Args:chr_set:要生成的字符集Returns:返回随机字符'''returnchoice(chr_set)defrnd_bg_color():'''获取随机像素值并填充背景Returns:返回随机像素值,返回元组类型'''return(randint(97,255),randint(97,255),randint(97,255))defrnd_chr_color():'''获取随机像素,填充输出字符Returns:返回随机像素值,returntupletype'''#与画板的填充颜色做一定错开,防止完全覆盖return(randint(32,96),randint(32,96),randint(32,96))defmain():#生成字符集chr_set=['0','1','2','3','4','5','6','7','8','9']foriinrange(65,91):chr_set。append(chr(i))forjinrange(97,123):chr_set.append(chr(j))#print(chr_set)#定义画板尺寸250x50width=60*5height=60#创建Image对象,白色背景image=Image.new('RGB',(width,height),(255,255,255))#创建Draw对象draw=ImageDraw.Draw(image)#创建Fontobjectfont=ImageFont.truetype('./consola.ttf',36)#填充画板forxinrange(width):foryinrange(height):draw.point((x,y),fill=rnd_bg_color())#Filltextforninrange(5):draw.text((60*n+25,12),rnd_chr(chr_set),fill=rnd_chr_color(),font=font)#模糊后的图片内容Storeimage=image.filter(ImageFilter.BLUR)image.save('./random_code.jpg','jpeg')if__name__=="__main__":main()代码的具体实现过程是先填充背景用随机颜色,然后生成字母,最后模糊图片。具体实现效果如下:代码运行过程中,可能会出现如下错误:IOError:cannotopenresource出现这个问题的原因是PIL无法定位到字体文件的位置。考虑直接提供绝对位置。font=ImageFont.truetype('/absolute/path/font.ttf',36)本文提到的Pillow只是一个简单的部分功能。如果想继续了解PIL的强大功能,可以参考Pillow官方文档:https://pillow.readthedocs.org/以上是本文的主要内容。欢迎关注微信公众号《书所集录》
