这篇文章主要介绍了node.jsWEB开发中图片验证码的实现方法,使用ccap模块实现,需要的朋友可以参考下

用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/');


注:有些代码参数可根据自己的环境自行修改

最新资讯
华为张平安:美国禁令进一步坚定华为构建HMS的决心

华为张平安:美国禁令进

张平安表示,美国的禁令进一步坚定华为构建HMS的决心。
特斯拉将推新型电池:能量密度提升5倍,续航里程提高16%

特斯拉将推新型电池:能

特斯拉在会上发布了一款全新的“4680”型电池,这种46毫
华为回应“在澳裁员”:澳市场很小 从来都不是华为特别聚焦的

华为回应“在澳裁员”

华为公司常务董事、产品投资评审委员会主任汪涛在回答
华为张平安:HMS生态是开放的 可探讨与其它手机厂商合作可能

华为张平安:HMS生态是

对于芯片禁令是否会影响华为HMS生态建设的进度,华为消
Libra联合创始人摩根·贝勒离职 将继续担任产品顾问

Libra联合创始人摩根

27岁的摩根·贝勒(Morgan Beller)将离开Facebook,不再担
裁判也是高危职业?这些“大杀器”体育运动的误伤非同小可

裁判也是高危职业?这些

本月初,在网球大满贯美国公开赛上,名将德约科维奇因为用
最新文章
详解Vue的ref特性的使用

详解Vue的ref特性的使

这篇文章主要介绍了详解Vue的ref特性的使用,文中通过
vue学习笔记之slot插槽基本用法实例分析

vue学习笔记之slot插

这篇文章主要介绍了vue学习笔记之slot插槽基本用法,结
vue跳转方式(打开新页面)及传参操作示例

vue跳转方式(打开新页

这篇文章主要介绍了vue跳转方式(打开新页面)及传参操作,
vue学习笔记之过滤器的基本使用方法实例分析

vue学习笔记之过滤器

这篇文章主要介绍了vue学习笔记之过滤器的基本使用方
js获取本日、本周、本月的时间代码

js获取本日、本周、本

本篇文章给大家分享的内容是利用js如何获取本日、本周
node crawler如何添加promise支持

node crawler如何添加

这篇文章主要介绍了node crawler如何添加promise支持,