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 相关文章推荐
input、button的不同type值在ajax提交表单时导致的陷阱
Feb 24 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
Dec 30 Javascript
Jquery时间验证和转换工具小例子
Jul 01 Javascript
js获取php变量的实现代码
Aug 10 Javascript
javascript中innerText和innerHTML属性用法实例分析
May 13 Javascript
全面了解构造函数继承关键apply call
Jul 26 Javascript
vue实现留言板todolist功能
Aug 16 Javascript
element ui里dialog关闭后清除验证条件方法
Feb 26 Javascript
JavaScript 隐性类型转换步骤浅析
Mar 15 Javascript
js实现淘宝浏览商品放大镜功能
Oct 28 Javascript
three.js中多线程的使用及性能测试详解
Jan 07 Javascript
javaScript Array api梳理
Mar 31 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
php中二维数组排序问题方法详解
2015/08/28 PHP
使用JavaScript创建新样式表和新样式规则
2016/06/14 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
juqery 学习之三 选择器 层级 基本
2010/11/25 Javascript
详谈 Jquery Ajax异步处理Json数据.
2011/09/09 Javascript
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
JS中使用sort结合localeCompare实现中文排序实例
2014/07/23 Javascript
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
javascript如何创建对象
2016/08/29 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
Vue项目中最新用到的一些实用小技巧
2018/11/06 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
Python入门篇之对象类型
2014/10/17 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
2018/06/11 Python
Python 互换字典的键值对实例
2019/02/12 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
2020/04/02 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
EJB实例的生命周期
2016/10/28 面试题
个性大学生自我评价
2013/12/04 职场文书
营业员实习自我鉴定
2013/12/07 职场文书
计算机相关的自我评价
2014/01/15 职场文书
文秘档案管理岗位职责
2014/03/06 职场文书
生物科学专业毕业生求职信
2014/06/02 职场文书
小学综治宣传月活动总结
2014/07/02 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
创卫工作总结2015
2015/04/22 职场文书
企业反腐倡廉心得体会
2015/08/15 职场文书
详细聊聊MySQL中慢SQL优化的方向
2021/08/30 MySQL