1、安装Pillow库
使用Pillow库之前,如没有安装,需要先安装Pillow库,一个非常强大的图像处理库,是Python Imaging Library (PIL) 的一个分支。
pip install Pillow
2、随机生成6位验证码
Python中,可以使用标准库中的random模块或第三方库如string模块来生成一个6位的随机 验证码。验证码可以是纯数字、纯字母或字母数字混合。
# -*- coding: utf-8 -*- import random def generate_verification_code(): ''' randomly generated a 6 bit verification code ''' code_list = [] for i in range(10): # 0-9 number code_list.append(str(i)) for i in range(65, 91): # A-Z code_list.append(chr(i)) for i in range(97, 123): # a-z code_list.append(chr(i)) myslice = random.sample(code_list, 6) verification_code = ''.join(myslice) # list to string # print code_list # print type(myslice) return verification_code if __name__ == '__main__': code = generate_verification_code() print code
参考文档:Python 随机生成6位验证码
3、生成验证码图片
通过上面代码生成验证码的内容,需要在使用Pillow库生成图片,并且将验证码的内容绘制在图片中。
from PIL import Image, ImageDraw, ImageFont import random # 生成随机6位验证码 def generate_verification_code(): ''' randomly generated a 6 bit verification code ''' code_list = [] for i in range(10): # 0-9 number code_list.append(str(i)) for i in range(65, 91): # A-Z code_list.append(chr(i)) for i in range(97, 123): # a-z code_list.append(chr(i)) myslice = random.sample(code_list, 6) verification_code = ''.join(myslice) # list to string # print code_list # print type(myslice) return verification_code # 创建验证码图片 def create_verification_image(code): # 图片尺寸和背景色 width, height = 200, 100 background_color = (255, 255, 255) # 白色 # 创建图片对象 image = Image.new('RGB', (width, height), background_color) draw = ImageDraw.Draw(image) # 设置字体和字号 font = ImageFont.load_default()#ImageFont.truetype("arial.ttf", size=50) # 计算文本位置使其居中 text_width, text_height = draw.textsize(code, font=font) text_x = (width - text_width) / 2 text_y = (height - text_height) / 2 # 在图片上绘制验证码 draw.text((text_x, text_y), code, fill=(0, 0, 0), font=font) # 保存图片为文件或显示图片 image.save("verification_code.png") image.show() # 生成验证码并创建图片 code = generate_verification_code() create_verification_image(code)
4、增强安全性
为了进一步增强验证码的安全性,在图像中添加随机噪点,使图像更难被自动化程序识别。对文本进行轻微的扭曲或旋转,增加识别难度。使用多种颜色绘制文本和背景,使验证码更加复杂。
from PIL import Image, ImageDraw, ImageFont import random def add_noise(draw, width, height): for _ in range(100): x = random.randint(0, width) y = random.randint(0, height) draw.point((x, y), fill=(0, 0, 0)) def create_verification_image(code): # 图片尺寸和背景色 width, height = 200, 100 background_color = (255, 255, 255) # 白色 # 创建图片对象 image = Image.new('RGB', (width, height), background_color) draw = ImageDraw.Draw(image) # 在生成验证码函数中调用add_noise add_noise(draw, width, height) # 设置字体和字号 font = ImageFont.load_default()#ImageFont.truetype("arial.ttf", size=50) # 计算文本位置使其居中 text_width, text_height = draw.textsize(code, font=font) text_x = (width - text_width) / 2 text_y = (height - text_height) / 2 # 在图片上绘制验证码 draw.text((text_x, text_y), code, fill=(0, 0, 0), font=font) # 保存图片为文件或显示图片 image.save("verification_code.png") image.show()