随机生成图片验证码

发布时间 2023-11-10 09:41:57作者: 冀未然

随机生成验证码

from PIL import Image, ImageDraw, ImageFont import random 

随机颜色1(背景颜色):

def rndColor(): return (random.randint(170, 250), random.randint(170, 250), random.randint(170, 250)) 

随机颜色2(数字或字母颜色):

def rndColor2(): return (random.randint(0, 127), random.randint(0, 127), random.randint(0, 127)) 

生成随机验证码文本

def generate_random_code(code_length): code_chars = '0123456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ-_*#$%' # 0123456789abcdefghjkmnpqrstuvwxyz code = '' for _ in range(code_length): code += random.choice(code_chars) return code 

生成验证码图片

def generate_captcha_image(width, height, code_length): 
## 创建一个空白图片
 image = Image.new('RGBA', (width, height), (255, 255, 255)) draw = ImageDraw.Draw(image) for x in range(width): for y in range(height): draw.point((x, y), fill=rndColor()) 
## 选择字体和字体大小
 font = ImageFont.truetype('arial.ttf', 20) 

## 生成随机验证码文本

code = generate_random_code(code_length) ascent, descent = font.getsize(code) # 这里拿到文字内容的大小 
## 将验证码文本绘制到图片上
 x = 1 
## width/2-ascent/2 # 这里是文字内容的居中绘制算法
 print(code) 
## y = height # y坐标也可以根据x算法设置居中显示(y0/2-descent/2),我这里是自定义
```
for i in range(6):
draw.text((x+i(width-2x)/6, 0), code[i], font=font, fill=rndColor2())
return image

def save_captcha_image(image, filename):
image.save(filename)
```

调用生成验证码图片和保存验证码图片的函数

captcha_image = generate_captcha_image(80, 22, 6) save_captcha_image(captcha_image, 'captcha.png') img = Image.open(('captcha.png')) Image._show(img)