python">参数:图片宽高、验证码个数,文字大小
def check_code(width=90, height=30, length=4, font_size=26):code = []from PIL import Image, ImageDrawimg = Image.new(mode='RGB', size=(width, height), color=(255, 255, 255))draw = ImageDraw.Draw(img, mode='RGB')def rndChar():# 定义字符的ASCII码范围ascii_ranges = [(48, 57), # 数字 0-9(65, 90), # 大写字母 A-Z(97, 122), # 小写字母 a-z]# 随机选择一个范围chosen_range = random.choice(ascii_ranges)# 在选定的范围内随机选择一个字符并返回return chr(random.randint(chosen_range[0], chosen_range[1]))def rndColor():# 随机颜色,不用255因为有点浅return (random.randint(0, 200), random.randint(0, 200), random.randint(0, 200))# 绘制字符for i in range(length):char = rndChar()code.append(char)h = random.randint(0, 3)w = i * width / length + random.randint(-2, 5)draw.text(xy=(w, h), text=char, fill=rndColor(), font_size=font_size)# 绘制干扰像素点for _ in range(40):draw.point(xy=(random.randint(0, width), random.randint(0, height)), fill=(255, 255, 255))# 绘制干扰圈for _ in range(30):x = random.randint(0, width)y = random.randint(0, height)draw.arc(xy=(x, y, x + 5, y + 5), start=random.randint(0, 180), end=random.randint(180, 360), fill=rndColor())# 绘制干扰线for i in range(5):x1, y1 = random.randint(0, width), random.randint(0, height)x2, y2 = random.randint(0, width), random.randint(0, height)draw.line(xy=(x1, y1, x2, y2), fill=rndColor())img.save(r'F:\Code\PythonCode\djangoProject\app02\static\img\code.png')return img, ''.join(code)