Python实现随机生成图片验证码详解
简介
图片验证码是一种常见的用户身份验证方式。Python提供了丰富的库,可以轻松地实现随机生成图片验证码。
随机生成图片验证码的主要思路:
- 定义图片大小和颜色;
- 定义验证码字符集;
- 随机生成验证码;
- 添加干扰线、噪点等;
- 保存图片。
示例一:随机生成4位数字验证码
from PIL import Image, ImageDraw, ImageFont
import random
# 定义图片大小、背景颜色、字体大小、字符集、字符数量
width, height, bg_color, font_size, charset, code_len = 120, 30, "#FFFFFF", 20, "0123456789", 4
# 随机生成验证码
code = "".join(random.sample(charset, code_len))
# 创建Image对象
img = Image.new("RGB", (width, height), bg_color)
# 创建Draw对象
draw = ImageDraw.Draw(img)
# 创建Font对象
font = ImageFont.truetype("arial.ttf", font_size)
# 绘制验证码字符
left = (width - font_size * code_len) // 2
top = (height - font_size) // 2
for i, ch in enumerate(code):
draw.text((left + font_size * i, top), ch, fill=random.choice(["#FF0000", "#00FF00", "#0000FF"]), font=font)
# 添加干扰线、噪点
for i in range(3):
x1 = random.randint(0, width // 2)
y1 = random.randint(0, height)
x2 = random.randint(0, width // 2) + width // 2
y2 = random.randint(0, height)
draw.line((x1, y1, x2, y2), fill=random.choice(["#FF0000", "#00FF00", "#0000FF"]), width=2)
x = random.randint(0, width)
y = random.randint(0, height)
draw.point((x, y), fill=random.choice(["#FF0000", "#00FF00", "#0000FF"]))
# 保存验证码图片
img.save(f"{code}.png")
以上代码中,通过Pillow库的Image、ImageDraw、ImageFont模块实现图片的创建、绘制和字体加载。随机生成了4位数字验证码,并绘制在图片上,同时加入干扰线和噪点。最后将生成的验证码图片保存。
示例二:随机生成4位大小写字母和数字混合验证码
from PIL import Image, ImageDraw, ImageFont
import random
# 定义图片大小、背景颜色、字体大小、字符集、字符数量
width, height, bg_color, font_size, charset, code_len = 120, 30, "#FFFFFF", 20, "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", 4
# 随机生成验证码
code = "".join(random.sample(charset, code_len))
# 创建Image对象
img = Image.new("RGB", (width, height), bg_color)
# 创建Draw对象
draw = ImageDraw.Draw(img)
# 创建Font对象
font = ImageFont.truetype("arial.ttf", font_size)
# 绘制验证码字符
left = (width - font_size * code_len) // 2
top = (height - font_size) // 2
for i, ch in enumerate(code):
draw.text((left + font_size * i, top), ch, fill=random.choice(["#FF0000", "#00FF00", "#0000FF"]), font=font)
# 添加干扰线、噪点
for i in range(3):
x1 = random.randint(0, width // 2)
y1 = random.randint(0, height)
x2 = random.randint(0, width // 2) + width // 2
y2 = random.randint(0, height)
draw.line((x1, y1, x2, y2), fill=random.choice(["#FF0000", "#00FF00", "#0000FF"]), width=2)
x = random.randint(0, width)
y = random.randint(0, height)
draw.point((x, y), fill=random.choice(["#FF0000", "#00FF00", "#0000FF"]))
# 保存验证码图片
img.save(f"{code}.png")
以上代码与示例一类似,不同之处在于添加了大小写字母和数字到字符集中,并随机生成包含它们的验证码。
总结
以上是随机生成图片验证码的完整攻略,通过Python和Pillow库的相关模块,可以实现各式各样的验证码的生成。图片验证码可以在网站、用户注册、信息安全验证等场景中得到广泛的应用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现随机生成图片验证码详解 - Python技术站