缘来路过 发表于 2018-8-7 08:25:27

51. Python 数据处理(2)

import random  
import 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]
查看完整版本: 51. Python 数据处理(2)