1.安装Python

到官网下载响应系统的版本(这里以windows为例):https://www.python.org/downloads/windows/

然后就是不断地“下一步”

2.运行

要想node那样可以在命令行运行,要首先配置好系统的全局环境变量:

win10为例:“此电脑”--->“属性”--->“高级系统设置”--->“高级”下的“环境变量”--->找到“path”--->添加两个变量(python的安装目录和这个目录下的Scripts)

打开cmd,打python就可以运行了,同时python包管理器pip也可以运行了


3.开发验证码组件

先下载pillow库:

pip install pillow

photo.py:

# 引入pillow库
from PIL import Image,ImageDraw,ImageFont
# 引入randint用于生成随机int
from random import randint
# 引入sys
import sys w = int(sys.argv[1])
h = int(sys.argv[2])
fs = int(sys.argv[3])
s = sys.argv[4] # 用PIL的Image创建画布(颜色模式,(宽,高),(颜色对应最大取值))
img = Image.new('RGB',(w,h),(255,255,255)) # 用PIL的ImageDraw创建画笔gd
gd = ImageDraw.Draw(img) # 循环把文字输出
for i in range(len(s)):
# for下面记得缩进,不然报错
# 画文字
gd.text(
# 起始坐标点
(i*w/len(s)+randint(8,15),(h-fs)/2+randint(-5,5)),
# 要画的文字
s[i],
# 颜色
(randint(0,255),randint(0,255),randint(0,255)),
# 字体
ImageFont.truetype("C:\\Windows\\Fonts\\BuxtonSketch.ttf",fs)
) for i in range(20):
# for下面记得缩进,不然报错
# 画线
gd.line(
# 起点和终点 坐标点
(randint(0,w),randint(0,h),randint(0,w),randint(0,h)),
# 颜色
(randint(0,255),randint(0,255),randint(0,255)),
# 线宽度
1
) for i in range(int(w*h/200)):
# for下面记得缩进,不然报错
# 画点
gd.point(
# 坐标
(randint(0,w),randint(0,h)),
# 颜色
(randint(0,255),randint(0,255),randint(0,255))
) # 保存图片
img.save('1.png','PNG')

运行命令如:

python photo.py    sdfs

就会生成  宽高200,100  字体50  内容为“sdfs”的验证码

4.配合node使用

const koa = require('koa')
const koaRouter = require('koa-router')
const cp = require('child_process')
const fs = require('fs')
const static = require('koa-static') const server = new koa()
server.listen(8088) const r = new koaRouter()
server.use(r.routes()) r.get('/verify_code', async ctx => {
let {w,h,fs} = ctx.query
w = w ? w : 200
h = h ? h : 100
fs = fs ? fs : 50
let seeds = 'abcdefghijklimnopqrstuvwxyzABCDEFGHIJKLMNOPQRST2345678'
let arr = []
for(let i=0;i<5;i++) {
arr.push(seeds[parseInt(seeds.length*Math.random())])
}
let data = await newVerify(w,h,fs,arr.join('')).catch(e=>{})
ctx.body = data
}) function newVerify(w,h,fontSize,str) {
return new Promise(async (resolve,reject)=> {
cp.exec(`python photo.py ${w} ${h} ${fontSize} ${str}`, err => {
if(err) {
reject()
}
fs.readFile('./1.png', (err, data) => {
if(err) {
reject()
} else {
resolve(data)
}
})
})
})
} server.use(static('./www'))

python安装及写一个简单的验证码组件(配合node)的更多相关文章

  1. 手写一个简单的starter组件

    spring-boot中有很多第三方包,都封装成starter组件,在maven中引用后,启动springBoot项目时会自动装配到spring ioc容器中. 思考: 为什么我们springBoot ...

  2. Python使用Socket写一个简单聊天程序

    b2b模式的聊天工具 服务端: # 链接 while True: print('等待连接...') sock,adr = server_socket.accept() while True: try: ...

  3. Flask学习之旅--用 Python + Flask 制作一个简单的验证码系统

    一.写在前面 现在无论大大小小的网站,基本上都会使用验证码,登录的时候要验证,下载的时候要验证,而使用的验证码也从那些简简单单的字符图形验证码“进化”成了需要进行图文识别的验证码.需要拖动滑块的滑动验 ...

  4. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  5. 用node.js从零开始去写一个简单的爬虫

    如果你不会Python语言,正好又是一个node.js小白,看完这篇文章之后,一定会觉得受益匪浅,感受到自己又新get到了一门技能,如何用node.js从零开始去写一个简单的爬虫,十分钟时间就能搞定, ...

  6. 如何写一个简单的shell

    如何写一个简单的shell 看完<UNIX环境高级编程>后我就一直想写一个简单的shell来作为练习,因为有事断断续续的写了好几个月,如今写了差不多来总结一下. 源代码放在了Github: ...

  7. express 写一个简单的web app

    之前写过一个简单的web app, 能够完成注册登录,展示列表,CURD 但是版本好像旧了,今天想写一个简单的API 供移动端调用 1.下载最新的node https://nodejs.org/zh- ...

  8. 用C写一个简单的推箱子游戏(二)

    下面接着上一篇随笔<用C写一个简单的推箱子游戏(一)>来写 tuidong()函数是用来判断游戏人物前方情况的函数,是推箱子游戏中非常重要的一个函数,下面从它开始继续介绍推箱子的小程序怎么 ...

  9. 动手写一个简单的Web框架(HelloWorld的实现)

    动手写一个简单的Web框架(HelloWorld的实现) 关于python的wsgi问题可以看这篇博客 我就不具体阐述了,简单来说,wsgi标准需要我们提供一个可以被调用的python程序,可以实函数 ...

随机推荐

  1. Oracle删除控制文件恢复

    控制文件被删除后,系统崩溃,下面介绍下如何恢复控制文件 SQL> conn / as sysdbaConnected to an idle instance.SQL> startup no ...

  2. redux (一)

    redux 是一个状态管理的库. redux认为页面所有的变化,都是基于状态的改变触发的,所以我们维护一个应用的时候,都是在维护这些状态.而 redux 就是为了维护状态而生的. API create ...

  3. 18.CSS

    选择器 1.标签上直接设置style属性 <p style="color: red">直接标签里面写</p> 2.id选择器 <style> # ...

  4. signalR的集群与负载均衡

    signalR是相当不错的websocket应用,最近要做集群和负载均衡 主要用到了redis进行集群,signalR的backplane集成redis. 细节,订阅redis之后注意database ...

  5. python 全栈开发,Day4

    python之文件操作 一.文件操作基本流程 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到 ...

  6. nslookup命令的安装及使用

    windows中是自带的,不用安装,直接在cmd窗口直接使用 Linux中需要安装: yum -y install bind-utils nslookup www.baidu.com [root@bo ...

  7. 数字不断递增 可控制js

    (function($){ $.fn.numberRock=function(options){ var defaults={ speed:, count: }; var opts=$.extend( ...

  8. NGINX详解

    目录 1.    基础概念    1 2.    版本选择    1 3.    服务安装    1 4.    模块说明    1 5.    配置说明    1 5.1    目录结构    1 ...

  9. 背景新增属性和css渐变及倒影

    背景新增属性和css渐变及倒影 一.background新增属性 background-size:指定对象的背景图像的尺寸大小. background:url() 0 0,url() 0 100%;多 ...

  10. Java线程中断机制-如何中断线程

    介绍: 对于线程一共分为五个状态:新建状态,就绪状态,阻塞状态,运行状态,死亡状态,有时候把阻塞状态又分为同步阻塞和等待阻塞. 有时想让主线程启动的一个子线程结束运行,我们就需要让这个子线程中断,不再 ...