51. Python 数据处理(2)
import randomimport string
from PIL import Image, ImageDraw, ImageFont, ImageFilter
class VerCode(object):
def __init__(self):
# 字体的位置,不同版本的系统会有不同
self.font_path = 'consolai.ttf'
# 生成几位数的验证码
self.number = 4
# 生成验证码图片的高度和宽度
self.size = (100, 30)
# 背景颜色,默认为白色
self.bgcolor = (255, 255, 255)
# 字体颜色,默认为蓝色
self.fontcolor = (0, 0, 255)
# 干扰线颜色。默认为红色
self.linecolor = (255, 0, 0)
# 是否要加入干扰线
self.draw_line = True
# 加入干扰线条数的上下限
self.line_number = 20
# 用来随机生成一个字符串
def gene_text(self):
self.source = list(string.ascii_letters)
for self.index in range(0, 10):
self.source.append(str(self.index))
return ''.join(random.sample(self.source, self.number))# number是生成验证码的位数
# 用来绘制干扰线
def gene_line(self, draw, width, height):
self.begin = (random.randint(0, width), random.randint(0, height))
self.end = (random.randint(0, width), random.randint(0, height))
draw.line(, fill=self.linecolor)
# 生成验证码
def gene_code(self):
self.width, self.height = self.size# 宽和高
self.image = Image.new('RGBA', (self.width, self.height), self.bgcolor)# 创建图片
self.font = ImageFont.truetype(self.font_path, 25)# 验证码的字体
self.draw = ImageDraw.Draw(self.image)# 创建画笔
self.text = self.gene_text() # 生成字符串
self.font_width, self.font_height = self.font.getsize(self.text)
self.draw.text(((self.width - self.font_width) / self.number, (self.height - self.font_height) / self.number), self.text, font=self.font, fill=self.fontcolor)# 填充字符串
if self.draw_line:
for i in range(self.line_number):
self.gene_line(self.draw, self.width, self.height)
def effect(self):
#self.image = self.image.transform((self.width + 20, self.height + 10), Image.AFFINE, (1, -0.3, 0, -0.1, 1, 0), Image.BILINEAR)# 创建扭曲
self.image = self.image.filter(ImageFilter.EDGE_ENHANCE_MORE)# 滤镜,边界加强
self.image.save('idencode.png')# 保存验证码图片
#self.image.show()
if __name__ == "__main__":
vco = VerCode()
vco.gene_code()
vco.effect()
页:
[1]