模拟动态产生字母验证码图片
模拟生成验证码,首先要做的是生成随机的字母,然后对字母进行模糊处理。这里介绍一下 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 模拟动态产生字母验证码图片功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]