这里记录一下图片验证码的简单实现
import string
import random
from PIL import Image, ImageDraw,ImageFont
def get_captcha_string(number, has_letters=True):
# 判断是否需要包含字母
if has_letters:
source = list(string.ascii_letters + string.digits)
else:
source = list(string.digits)
chars = ""
for i in range(number):
chars += random.choice(source)
return "".join(chars)
class GraphCaptcha(object):
number = 4
# 验证码图片长宽
width = 100
height = 30
# 验证码文字大小
fontsize = 32
@classmethod
def __random_color(cls, start=0, end=255):
return (random.randint(start, end), random.randint(start, end),
random.randint(start, end))
@classmethod
def __random_font(cls):
fonts = [
"framd.ttf",
"framdit.ttf",
"verdana.ttf",
"verdanai.ttf"
]
font = random.choice(fonts)
return 'captcha/'+font
@classmethod
def __set_point(cls, draw):
for w in range(cls.width):
for h in range(cls.height):
draw.point((w, h), fill=cls.__random_color())
@classmethod
def get_captcha(cls):
image = Image.new("RGB", (cls.width, cls.height), (255, 255, 255))
draw = ImageDraw.Draw(image)
cls.__set_point(draw)
text = get_captcha_string(number=cls.number)
font = ImageFont.truetype('verdana.ttf', cls.fontsize)
font_width, font_height = font.getsize(text)
draw.text(((cls.width - font_width) / 2,
(cls.height - font_height) / 2), text, font=font,
fill=cls.__random_color(start=32, end=127))
return text,image