04 第三方之验证码封装

  安装模块

1 pip install flask
2 pip install pillow

  代码块

  1 from flask import Flask,make_response
  2 import random
  3 import string
  4 from io import BytesIO
  5 app = Flask(__name__)
  6
  7 from PIL import Image, ImageDraw, ImageFont
  8
  9
 10 class Captcha:
 11    # 生成的验证码的个数
 12    number = 4
 13    # 图片的宽度和高度
 14    size = (80, 30)
 15    # 字体大小
 16    fontsize = 25
 17    # 干扰线条数
 18    line_number = 2
 19
 20    SOURCE = list(string.ascii_letters)
 21    SOURCE.extend(map(str, list(range(0, 10))))
 22
 23    @classmethod
 24    def __gen_line(cls, draw, width, height):
 25       """
 26       绘制干扰线
 27       """
 28       begin = (random.randint(0, width), random.randint(0, height))
 29       end = (random.randint(0, width), random.randint(0, height))
 30       draw.line([begin, end], fill=cls.__gen_random_color(), width=2)
 31
 32    @classmethod
 33    def __gen_random_color(cls, start=0, end=255):
 34       """
 35       产生随机颜色
 36       颜色的取值范围是0~255
 37       """
 38       random.seed()
 39       return (
 40          random.randint(start, end),
 41          random.randint(start, end),
 42          random.randint(start, end),
 43       )
 44
 45    @classmethod
 46    def __gen_points(cls, draw, point_chance, width, height):
 47       """
 48       绘制干扰点
 49       """
 50       chance = min(100, max(0, int(point_chance)))
 51       for w in range(width):
 52          for h in range(height):
 53             temp = random.randint(0, 100)
 54             if temp > 100 - chance:
 55                draw.point((w, h), fill=cls.__gen_random_color())
 56
 57    @classmethod
 58    def __gen_random_font(cls):
 59       """
 60       采用随机字体
 61       :return:
 62       """
 63       fonts = ["consola.ttf", "consolab.ttf", "consolai.ttf"]
 64       font = random.choice(fonts)
 65       return "utils/captcha/" + font
 66
 67    @classmethod
 68    def gen_text(cls, number):
 69       """
 70       随机生成一个字符串
 71       :param number: 字符串数量
 72       """
 73       return "".join(random.sample(cls.SOURCE, number))
 74
 75    @classmethod
 76    def gen_graph_captcha(cls):
 77       width, height = cls.size
 78       # A表示透明度
 79       image = Image.new("RGBA", (width, height), cls.__gen_random_color(0, 100))
 80       # 字体
 81       font = ImageFont.truetype(cls.__gen_random_font(), cls.fontsize)
 82       # 创建画笔
 83       draw = ImageDraw.Draw(image)
 84       # 生成随机字符串
 85       text = cls.gen_text(cls.number)
 86       # 字体大小
 87       font_width, font_height = font.getsize(text)
 88       # 填充字符串
 89       draw.text(
 90          ((width - font_width) / 2, (height - font_height) / 2),
 91          text,
 92          font=font,
 93          fill=cls.__gen_random_color(150, 255),
 94       )
 95       # 绘制干扰线
 96       for x in range(0, cls.line_number):
 97          cls.__gen_line(draw, width, height)
 98       # 绘制噪点
 99       cls.__gen_points(draw, 10, width, height)
100
101       return text, image
102
103
104 @app.route(‘/captcha/‘)
105 def graph_captcha():
106    text, image = Captcha.gen_graph_captcha()
107    out = BytesIO()
108    image.save(out, ‘png‘)
109    out.seek(0)
110    resp = make_response(out.read())
111    resp.content_type = ‘image/png‘
112    return resp
113
114
115 if __name__ == ‘__main__‘:
116     app.run()

  验证码图样

原文地址:https://www.cnblogs.com/a2534786642/p/11040699.html

时间: 2024-11-06 09:55:29

04 第三方之验证码封装的相关文章

第三方接口调用封装

1.背景 基于公司项目情况,几乎每个项目都有大量的调用第三方数据接口的情况,因此急需一个公共的调用第三方接口的组件.同时也需要在调用过程中对于缓存.出错日志.重试等公共操作的封装. 2.组件设计说明 1.代码简洁.清晰 2.面向接口编程,支持扩展 3.职责单一原则 4.组件架构如下图: 3.代码说明 1.代码库地址: http://git.bbdops.com/dafei/components 2.采用技术包括 mybatis.jpa.swagger2.springboot

iOS开发短信验证码封装 方便好用

---恢复内容开始--- 1.RootViewControler//  Copyright © 2016年 Chason. All rights reserved.// #import "ViewController.h"#import "MessageCordView.h"//手机屏幕的宽和高#define kScreenWidth [UIScreen mainScreen].bounds.size.width#define KScreenHeight [UISc

1 如何引用第三方滑动验证码

参考:极验科技:https://docs.geetest.com/install/deploy/server/python 1 安装requests pip install requests 2 拷贝你在网站上下载好的软件包下面的sdk下面的geetest文件到你的项目utils目录下面 3 拷贝代码到views.py from utils.geetest import GeetestLib # 导入滑动验证码的模块 #请在官网申请ID使用,示例ID不可使用 pc_geetest_id = "b

笔记3 自定义 验证码封装

<?php /** * [code description] * @param integer $width [验证码宽度] * @param integer $height [验证码高度] * @param integer $num [验证码个数] * @param integer $type [验证码类型 1:纯数字 2:字母 3:数字加字母 4:汉字] * @return [type] [description] */ function code($width=160,$height=40

php验证码封装

/** * 生成验证码 * @param int $type 1: 纯数字,2:纯字母,3:数字与字母混合  * @param int $length * @return string */function buildRandomString($type=1,$length=4){ if ($type == 1) { $chars = join ( "", range ( 0, 9 ) ); } elseif ($type == 2) { $chars = join ( "&

在Vue将第三方JS库封装为组件使用

第三方JS库地址:https://github.com/inorganik/CountUp.js 原文地址:https://www.cnblogs.com/qicao/p/10805715.html

04 json,xml混合封装通信

<?php class Response_json_xml{ public static function show($code,$message="",$data=array(),$type){ if(is_null($code)){ return ''; } $data=array( 'code'=>$code, 'message'=>$message, 'data'=>$data ); if($type=="json"){ self::

PHP学习之验证码(2)封装验证码

1. range — 根据范围创建数组,包含指定的元素    2. rand — 产生一个随机整数   3. array_rand — 从数组中取出一个或多个随机的单元,并返回随机条目的一个或多个键. array_rand( array $array[, int $num = 1] ),参数num指明了你想取出多少个单元.   4. array_flip — 交换数组中的键和值 5. mb_substr( string $str, int $start[, int $length = NULL[

如何封装第三方API

日常开发中,少不了对第三方api的封装.api封装的好坏绝定了后期维护的难度以及使用api的开发人员是否抱怨.比如:有一天第三方api的域名变了.或者自己封装的api没有参数说明,过段时间来改代码自己忘什么意思了.或者应该调用哪个URL来满足我当前的需求.考虑到这些因素,最终选择将api封装为jar包,并生成相应的文档. 首先看一个错误案例: 错误例子 url没有使用全局变量,一旦域名变更或者http变为https,你就得满项目的替换.bug的几率可以说是飙升.大家千万别存在侥幸心理说域名和ht