动态生成代码图像
要模拟验证码的生成,首先生成随机字符并对字符进行模糊处理。 本节介绍Python提供的Pillow模块。
Pillow
pil:Python图像库,python的图像处理标准库,功能强大。
PIL是第三方库,使用前必须安装。 具体命令如下。 (如果安装了Anaconda,则可以跳过此步骤。 )
$ pip install pillow
首先,简单说明Pillow的功能。
操作示意图
缩放图像是Pillow的功能之一。 例如以下所示。
来自pil import image
#打开图像,注意路径
img=image.open(pitbull.JPEG ) )。
#获取图像大小
weight,height=img.size
print ()原始图像大小((x ) ).format (height,height ) )
#缩放50%
img.thumbnail((weight//2,height//2) )
print ()调整后的图像大小((x ) ).format (height//2,height//2) )
#保存缩放的图像
img.save('thumbnail.jpg ',' jpeg ' ) )。
Pillow还提供了其他功能,如旋转、剪切、滤镜、输出字符和调色板。
图像过滤器
尝试模糊图像的处理。
from PIL import Image,ImageFilter
#打开图像文件,注意路径
img=image.open(pitbull.JPEG ) )。
#应用模糊滤镜
img2=img.filter (image filter.blur ) )。
img2.save('blur.jpg ',' jpeg ' ) )。
ImageFilter是Python提供的图像滤镜,ImageFilter.BLUR是模糊滤镜。
上述代码的具体效果如下。
ImageDraw
此外,Pillow的ImageDraw提供了几种可以直接绘制的列绘制方法。 尝试使用以下方法生成字符认证码图像:
#-* -编码: utf-8-* -
“”'
@ file : generate _ random _ code.py
@ time :2020/01/3120336032336010
@Author:大梦三千秋
@Contact: yiluolion@126.com
“”'
# Put the import lib here
from random import randint,choice
from PIL import Image,ImageDraw,ImageFont,ImageFilter
defRND_chr(chr_set ) :
“”获取随机字符
Args:
由chr_set:创建的字符集
Returns:
返回随机字符
“”'
returnchoice(chr_set ) )
def rnd_bg_color () :
“”获取随机像素值并填充背景
Returns:
返回随机像素值,然后返回元组类型
“”'
返回(randint (97,255 )、randint (97,255 )、randint (97,255 ) )
def rnd_chr_color () :
获取“”随机像素并填充输出字符
Returns:
返回随机像素值,然后返回元组类型
“”'
#与画板的填充颜色有一定的偏差,避免完全覆盖
return (randint (32,96 )、randint (32,96 )、randint (32,96 ) )
戴尔主(:
#生成字符集
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 ) )为
#定义画板大小250 x 50
width=60 * 5
height=60
Image对象,创建空白画板
image=image.new('RGB ',) width,height ),(255,255 ) )
创建Draw对象
draw=ImageDraw.Draw(image )
创建字体对象
font=image font.truetype ('./consola.TTF ',36 ) )。
#填充画板
forxinrange(width ) :
foryinrange(Height ) :
Draw.point () x,y ),fill=rnd_bg_color ) )
#文本填充
forninrange(5) :
draw.text () 60 * n25,12 )、rnd _ chr (chr _ set )、fill=rnd_chr_color )、font=font ) ) ) ) )
#模糊保存图像内容
image=image.filter (image filter.blur )。
image.save('./random_code.jpg ',' jpeg ' )
if __name__=='__main__':
main () )
代码的具体实现过程是用随机颜色填充背景,生成文字,最后对图像进行模糊。 具体效果如下
执行代码时,可能会出现以下错误:
io error : cannot开放资源
这个问题是因为PIL不能确定字体文件的位置,可以考虑直接提供绝对的位置。
font=image font.truetype (/absolute/path/font.TTF ),36 ) ) )。
本文提到的Pillow只是简单功能的一部分。 要继续了解PIL的强大功能,请参考Pillow的官方文档。
https://pillow.readthedocs.org/
以上是本文的全部内容,希望对大家的学习有帮助。 另外,希望大家多多支持云海天教程。