Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解

 更新时间:2019年08月07日 08:25:47   作者:Jaxu  
这篇文章主要介绍了Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

在Node.js中,我们可以通过qr-image包直接在后台生成二维码图片,使用方法很简单:

var qr = require('qr-image');
exports.createQRImage = function(res, str){
  var img = qr.image(str); // 将生成二维码图片
  res.writeHead(200, {'Content-Type': 'image/png'});
  img.pipe(res);
};

但是如果我们希望生成的不仅仅是二维码,而是在一张给定的背景图上生成二维码,并在底部配上相应的文字说明,那么就需要借助于其它一些包来实现。

  • images包是Node.js上一个轻量级的跨平台图像处理库,可以用来进行图片的编辑和绘制。
  • svg2png用来将生成的svg转换成png图片。
  • text-to-svg用来将给定的文字转换成对应的svg。

下面是对应的实现代码:

exports.genQrImage = function (text, url) {
  const tts = textToSVG.loadSync(path.join(__dirname, '../../msyh.ttf'));
  const tSvg = tts.getSVG(text, {
    x: 0,
    y: 0,
    fontSize: 20,
    anchor: 'top'
  });
  const margin = 35; // 二维码的左右边距
  const top = 90; // 二维码距顶部的距离
  var sourceImage = images(path.join(__dirname, '../../source.png'));
  var w = sourceImage.width(); // 模板图片的宽度
  return svg2png(tSvg)
    .then((rst) => {
      var textImage = images(rst);
      var qrImage = images(qr.imageSync(url, {type: 'png'})).size(w - margin * 2); // 二维码的尺寸为:模板图片的宽度减去左右边距
      return sourceImage
        .draw(qrImage, margin, top) // 二维码的位置:x=左边距,y=top
        .draw(textImage, (w - textImage.width()) / 2, top + qrImage.height() + 10) // 底部文字,x为居中显示,y=top+二维码的高度+10
        .encode('png', {quality: 90});
    })
    .catch(e => console.error(e));
};

函数genQrImage接收两个参数,text是显示在二维码底部的文字,url是要生成的二维码地址。其中的source.png是给定的背景图片,msyh.ttf是微软雅黑的字体文件。

基本思路就是通过images库加载一张预先指定的背景图片,然后通过计算出的起始点坐标在背景图上画出二维码图片和文字。最后通过encode方法将画好的图片输出到buffer中,当然也可以通过save方法保存到服务器上。具体使用方法可以查看github上的文档。

myShareQrImage: function* (next) {
  var _text = "联系人:xxx   手机号:13200000000";
  var _url = "http://www.cnblogs.com/jaxu";
  var _buffer = yield BizUtils.genQrImage(_text, _url);
  this.res.setHeader('Content-type', 'image/png');
  this.body = _buffer;
  yield next;
}

最终生成的效果:

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

相关文章

  • 详解离线安装npm包的几种方法

    详解离线安装npm包的几种方法

    这篇文章主要介绍了详解离线安装npm包的几种方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • node.js中的buffer.Buffer.isEncoding方法使用说明

    node.js中的buffer.Buffer.isEncoding方法使用说明

    这篇文章主要介绍了node.js中的buffer.Buffer.isEncoding方法使用说明,本文介绍了buffer.Buffer.isEncoding的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • node.js做一个简单的爬虫案例教程

    node.js做一个简单的爬虫案例教程

    这篇文章主要介绍了node.js做一个简单的爬虫案例教程,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • NodeJS的使用与NPM包管理器详解

    NodeJS的使用与NPM包管理器详解

    Node.js 是一个基于 Chrome V8 JavaScript 引擎 构建的开源、跨平台运行时环境,这篇文章主要介绍了NodeJS的使用与NPM包管理器,需要的朋友可以参考下
    2025-04-04
  • Nodejs中读取中文文件编码问题、发送邮件和定时任务实例

    Nodejs中读取中文文件编码问题、发送邮件和定时任务实例

    这篇文章主要介绍了Nodejs中读取中文文件编码问题、发送邮件和定时任务实例,本文使用了3个模块来解决这3个需求,并给出了代码操作实例,需要的朋友可以参考下
    2015-01-01
  • nodejs和npm版本不匹配报错的解决方法

    nodejs和npm版本不匹配报错的解决方法

    当公司要求使用固定nodejs的版本时,自己不小心更新了npm,就会导致npm和nodejs不匹配,下面这篇文章主要给大家介绍了关于nodejs和npm版本不匹配报错的解决方法,需要的朋友可以参考下
    2023-04-04
  • 解决修复npm安装全局模块权限的问题

    解决修复npm安装全局模块权限的问题

    今天小编就为大家分享一篇解决修复npm安装全局模块权限的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • 详解使用Node.js 将txt文件转为Excel文件

    详解使用Node.js 将txt文件转为Excel文件

    这篇文章主要介绍了详解使用Node.js 将txt文件转为Excel文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Node卸载超详细步骤(附图文讲解!)

    Node卸载超详细步骤(附图文讲解!)

    由于之前的node为8.0版本,不太满足需求,所以需要安装高版本的node,下面这篇文章主要给大家介绍了关于Node卸载超详细步骤的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • 解析NodeJs的调试方法

    解析NodeJs的调试方法

    本文主要介绍了NodeJs调试的步骤,以及实例方法,具有一定的参考作用,需要的朋友可以看下
    2016-12-12

最新评论