python生成中文验证码,带旋转,带干扰噪音线段

# -*- coding: utf-8 -*-
"""
Created on Sun Oct  4 15:57:46 2015

@author: keithguofan
"""

import random
from PIL import Image,ImageDraw,ImageFont
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‘)
       # return str.encode(‘gb2312‘).decode(‘gb2312‘)
        return codecs.decode(str,‘hex_codec‘).decode(‘gb2312‘)

class ImageChar():
    def __init__(self,fontColor=(0,0,0),
                 size=(100,40),
                # fontPath=‘C:/Windows/Fonts/wqy.ttc‘,
                 fontPath=‘C:/Windows/Fonts/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)
      #  print(pos)
       # print(txt)
        #print(self.font)
        #print(fill)
        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)

if __name__ == ‘__main__‘:
    ic=ImageChar(fontColor=(100,211,90))
    ic.randChinese(4)
    ic.save("5.jpeg")

最近在研究验证码识别,中文的验证码不太好识别,上面的代码我参考了一些博客,亲测通过。我的python环境是python3.4

生成的图片大概是这个样子:

代码很简单。

核心思想是:

生成随机十六进制数字,然后将其转换为汉字,通过ImageDraw的方法将其打印到图片中,对字做一些随机旋转,然后随机加入随机颜色的线段。

如有不懂的可以联系我哦。

时间: 2024-10-06 01:19:15

python生成中文验证码,带旋转,带干扰噪音线段的相关文章

Python PIL模块随机生成中文验证码

PIL是Python Imaging Library的简称,PIL是一个Python处理图片的库,提供了一系列模块和方法,比如:裁切,平移,旋转,改变尺寸等等.已经是Python平台事实上的图像处理标准库了.PIL功能非常强大,但API却非常简单易用. PIL有如下几个模块:Image模块.ImageChops模块.ImageCrackCode模块.ImageDraw模块.ImageEnhance模块.ImageFile模块.ImageFileIO模块.ImageFilter模块.ImageFo

PIL模块与随机生成中文验证码

今天我们要学习的内容是如何利用Python生成一个随机的中文验证码,并将图片保存为.jpeg格式. 在这之前,你首先得了解Python中的PIL库.PIL是Python Imaging Library的简称,PIL是一个Python处理 图片的库,提供了一系列模块和方法,比如:裁切,平移,旋转,改变尺寸等等.在PIL库中,任何一个图像都是用 Image对象来表示的,所以要加载一张图片,最简单的形式如下: from PIL import Image image = Image.open("1.jp

Python 生成随机验证码

Python生成随机验证码 Python生成随机验证码,需要使用PIL模块. 安装: 1 pip3 install pillow 基本使用 1. 创建图片 1 2 3 4 5 6 7 8 9 from PIL import Image img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255)) # 在图片查看器中打开 # img.show()  # 保存在本地 with open('code.png','wb') as f

python生成随机验证码

Python 生成随机验证码,需安装 PIL模块 安装: pip3 install pillow 基本使用 1,.创建图片 from PIL import Image img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255)) # 在图片查看器中打开 # img.show() # 保存在本地 with open('code.png','wb') as f: img.save(f,format='png') 2.创建画笔,用

使用Python生成基础验证码教程

pillow是Python平台事实上的图像处理标准库.PIL功能非常强大,但API却非常简单易用. 所以我们使用它在环境里做图像的处理. 第一步 下载pillow #运行命令 pip install pillow 第二部 编写代码 1>创建一个类,初始化并为类添加属性 我们可能需要的属性有:验证码图片宽高,干扰点线数量,我们要出现多少个验证码等 2>随机生成背景颜色和字体颜色,在此建议将背景色生成范围定为浅色(0-120),字体色为深色(120-255)易于人眼识别 3>创建画布并依次画

Python 生成中文词云

豆子无意中发现Python有个现成的模块 word cloud可以根据文本文件生成词云,很好很强大,简单地玩了一把. 写代码之前,首先需要安装3个依赖的Python模块,分别是matplotlib, jieba和wordcloud.这三个模块分别是用来作图,中文分词和生成词云的.安装方式可以直接通过 pip install实现.如果在线安装出现报错(很有可能的事情),那么可以去https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载对应版本和位数的whl文件,

python 生成图形验证码

文章链接:https://mp.weixin.qq.com/s/LYUBRNallHcjnhJb1R3ZBg 日常在网站使用过程中经常遇到图形验证,今天准备自己做个图形验证码,这算是个简单的功能,也适合新手练习的,便于自己学习. 主要用到的库--PIL图像处理库,简单的思路,我们需要随机的颜色,随机的数字或字母,随机的线条.点作为干扰元素 拼凑成一张图片. 生成随机颜色,返回的是rgb三色. def getRandomColor(): r = random.randint(0, 255) g =

Flask 生成中文图片验证码

因最近要用到验证码,上网搜了下,发现什么验证码感觉都能被攻破,连最近疯传的变态的12306的验证码居然有人一天就攻破了,所以,综合考虑,还是使用汉字: web框架是Flask,然后使用python的Image库生成中文验证码,后续也可加入数字字母啥的. 代码如下: # -*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') """ __author__="tina&qu

在JSP中动态生成随机验证码,登录时后台校验验证码,以及如何避免同一个验证码被重复提交爆破密码

只需几步就可以生成动态随机的验证码,最终效果如下图: 一 前台显示页面login.jsp 其中验证码显示的是一张图片,链接指向的是生成验证码的servlet,同时点击图片后触发changeImg()这个js函数,使其动态生成一个新的验证码,这个函数中的参数t=Math.random()并不会参与验证码的生成,它的作用仅仅只是表示每次提交的并不是同一个请求,需要单独处理,完整的login.jsp代码如下: <%@ page language="java" contentType=&