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 相关文章推荐
js 无提示关闭浏览器页面的代码
Mar 09 Javascript
javascript学习(一)构建自己的JS库
Jan 02 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
Jun 24 Javascript
js中文逗号转英文实现
Feb 11 Javascript
js数组的基本操作(很全自己整理的)
Oct 16 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
Dec 17 Javascript
JS Canvas定时器模拟动态加载动画
Sep 17 Javascript
解决React Native端口号修改的方法
Jul 28 Javascript
Angular2 父子组件通信方式的示例
Jan 29 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
Aug 17 Javascript
浅析JS中什么是自定义react数据验证组件
Oct 19 Javascript
微信小程序实现点赞业务
Feb 10 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日期处理函数 整型日期格式
2011/01/12 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
php防止sql注入简单分析
2015/03/18 PHP
Mac下php 5升级到php 7的步骤详解
2017/04/26 PHP
PHP的重载使用魔术方法代码实例详解
2021/02/26 PHP
ExtJS4给Combobox设置列表中的默认值示例
2014/05/02 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
JS制作手机端自适应缩放显示
2015/06/11 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
Node调用Java的示例代码
2017/09/20 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
2018/02/08 Javascript
浅谈React Event实现原理
2018/09/20 Javascript
javascript使用canvas实现饼状图效果
2020/09/08 Javascript
基于JavaScript实现简单的轮播图
2021/03/03 Javascript
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
python爬虫之urllib3的使用示例
2018/07/09 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
Python实现PyPDF2处理PDF文件的方法示例
2019/09/25 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
快速创建python 虚拟环境
2020/11/28 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
CSS3实现内凹圆角的实例代码
2017/05/04 HTML / CSS
canvas中普通动效与粒子动效的实现代码示例
2019/01/03 HTML / CSS
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
附答案的Java面试题
2012/11/19 面试题
无传销社区工作方案
2014/05/13 职场文书
小学优秀班集体申报材料
2014/05/25 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书
创业计划书之旅游网站
2019/09/06 职场文书
tomcat下部署jenkins的方法
2022/05/06 Servers