使用 Python 這個(gè)庫(kù),生成各種類(lèi)型的驗(yàn)證碼
在 Python 中生成驗(yàn)證碼通常涉及使用隨機(jī)數(shù)、圖像處理庫(kù)以及字體文件等。以下是一個(gè)簡(jiǎn)單的示例,演示如何使用 Python 和 Pillow 庫(kù)來(lái)生成包含隨機(jī)字符的簡(jiǎn)單驗(yàn)證碼圖像:
```python
from PIL import Image, ImageDraw, ImageFont
import random
import string
# 生成指定長(zhǎng)度的隨機(jī)字符串
def generate_random_string(length):
characters = string.ascii_letters + string.digits
return ''.join(random.choice(characters) for i in range(length))
# 生成驗(yàn)證碼圖像
def generate_captcha_image(text, width, height, font_path, output_image_path):
image = Image.new('RGB', (width, height), color = (255, 255, 255))
draw = ImageDraw.Draw(image)
font = ImageFont.truetype(font_path, 40) # 使用指定字體和大小
draw.text((10, 10), text, fill=(0, 0, 0), font=font)
image.save(output_image_path)
# 生成隨機(jī)字符串
captcha_text = generate_random_string(6)
# 生成驗(yàn)證碼圖像
generate_captcha_image(captcha_text, 150, 50, "arial.ttf", "captcha_image.png")
```
在這個(gè)示例中,我們首先使用 generate_random_string 函數(shù)生成指定長(zhǎng)度的隨機(jī)字符串,然后使用 generate_captcha_image 函數(shù)創(chuàng)建一個(gè)指定大小的圖像,將隨機(jī)字符串繪制到圖像上,并保存為文件。
需要注意的是,以上示例中使用了 Pillow 庫(kù)來(lái)創(chuàng)建和處理圖像,同時(shí)需要提供一個(gè)字體文件(比如 Arial 字體)來(lái)顯示驗(yàn)證碼文字。你可以根據(jù)自己的需求調(diào)整字體、顏色、大小等參數(shù),以及實(shí)現(xiàn)更復(fù)雜的驗(yàn)證碼生成邏輯,比如添加干擾線、噪點(diǎn)等。
要生成五顏六色的驗(yàn)證碼,你可以使用 Python 的 Pillow 庫(kù)來(lái)創(chuàng)建帶有彩色文本和背景的圖像。以下是一個(gè)示例代碼,演示如何生成五顏六色的驗(yàn)證碼圖像:
from PIL import Image, ImageDraw, ImageFont
import random
import string
# 生成指定長(zhǎng)度的隨機(jī)字符串
def generate_random_string(length):
characters = string.ascii_letters + string.digits
return ''.join(random.choice(characters) for i in range(length))
# 生成隨機(jī)顏色
def generate_random_color():
return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
# 生成彩色驗(yàn)證碼圖像
def generate_colorful_captcha_image(text, width, height, font_path, output_image_path):
image = Image.new('RGB', (width, height), color = generate_random_color())
draw = ImageDraw.Draw(image)
font = ImageFont.truetype(font_path, 40) # 使用指定字體和大小
for i in range(len(text)):
draw.text((10 + i * 30, 10), text[i], fill=generate_random_color(), font=font)
image.save(output_image_path)
# 生成隨機(jī)字符串
captcha_text = generate_random_string(6)
# 生成彩色驗(yàn)證碼圖像
generate_colorful_captcha_image(captcha_text, 200, 100, "arial.ttf", "./img/"+captcha_text + ".png")
from PIL import Image, ImageDraw, ImageFont
import random
import string
# 生成隨機(jī)數(shù)字
def generate_random_number():
return random.randint(1, 10)
# 生成驗(yàn)證碼文本和計(jì)算結(jié)果
def generate_captcha_text():
num1 = generate_random_number()
num2 = generate_random_number()
operator = random.choice(['+', '-'])
if operator == '+':
result = num1 + num2
else:
result = num1 - num2
text = f"{num1} {operator} {num2} = ?"
return text, str(result)
# 生成驗(yàn)證碼圖像
def generate_math_captcha_image(text, width, height, font_path, output_image_path):
image = Image.new('RGB', (width, height), color=(255, 255, 255))
draw = ImageDraw.Draw(image)
font = ImageFont.truetype(font_path, 40) # 使用指定字體和大小
draw.text((10, 10), text, fill=(0, 0, 0), font=font)
image.save(output_image_path)
# 生成驗(yàn)證碼文本和結(jié)果
captcha_text, captcha_result = generate_captcha_text()
# 生成驗(yàn)證碼圖像
generate_math_captcha_image(captcha_text, 200, 50, "arial.ttf", "./img/"+captcha_text.replace('?','')+".png")
print("驗(yàn)證碼文本:", captcha_text)
print("計(jì)算結(jié)果:", captcha_result)