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 相关文章推荐
将HTML自动转为JS代码
Jun 26 Javascript
showModalDialog 和 showModelessDialog
Jan 22 Javascript
Javascript this 的一些学习总结
Aug 02 Javascript
js 实现菜单左右滚动显示示例介绍
Nov 21 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
Nov 28 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
Dec 29 Javascript
教你使用javascript简单写一个页面模板引擎
May 05 Javascript
JavaScript必看小技巧(必看)
Jun 07 Javascript
全面理解JavaScript中的继承(必看)
Jun 16 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
Nov 01 Javascript
JS中传递参数的几种不同方法比较
Jan 20 Javascript
bootstrapValidator 重新启用提交按钮的方法
Feb 20 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的一个完整SMTP类(解决邮件服务器需要验证时的问题)
2006/10/09 PHP
PHP函数实现分页含文本分页和数字分页
2014/10/23 PHP
php格式输出文件var_export函数实例
2014/11/15 PHP
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
JavaScript高级程序设计 读书笔记之十一 内置对象Global
2012/03/07 Javascript
使用jquery实现div的tab切换实例代码
2013/05/27 Javascript
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
jQuery给多个不同元素添加class样式的方法
2015/03/26 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
2018/12/10 Javascript
使用element-ui table expand展开行实现手风琴效果
2019/03/15 Javascript
[45:16]完美世界DOTA2联赛循环赛 IO vs FTD BO2第二场 11.05
2020/11/06 DOTA
python 切片和range()用法说明
2013/03/24 Python
Python类方法__init__和__del__构造、析构过程分析
2015/03/06 Python
python输入错误密码用户锁定实现方法
2017/11/27 Python
python中字符串内置函数的用法总结
2018/09/13 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
Python 变量的创建过程详解
2019/09/02 Python
Python循环实现n的全排列功能
2019/09/16 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
2020/02/29 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
卫校中专生个人自我评价
2013/09/19 职场文书
会议邀请书范文
2014/02/02 职场文书
购房意向书
2014/04/01 职场文书
老龄工作先进事迹
2014/08/15 职场文书
新课培训心得体会
2014/09/03 职场文书
四风问题个人对照检查剖析材料
2014/09/27 职场文书
经营场所使用证明
2015/06/19 职场文书
电脑只能进入安全模式无法正常启动的解决办法
2022/04/08 数码科技