node.js WEB开发中图片验证码的实现方法


Posted in Javascript onJune 03, 2014

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

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

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

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

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

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

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

4、使用方法,get():

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类之后,会得到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/');

注:有些代码参数可根据自己的环境自行修改
Javascript 相关文章推荐
jQuery学习笔记之DOM对象和jQuery对象
Dec 22 Javascript
javascript打印大全(打印页面设置/打印预览代码)
Mar 29 Javascript
JavaScript之IE的fireEvent方法详细解析
Nov 20 Javascript
jquery实现手机号码选号的方法
Jul 31 Javascript
实践中学习AngularJS表单
Mar 21 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
Oct 27 Javascript
微信小程序之电影影评小程序制作代码
Aug 03 Javascript
使用node.js对音视频文件加密的实例代码
Aug 30 Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
Oct 30 Javascript
微信小程序列表中item左滑删除功能
Nov 07 Javascript
浅谈JavaScript面向对象--继承
Mar 20 Javascript
layui自定义验证,用ajax查询后台是否有重复数据,form.verify的例子
Sep 06 Javascript
node.js实现多图片上传实例
Jun 03 #Javascript
node.js正则表达式获取网页中所有链接的代码实例
Jun 03 #Javascript
jquery处理json数据实例分析
Jun 03 #Javascript
js 获取浏览器版本以此来调整CSS的样式
Jun 03 #Javascript
jQuery绑定事件不执行但alert后可以正常执行
Jun 03 #Javascript
javascript圆盘抽奖程序实现原理和完整代码例子
Jun 03 #Javascript
jQuery多项选项卡的实现思路附样式及代码
Jun 03 #Javascript
You might like
香妃
2021/03/03 冲泡冲煮
PHP生成UTF8文件的方法
2010/05/15 PHP
PHP自定义大小验证码的方法详解
2013/06/07 PHP
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
php switch语句多个值匹配同一代码块的实现
2014/03/03 PHP
PHP实现的比较完善的购物车类
2014/12/02 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
js trim函数 去空格函数与正则集锦
2009/11/20 Javascript
JS 动态获取节点代码innerHTML分析 [IE,FF]
2009/11/30 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
jQuery数据缓存用法分析
2015/02/20 Javascript
javascript实现可拖动变色并关闭层窗口实例
2015/05/15 Javascript
几种经典排序算法的JS实现方法
2016/03/25 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
2016/12/08 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
Angular整合zTree的示例代码
2018/01/24 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
jQuery实现的上拉刷新功能组件示例
2020/05/01 jQuery
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
Python转码问题的解决方法
2008/10/07 Python
python中的reduce内建函数使用方法指南
2014/08/31 Python
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
windows下python和pip安装教程
2018/05/25 Python
解决Python安装后pip不能用的问题
2018/06/12 Python
python下载的库包存放路径
2020/07/27 Python
天猫精选:上天猫,就够了
2016/09/21 全球购物
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
活动总结书
2014/05/08 职场文书
教师职位说明书
2014/07/29 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
部门主管竞聘书
2015/09/15 职场文书
vue route新窗口跳转页面并且携带与接收参数
2022/04/10 Vue.js