Python 使用 Pillow 库动态生成字母验证码图片
本文介绍如何利用 Python 的 Pillow 库动态生成字母验证码图片。通过安装 Pillow,结合 Image 模块进行图像缩放与处理,使用 ImageFilter 实现模糊效果,并借助 ImageDraw 绘制随机颜色背景与字符。文章包含完整代码示例及常见字体路径错误的解决方法,帮助开发者快速掌握验证码生成技术。
模拟动态产生字母验证码图片
要模拟生成验证码,首要步骤是生成随机字母,随后对这些字母应用模糊处理。本文将介绍如何使用 Python 提供的 Pillow 模块来实现这一功能。
Pillow
PIL(Python Image Library)是 Python 的图像处理标准库,具备强大的功能。
PIL 属于第三方库,使用前需先进行安装。具体安装命令如下:(若已安装 Anaconda,可跳过此步骤)
$ pip install pillow
下面简要介绍 Pillow 的主要功能。
操作图像
图像缩放是 Pillow 的一项基础功能,示例代码如下:
from PIL import Image
# 打开图片,注意路径
img = Image.open('pitbull.jpeg')
# 获得图片尺寸
weight, height = img.size
print('原图片尺寸:{}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
接下来尝试对图片进行模糊处理:
from PIL import Image,ImageFilter
# 打开图片文件,注意路径
img = Image.open('pitbull.jpeg')
# 应用模糊滤镜
img2 = img.filter(ImageFilter.BLUR)
img2.save('blur.jpg', 'jpeg')
ImageFilter 是 Python 提供的图像滤波模块,其中 ImageFilter.BLUR 代表模糊滤波模式。
上述代码执行后的具体效果如下所示:


同时,Pillow 的 ImageDraw 模块提供了一系列绘图方法,使我们能够直接进行图形绘制。下面利用这种方法尝试生成字母验证码图片:
from PIL import Image, ImageDraw, ImageFont, ImageFilter
from random import randint
def random_char():
'''
生成随机的字母
Returns:
返回随机的字母
'''
return chr(randint(65, 90))
def random_color():
'''
生成随机颜色,每个颜色值在 64-255 之间
Returns:
返回随机的颜色,返回值的类型为 tuple.例如:(65, 98, 243)
'''
return (randint(64, 255), randint(64, 255), randint(64, 255),)
def random_color_2():
'''
生成随机颜色,每个颜色值在 32- 127 之间
Returns:
返回随机颜色,返回值类型为 tuple.例如(33, 87, 121)
'''
return (randint(32, 127), randint(32, 127), randint(32, 127),)
# 生成的图片比例
width = 60 * 4
height = 60
image = Image.new('RGB', (width, height), (255, 255, 255))
# 创建 Font 对象
font = ImageFont.truetype('YaHeiConsolas.ttf', 36)
# 创建 Draw 对象
draw = ImageDraw.Draw(image)
# 填充每个像素
for x in range(width):
for y in range(height):
draw.point((x, y), fill=random_color())
# 输出字母
for t in range(4):
draw.text((60 * t + 10, 10), random_char(), font=font, fill=random_color_2())
# 对生成的字母进行模糊效果处理
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg', 'jpeg')
代码的具体实现过程为:首先使用随机颜色填充背景,接着生成字母,最后对图片应用模糊处理。具体实现效果如下:

在代码运行过程中,可能会遇到以下错误提示:
IOError: cannot open resourse
出现该问题的原因是 PIL 无法定位到字体文件的位置,建议直接提供字体的绝对路径。
font = ImageFont.truetype('/absolute/path/font.ttf', 36)
本文提及的 Pillow 功能仅为部分简单应用,若想深入了解 PIL 的强大功能,可参考 Pillow 官方文档:
https://pillow.readthedocs.org/
总结
以上介绍了 Python 模拟动态产生字母验证码图片的功能,希望对大家有所帮助。如有任何疑问,欢迎留言,小编会及时回复。在此感谢大家对本站的支持! 如果觉得本文对您有帮助,欢迎转载,烦请注明出处,谢谢!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









