详解node-ccap模块生成captcha验证码


Posted in Javascript onJuly 01, 2017

准备工作如下:

这个库依赖python2.7.X和node-gyp,请先安装

1、Python

安装完之后将安装目录如“C:\Python27”添加至系统环境变量PATH中。

2、node-gyp安装

全局安装node-gyp。执行npm install -g node-gyp。

3、安装ccap

npm install ccap

这里注意一下,在工程目录中,不要上传node_modules文件夹,windows和Linux并不一样。

用node做web开发很多都可能碰到需要验证码的地方,之前在github上搜索,有一些比如node-captcha等的类库,都需要依赖第三方的图形处理库或者软件,像我之前安装cario这个图形库时,真是费了好大一番劲,但是其实我们只用到了这些图形库的一点点小功能,比如图片的尺寸修改裁剪,或者生产验证码。

先介绍一下CImg这个c++的图形库吧,CImg是一个跨平台的C++的图像处理库,提供了加载、处理、显示、保存等一系列功能,最吸引人的地方是整个图形库就一个CImg.h这个文件,所以非常的便携绿色环保,带到哪里都可以进行编译使用,不用安装一大推依赖。于是我就想利用这个CImg图形库做一个简单的demo,就从实现验证码这个功能入手,当然可以完全利用这个库来做裁剪图片等其他功能。

ccap模块是基于CImg图形库的封装,让它可以供node使用,由于CImg图形库的便携性,所以ccap模块可以完全不依赖其他任何第三方图形库或者软件而独立工作,也就说如果只是想要生成简单的验证码,只要require这个ccap模块即可。

生成的图片示例:

详解node-ccap模块生成captcha验证码

1、安装:通用方法:npm install ccap或者通过github下载,地址:https://github.com/DoubleSpout/ccap

2、性能:在2cpu的linux 64位服务器上生成验证码速度可以达到1200次/秒,测试生成的图片是BMP的,jpeg的图片验证码生成速度大约在600次/秒。

3、声明方法:

var ccap = require('ccap');

var captcha1 = ccap();

var captcha2 = ccap(width, height, offset);

var captcha3 = ccap({

  width:256,//set width,default is 256

  height:60,//set height,default is 60

  offset:40,//set text spacing,default is 40

  quality:100,//set pic quality,default is 50

  generate:function(){//Custom the function to generate captcha text

     //generate captcha text here

     return text;//return the captcha text

  }

});

可以通过上述代码实例化一个ccap类。1、不传任何参数,全部使用默认的参数进行生成验证码2、只传递宽,高,偏移进行实例化,调整图片的大小,和图片中文字的间隔3、传递一个对象,除了宽,高和偏移,还传递了图片质量以及生成随机数的方法,ccap模块会根据自定义函数return的字符串作为图片验证码的内容,默认是0-9,A-Z的6位随即字符串。

理论上可以生产很多不同的ccap的实例,而且他们之间互相没有影响,所以即使是通过cluster开启多进程的node同时生产验证码也不存在互相锁止的影响。

对于图片质量只对jpeg图片有效,如果没有安装任何jpeg的lib库的话,只能使用bmp未压缩图形了,体积比较大,但是生成速度比较快。

4、使用方法,get():

var ccap = require('ccap');

var captcha = ccap();

var ary = captcha.get();//ary[0] is captcha's text,ary[1] is captcha picture buffer.

var text = ary[0];

var buffer = ary[1];

实例化ccap类之后,会得到captcha对象,这个对象只有一个对外方法,get(),这个方法每次调用都会返回验证码buffer和对应的text字符串内容,保存在数组里,类似这样的结构:

["captcha text","picture buffer"]

5、一个简单的web例子:

var http = require('http');

var ccap = require('ccap')();//Instantiated ccap class 

http.createServer(function (request, response) {

  if(request.url == '/favicon.ico')return response.end('');//Intercept request favicon.ico

  var ary = ccap.get();

  var txt = ary[0];

  var buf = ary[1];

  response.end(buf);

  console.log(txt);

}).listen(8124);

console.log('Server running at http://127.0.0.1:8124/');

上面这个例子会将验证码返回给客户端,并且把对应的验证码的文字输出出来,同时拦截了favicon.ico的请求。

结果如下图:

详解node-ccap模块生成captcha验证码

有兴趣的TX可以下载下来试试,如果安装有jpeg库的话,可以把根目录下的binding.jpeg.gyp覆盖改名为binding.gyp然后rebuild就可以使用jpeg图片作为验证码了,体积会小很多。另外ccap模块做了一些缓存的机制,尽量发挥更好的性能。

目前ccap已经对linux系统支持jpeg验证码,体积从45kb直降到6kb。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js中split和replace的用法实例
Feb 28 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
Sep 22 Javascript
JavaScript动态添加事件之事件委托
Jul 12 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
Sep 04 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
Nov 18 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
Mar 03 Javascript
jQuery插件artDialog.js使用与关闭方法示例
Oct 09 jQuery
vue webpack实用技巧总结
Apr 24 Javascript
详解Vue单元测试case写法
May 24 Javascript
JS中DOM元素的attribute与property属性示例详解
Sep 04 Javascript
微信小程序vant弹窗组件的实现方式
Feb 21 Javascript
JavaScript 装逼指南(js另类写法)
May 10 Javascript
vue元素实现动画过渡效果
Jul 01 #Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
Jun 30 #Javascript
node.js + socket.io 实现点对点随机匹配聊天
Jun 30 #Javascript
详解vue中computed 和 watch的异同
Jun 30 #Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
Jun 30 #Javascript
vue2.0 axios前后端数据处理实例代码
Jun 30 #Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
Jun 30 #Javascript
You might like
Thinkphp中Create方法深入探究
2014/06/16 PHP
php实现简单爬虫的开发
2016/03/28 PHP
超简单的jquery的AJAX用法
2010/05/10 Javascript
根据出生日期自动取得星座的js代码
2010/07/20 Javascript
基于jQuery的实现简单的分页控件
2010/10/10 Javascript
在图片上显示左右箭头类似翻页的代码
2013/03/04 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
JavaScript获取onclick、onchange等事件值的代码
2013/07/22 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
jQuery中:hidden选择器用法实例
2014/12/30 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
2015/02/13 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
2019/04/28 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
2019/05/20 Javascript
vue elementUI table 自定义表头和行合并的实例代码
2019/05/22 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
2019/11/25 Javascript
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
Python计算字符宽度的方法
2016/06/14 Python
Django在pycharm下修改默认启动端口的方法
2019/07/26 Python
python同步windows和linux文件
2019/08/29 Python
django自定义模板标签过程解析
2019/12/14 Python
python如何利用Mitmproxy抓包
2020/10/10 Python
使用canvas生成含有微信头像的邀请海报没有微信头像问题
2019/10/29 HTML / CSS
豪华复古化妆:Besame Cosmetics
2019/09/06 全球购物
Vrbo西班牙:预订您的度假公寓(公寓、乡村房屋…)
2020/04/27 全球购物
名词解释WEB SERVICE,SOAP,UDDI,WSDL,JAXP,JAXM;JSWDL开发包的介绍。
2012/10/27 面试题
护理专业优质毕业生自荐书
2014/01/31 职场文书
餐厅执行经理岗位职责范本
2014/02/26 职场文书
公司人事专员岗位职责
2014/08/11 职场文书
教师党员批评与自我批评发言稿
2014/10/15 职场文书
销售工作决心书
2015/02/04 职场文书
皇城相府导游词
2015/02/06 职场文书
Jackson 反序列化时实现大小写不敏感设置
2021/06/29 Java/Android