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


Posted in Javascript onAugust 07, 2019

在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;
}

最终生成的效果:

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

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

Javascript 相关文章推荐
JavaScript动态调整TextArea高度的代码
Dec 28 Javascript
JavaScript数据结构与算法之栈详解
Mar 12 Javascript
javascript实现简单的鼠标拖动效果实例
Apr 10 Javascript
浅谈JavaScript字符串与数组
Jun 03 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
Nov 01 Javascript
如何解决hover在ie6中的兼容性问题
Dec 15 Javascript
JS实现超简单的汉字转拼音功能示例
Dec 22 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
Feb 14 Javascript
JS html时钟制作代码分享
Mar 03 Javascript
浅谈node模块与npm包管理工具
Jan 03 Javascript
详解angular2.x创建项目入门指令
Oct 11 Javascript
Element Steps步骤条的使用方法
Jul 26 Javascript
微信小程序引入Vant组件库过程解析
Aug 06 #Javascript
Vue数据绑定实例写法
Aug 06 #Javascript
Vue代码整洁之去重方法整理
Aug 06 #Javascript
VUE写一个简单的表格实例
Aug 06 #Javascript
VUE前后端学习tab写法实例
Aug 06 #Javascript
Vue路由前后端设计总结
Aug 06 #Javascript
vue实现行列转换的一种方法
Aug 06 #Javascript
You might like
PHP的FTP学习(四)
2006/10/09 PHP
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
PHP7匿名类用法分析
2016/09/26 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
js 操作select和option常用代码整理
2012/12/13 Javascript
jQuery文字提示与图片提示效果实现方法
2016/07/04 Javascript
AngularJS递归指令实现Tree View效果示例
2016/11/07 Javascript
jQuery、zepto、js常用小技巧
2017/02/12 Javascript
Vue.js父与子组件之间传参示例
2017/02/28 Javascript
解决React Native端口号修改的方法
2017/07/28 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
js精确的加减乘除实例
2017/11/14 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
vue-loader中引入模板预处理器的实现
2019/09/04 Javascript
js+canvas实现纸牌游戏
2020/03/16 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
在Python上基于Markov链生成伪随机文本的教程
2015/04/17 Python
Python base64编码解码实例
2015/06/21 Python
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
python 中字典嵌套列表的方法
2018/07/03 Python
pytorch: tensor类型的构建与相互转换实例
2018/07/26 Python
postman模拟访问具有Session的post请求方法
2019/07/15 Python
python os模块在系统管理中的应用
2020/06/22 Python
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
Dodax奥地利:音乐、电影、书籍、玩具、电子产品等
2019/08/31 全球购物
艺术爱好者的自我评价分享
2013/10/08 职场文书
《广玉兰》教学反思
2014/04/14 职场文书
代办委托书怎么写
2014/08/01 职场文书
五四青年节的活动方案
2014/08/20 职场文书
社区关爱留守儿童活动方案
2014/08/22 职场文书
群众路线个人剖析材料及整改措施
2014/11/04 职场文书
学子宴致辞大全
2015/07/27 职场文书
《认识钟表》教学反思
2016/02/16 职场文书
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js