【python 验证码】产生中文验证码

来源:互联网 发布:js点击弹出再点击隐藏 编辑:程序博客网 时间:2024/06/05 23:48
#-*-coding:utf-8-*-import sysreload(sys)sys.setdefaultencoding('utf-8')from PIL import ImageDraw,ImageFontfrom PIL import Imageimport randomimport math, stringclass RandomChar():  @staticmethod  def Unicode():    val = random.randint(0x4E00, 0x9FBF)    return unichr(val)  @staticmethod  def GB2312():    head = random.randint(0xB0, 0xCF)    body = random.randint(0xA, 0xF)    tail = random.randint(0, 0xF)    val = ( head << 8 ) | (body << 4) | tail    str = "%x" % val    return str.decode('hex').decode('gb2312')class ImageChar():  def __init__(self, fontColor = (0, 0, 0),                     size = (100, 40),                     fontPath = 'simsun.ttc',                     bgColor = (255, 255, 255),                     fontSize = 20):    self.size = size    self.fontPath = fontPath    self.bgColor = bgColor    self.fontSize = fontSize    self.fontColor = fontColor    self.font = ImageFont.truetype(self.fontPath, self.fontSize)    self.image = Image.new('RGB', size, bgColor)  def rotate(self):    self.image.rotate(random.randint(0, 30), expand=0)  def drawText(self, pos, txt, fill):    draw = ImageDraw.Draw(self.image)    draw.text(pos, txt, font=self.font, fill=fill)    del draw  def randRGB(self):    return (random.randint(0, 255),           random.randint(0, 255),           random.randint(0, 255))  def randPoint(self):    (width, height) = self.size    return (random.randint(0, width), random.randint(0, height))  def randLine(self, num):    draw = ImageDraw.Draw(self.image)    for i in range(0, num):      draw.line([self.randPoint(), self.randPoint()], self.randRGB())    del draw  def randChinese(self, num):    gap = 5    start = 0    for i in range(0, num):      char = RandomChar().GB2312()      x = start + self.fontSize * i + random.randint(0, gap) + gap * i      self.drawText((x, random.randint(-5, 5)), RandomChar().GB2312(), self.randRGB())      self.rotate()    self.randLine(18)  def save(self, path):    self.image.save(path,'jpeg')if __name__=='__main__':    ic = ImageChar(fontColor=(100,211, 90))    ic.randChinese(4)    ic.save("E:/ID/9.jpeg")

这里写图片描述

原创粉丝点击