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

pillow是Python平台事实上的图像处理标准库。PIL功能非常强大,但API却非常简单易用。 所以我们使用它在环境里做图像的处理。

第一步 下载pillow

#运行命令 pip install pillow

第二部 编写代码

1>创建一个类,初始化并为类添加属性

我们可能需要的属性有:验证码图片宽高,干扰点线数量,我们要出现多少个验证码等

2>随机生成背景颜色和字体颜色,在此建议将背景色生成范围定为浅色(0-120),字体色为深色(120-255)易于人眼识别

3>创建画布并依次画线点字,如果需要将字体倾斜旋转需要拷贝原图旋转再与原图合成

4>返回验证码图片和验证码答案字符串

例:

from PIL import Image,ImageDraw,ImageFont
import random
import io

class code:
    def __init__(self):
        self.width=120 //生成验证码图片的宽度
        self.height=40  //生成验证码图片的高度
        self.im=None
        self.lineNum=None //生成干扰线的数量
        self.pointNum=None  //生成干扰点的数量
        self.codecon="QWERTYUPASDFGHJKZXCVBNMqwertyupadfhkzxcvbnm0123456789" //验证码出现的字符
        self.codelen=4 //验证码出现字符的数量
        self.str=""
    def randBgColor(self):
        return (random.randint(0,120),random.randint(0,120),random.randint(0,120))
    def randFgColor(self):
        return (random.randint(120, 255), random.randint(120, 255), random.randint(120, 255))
    def create(self):
        self.im = Image.new(‘RGB‘, size=(self.width, self.height), color=self.randBgColor())
    def lines(self):
        lineNum=self.lineNum or random.randint(3,6)
        draw = ImageDraw.Draw(self.im)
        for item in range(lineNum):
            place=(random.randint(0,self.width),random.randint(0,self.height),random.randint(0,self.height),random.randint(0,self.height))
            draw.line(place,fill=self.randFgColor(),width=random.randint(1,3))
    def point(self):
        pointNum = self.pointNum or random.randint(30, 60)
        draw = ImageDraw.Draw(self.im)
        for item in range(pointNum):
            place=(random.randint(0,self.width),random.randint(0,self.height))
            draw.point(place,fill=self.randFgColor())
    def texts(self):
        draw = ImageDraw.Draw(self.im)
        for item in range(self.codelen):
            x=item*self.width/self.codelen+random.randint(-self.width/15,self.width/15)
            y=random.randint(-self.height/10,self.height/10)
            text=self.codecon[random.randint(0,len(self.codecon)-1)]
            self.str+=text
            fnt = ImageFont.truetype(‘ARVO-REGULAR.TTF‘, random.randint(30,38))
            draw.text((x,y),text,fill=self.randFgColor(),font=fnt,rotate="180")
    def output(self):
        self.create()
        self.texts()
        self.lines()
        self.point()
        bt=io.BytesIO()
        self.im.save(bt,"png")
        return bt.getvalue()

5>将验证码渲染到网页中,以Flask为例

<img src="/codeimg" alt="" width="120" height="40">
@app.route(‘/codeimg‘)
def codeimg():
    codeobj=code()
    res=make_response(codeobj.output())
    session["code"]=codeobj.str.lower()
    res.headers["content-type"]="image/png"
    return res

简单的输入式验证码就完成了,如有错误之处欢迎指正。

破解验证码时我们要用到第三方库。

解决思路:因为这种是最简单的一种验证码,只要识别出里面的内容,然后填入到输入框中即可。这种识别技术叫OCR,这里推荐使用Python的第三方库,tesserocr。对于有嘈杂的背景的验证码这种,直接识别识别率会很低,遇到这种我们就得需要先处理一下图片,先对图片进行灰度化,然后再进行二值化,再去识别,这样识别率会大大提高。

同样也可以参考使用pillow处理识别,链接https://blog.csdn.net/qq_35923581/article/details/79487579

原文地址:https://www.cnblogs.com/songyifan427/p/9981467.html

时间: 2024-11-02 11:46:31

使用Python生成基础验证码教程的相关文章

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生成中文验证码,带旋转,带干扰噪音线段

# -*- 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.

python 生成图形验证码

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

python tesseract-ocr 基础验证码识别功能(Windows)

一.环境 windows 7 x64 Python 3 + 二.安装 1.tesseract-ocr安装 http://digi.bib.uni-mannheim.de/tesseract/ 2.pytesseract安装 pip install pytesseract 3.Pillow 安装 pip install pillow 三.使用 #! -*- coding:utf-8 -*- import pytesseract from PIL import Image pytesseract.p

python实现图片验证码

1 验证基础知识1.1 Python生成随机验证码,需要使用PIL模块. # 安装 pip3 install pillow 1.2 创建图片 from PIL import Image img = Image.new(mode="RGB", size=(120, 30), color=(125, 255, 255)) # 保存图片到本地 with open("code.png",'wb') as f: img.save(f,format="png"

如何生成随机验证码

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='

python基础系列教程——Python3.x标准模块库目录

python基础系列教程——Python3.x标准模块库目录 文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata:Unicode字符数据库 stringprep:互联网字符串准备工具 readline:GNU按行读取接口 rlcompleter:GNU按行读取的实现函数 二进制数据 struct:将字节解析为打包的二进制数据 codecs:注册表与基类的编解码器 数据类型 datetime:基于日期与时间工具

python机器学习基础教程-鸢尾花分类

一: 环境准备: 1.导入的库: import numpy as np import matplotlib.pyplot as plt import pandas as pd import mglearn 2.导入数据集 from sklearn.datasets import load_iris iris_dataset = load_iris() 二. 划分训练数据和测试数据 1. train_test_split: 将数据集打乱并进行拆分 from sklearn.model_select