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

 更新时间:2013年03月20日 09:59:52   作者:  
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")

相关文章

  • python按综合、销量排序抓取100页的淘宝商品列表信息

    python按综合、销量排序抓取100页的淘宝商品列表信息

    这篇文章主要为大家详细介绍了python按综合、销量排序抓取100页的淘宝商品列表信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • 高效访问Pandas DataFrame中满足特定条件的行

    高效访问Pandas DataFrame中满足特定条件的行

    在使用 Pandas DataFrame 时,我们经常需要对其中的数据进行过滤,只选择满足特定条件的行,本文主要介绍了高效访问Pandas DataFrame中满足特定条件的行,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • Pytorch 神经网络—自定义数据集上实现教程

    Pytorch 神经网络—自定义数据集上实现教程

    今天小编就为大家分享一篇Pytorch 神经网络—自定义数据集上实现教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • python安装包出现Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None))问题解决

    python安装包出现Retrying (Retry(total=4, connect=None, read=No

    这篇文章主要给大家介绍了关于python安装包出现Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None))问题的解决方法,需要的朋友可以参考下
    2022-09-09
  • 如何将 awk 脚本移植到 Python

    如何将 awk 脚本移植到 Python

    脚本是解决问题的有效方法,而 awk 是编写脚本的出色语言。它特别擅长于简单的文本处理,它可以带你完成配置文件的某些复杂重写或目录中文件名的重新格式化。这篇文章主要介绍了如何把 awk 脚本移植到 Python,需要的朋友可以参考下
    2019-12-12
  • 使用Python实现Excel表格转图片

    使用Python实现Excel表格转图片

    在数据处理与信息分享过程中,Excel表格作为一种强大的数据管理工具被广泛应用,这篇文章主要为大家详细介绍了如何使用Python将Excel表格转换为图片,需要的可以参考下
    2024-04-04
  • Python使用matplotlib的pie函数绘制饼状图功能示例

    Python使用matplotlib的pie函数绘制饼状图功能示例

    这篇文章主要介绍了Python使用matplotlib的pie函数绘制饼状图功能,结合实例形式分析了Python使用matplotlib的pie函数进行饼状图绘制的具体操作技巧,注释中对pie函数的用法进行了详细的说明,便于理解,需要的朋友可以参考下
    2018-01-01
  • python缩进长度是否统一

    python缩进长度是否统一

    在本篇内容里小编给大家整理的是一篇关于python缩进长度是否统一的相关知识点,需要的朋友们可以学习下。
    2020-08-08
  • Python简单生成随机姓名的方法示例

    Python简单生成随机姓名的方法示例

    这篇文章主要介绍了Python简单生成随机姓名的方法,结合实例形式分析了Python基于random模块生成随机字符串组合的相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • Python中lambda表达式的使用详解(完整通透版)

    Python中lambda表达式的使用详解(完整通透版)

    这篇文章主要介绍了Python中lambda表达式使用的相关资料,包括其基本语法、常见应用场景(如排序、map、filter、reduce函数结合使用)以及如何在函数内部或一次性使用,通过代码介绍的非常详细,需要的朋友可以参考下
    2024-12-12

最新评论