Python 随机生成中文验证码的实例代码

yipeiwu_com6年前Python基础

python代码

复制代码 代码如下:

 # -*- coding: utf-8 -*-

 import Image,ImageDraw,ImageFont

 import random

 import math, string  

 class 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 = 'wqy.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)

调用方法

复制代码 代码如下:

 ic = ImageChar(fontColor=(100,211, 90))

 ic.randChinese(4)

 ic.save("1.jpeg")

相关文章

Python3中urlencode和urldecode的用法详解

在Python3中,将中文进行urlencode编码使用函数 urllib.parse.quote(string, safe='/', encoding=None, errors=N...

Python使用defaultdict读取文件各列的方法

本文实例讲述了Python使用defaultdict读取文件各列的方法。分享给大家供大家参考,具体如下: #!/usr/bin/python """USAGE: python *.p...

python打包exe开机自动启动的实例(windows)

一、背景 简单的写个.exe程序,没必要去学习mfc、c++等,可以学习python。python可以轻易的调用windows的api,轻松的实现你想干的事。下面就是实现打包的exe文...

在Django中使用Sitemap的方法讲解

sitemap 是你服务器上的一个XML文件,它告诉搜索引擎你的页面的更新频率和某些页面相对于其它页面的重要性。 这个信息会帮助搜索引擎索引你的网站。 例如,这是 Django 网站(h...

将TensorFlow的模型网络导出为单个文件的方法

有时候,我们需要将TensorFlow的模型导出为单个文件(同时包含模型架构定义与权重),方便在其他地方使用(如在c++中部署网络)。利用tf.train.write_graph()默认...