跨平台,无须第三方库,Nodejs 纯JS生成GIF图片验证码
发布于 6 年前 作者 pzzcn 4562 次浏览 来自 分享

关于此项目

在nodejs使用过程中发现nodejs对图形支持很差,要做一个简单的图形验证码需要复杂的安装,且现有的如node-canvas,node-gyp-ccap等,都需要安装对应的支持库(C或C++编写)。感觉大而臃肿。 只需要一个验证码不需要如此的复杂。 BAIDU解决方案查看到有无须组件的BMP版本的解决方案 https://cnodejs.org/topic/581b2502e90cfbec054d763f ,感觉非常好,没有直接用只是为了抱着以练手为目的,写了一个无须组件的GIF版本验证码

1.png

安装

npm install gd-gif

使用范例

引用库

const gif=require("gd-gif");

使用例子1

async getVerificationCodeImage(par){
    let g=new gif();
    //设置验证码宽度
    g.setWidth(100);
    //设置验证码高度
    g.setHeight(50);
    let code="";
    //随机4位生成验证码
    for(let i=0;i<4;i++){
        code+=g.rand(0,9);
    }
    g.setVerificationCode(code);
    return g.getImage();
}

使用例子2

async verificationCodeService(par){
  let g=new gif();
  g.setWidth(100);
  g.setHeight(29);
  g.pushColor("0055FF");
  g.pushColor("0066CC");
  g.pushColor("ff2100");
  g.pushColor("00a23d");
  g.drawText("0",3,3,"0055FF");
  g.drawText("1",23,3,"0066CC");
  g.drawText("2",43,5,"ff2100");
  g.drawText("9",63,5,"00a23d");
  return g.getImage();
}

方法

setWidth//宽度 参数:number

setHeight//设置高度 参数:number

setBackground//设备背景颜色 参数:16进制RGB色,如0066cc

pushColor//向GIF索引中添加颜色 参数:16进制RGB色,如0066cc

drawText//添加文字到图片中 参数:单个文字,x坐标,y坐标,16进制RGB色

getCanvas//得到内部的画布,是一个二维数组,可直接操作内存对象使用 参数:无

getImage//获得最后的输出流 参数:无

setVerificationCode//生成验证码,参考示例1 参数:验证码字符

TIPS: 现在只是一个很初步的版本,字库只有0-9的数字,不支持英文。 但是可以使用getCanvas取得画布矩阵后,自己随意画

GIT地址 https://github.com/pzzcn/gd-gif

3 回复

赞。收藏了,有空也研究一下

来自酷炫的 CNodeMD

回到顶部