# coding=utf-8
import random
import string
from PIL import Image, ImageDraw, ImageFont, ImageFilter
# 字体的位置,不同版本的系统会有不同
font_path = './Fonts/ARLRDBD.ttf'
# 生成几位数的验证码
number = 4
# 生成验证码图片的宽度和高度
size = (90, 32)
# 背景颜色,默认为白色
bgcolor = (255, 255, 255)
# 字体颜色,默认为蓝色
fontcolor = (0, 0, 0)
# 干扰线颜色。默认为红色
linecolor = (255, 0, 0)
# 是否要加入干扰线
draw_line = False
# 加入干扰线条数的上下限
line_number = (1, 5)
# 用来随机生成一个字符串
def gene_text():
source = list(string.ascii_letters)
digits = list(string.digits)
source.extend(digits)
return ''.join(random.sample(source, number)) # number是生成验证码的位数
# 用来绘制干扰线
def gene_line(draw, width, height):
begin = (random.randint(0, width), random.randint(0, height))
end = (random.randint(0, width), random.randint(0, height))
draw.line([begin, end], fill=linecolor)
# 生成验证码
def gene_code():
width, height = size # 宽和高
image = Image.new('RGBA', (width, height), bgcolor) # 创建图片
font = ImageFont.truetype(font_path, 25) # 验证码的字体
draw = ImageDraw.Draw(image) # 创建画笔
text = gene_text() # 生成字符串
print('The Label of Image: ', text)
font_width, font_height = font.getsize(text)
draw.text(((width - font_width) / number, (height - font_height) / number), text,
font=font, fill=fontcolor) # 填充字符串
if draw_line:
gene_line(draw, width, height)
# image = image.transform((width+30,height+10), Image.AFFINE, (1,-0.3,0,-0.1,1,0),Image.BILINEAR) #创建扭曲
# image = image.transform((width, height), Image.AFFINE, (1, -0.1, 0, -0.05, 1, 1), Image.BILINEAR) # 创建扭曲
# TODO: 旋转字体
image = image.filter(ImageFilter.EDGE_ENHANCE_MORE) # 滤镜,边界加强
image.save(text + '.png') # 保存验证码图片
if __name__ == "__main__":
gene_code()
验证码生成
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 下面imagecode方法是一个生成图形验证码的请求,checkcode方法实现了对这个图形验证码的验证。从验证码...