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 window对象属性整理
Oct 24 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
May 18 Javascript
JavaScript控制Session操作方法
Jan 17 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
Feb 26 Javascript
javascript中的if语句使用介绍
Nov 20 Javascript
ie8模式下click无反应点击option无反应的解决方法
Oct 11 Javascript
js实现将选中值累加到文本框的方法
Aug 12 Javascript
jquery实现简单的二级导航下拉菜单效果
Sep 07 Javascript
JS使用JSON作为参数实例分析
Jun 23 Javascript
jQuery中元素选择器(element)简单用法示例
May 14 jQuery
jQuery插件实现的日历功能示例【附源码下载】
Sep 07 jQuery
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
May 21 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
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
使用PHP实现阻止用户上传成人照片或者裸照
2014/12/25 PHP
PHP中的类型约束介绍
2015/05/11 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
PHP自定义错误处理的方法分析
2018/12/19 PHP
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
基于jquery的跟随屏幕滚动代码
2012/07/24 Javascript
javascript图像处理—仿射变换深度理解
2013/01/16 Javascript
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
jQuery 隐藏和显示 input 默认值示例
2014/06/03 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
JavaScript简单获取系统当前时间完整示例
2016/08/02 Javascript
为输入框加入数字js校验代码分享
2017/11/02 Javascript
vue中设置height:100%无效的问题及解决方法
2018/07/27 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
JS实现拼图游戏
2021/01/29 Javascript
手把手带你入门微信小程序新框架Kbone的使用
2020/02/25 Javascript
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
Tesserocr库的正确安装方式
2018/10/19 Python
Python零基础入门学习之输入与输出
2019/04/03 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
python调用百度API实现人脸识别
2020/11/17 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
全球在线商店:BerryLook
2019/04/14 全球购物
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
法学专业本科生自荐信范文
2013/12/17 职场文书
酒店总经理欢迎词
2014/01/08 职场文书
社区道德讲堂实施方案
2014/03/21 职场文书
社会调查研究计划书
2014/05/01 职场文书
2014年感恩母亲演讲稿
2014/05/27 职场文书
优秀党员主要事迹范文
2015/11/05 职场文书
Django Paginator分页器的使用示例
2021/06/23 Python