Python PIL模块随机生成中文验证码
原创使用Python PIL模块随机生成中文验证码
在当今的网络世界中,验证码被广泛应用于各种场合,如登录、注册、评论等,以防止自动化工具进行恶意操作。Python中的PIL(Pillow)库可以方便地生成图片验证码。下面将介绍怎样使用Pillow库来生成包含中文的验证码。
安装Pillow库
首先,你需要确保已经安装了Pillow库。如果没有,可以通过以下命令进行安装:
pip install pillow
生成中文验证码的步骤
以下是生成中文验证码的步骤:
- 导入所需模块
- 随机选择字体和颜色
- 创建画布并绘制背景
- 绘制随机中文文字
- 添加干扰线或噪点
- 保存或输出验证码图片
示例代码
以下是生成中文验证码的完整示例代码:
from PIL import Image, ImageDraw, ImageFont
import random
import string
# 随机生成一个中文
def random_chinese():
head = random.randint(0xb0, 0xf7)
body = random.randint(0xa1, 0xfe)
val = f'{head:x}{body:x}'
return bytes.fromhex(val).decode('gb2312')
# 生成随机颜色
def random_color():
return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
# 创建验证码图片
def create_captcha_image(size=(200, 100), char_length=4, font_size=40):
# 创建一个新图片对象
image = Image.new('RGB', size, (255, 255, 255))
draw = ImageDraw.Draw(image)
# 加载字体文件
font_path = 'path/to/your/chinese/font.ttf' # 需要指定一个包含中文的字体文件路径
font = ImageFont.truetype(font_path, font_size)
# 绘制文字
captcha_text = ''.join([random_chinese() for _ in range(char_length)])
for i in range(char_length):
draw.text((10 + i * 40, 30), captcha_text[i], font=font, fill=random_color())
# 绘制干扰线
for _ in range(5):
start = (random.randint(0, size[0]), random.randint(0, size[1]))
end = (random.randint(0, size[0]), random.randint(0, size[1]))
draw.line([start, end], fill=random_color())
# 含糊处理
image = image.filter(ImageFilter.BLUR)
# 保存图片
image.save('captcha.png')
return captcha_text, image
# 主程序
if __name__ == '__main__':
captcha_text, captcha_image = create_captcha_image()
captcha_image.show() # 展示验证码图片
结语
通过上述步骤和代码,我们可以生成含有中文的验证码图片,越来越系统的保险性。需要注意的是,这里的代码示例大概需要采取你的实际环境进行适当的调整,比如字体文件的路径和名称。在实际项目中,请确保使用合法的字体文件,并遵循相关法律法规。