node文字生成图片的示例代码


Posted in Javascript onOctober 26, 2017

今天老板提了需求,要在服务端生成邀请卡,嗯…,简单的说就是把要这张:

node文字生成图片的示例代码

变成差多这样的:

node文字生成图片的示例代码

后端搞ruby的哥们搞了个html转图片,说转得太慢了,我就把这坑接下来了

所以睡前就倒腾了下,搞了个简单的实现

解决思路

文字转svg -> svg转png -> 合并图片

相关轮子

  1. images Node.js 轻量级跨平台图像编解码库,不需要额外安装依赖
  2. text-to-svg 文字转svg
  3. svg2png svg转png图片

示例代码

'use strict';

const fs = require('fs');
const images = require('images');
const TextToSVG = require('text-to-svg');
const svg2png = require("svg2png");
const Promise = require('bluebird');

Promise.promisifyAll(fs);

const textToSVG = TextToSVG.loadSync('fonts/文泉驿微米黑.ttf');

const sourceImg = images('./i/webwxgetmsgimg.jpg');
const sWidth = sourceImg.width();
const sHeight = sourceImg.height();

const svg1 = textToSVG.getSVG('魏长青-人人讲App', {
 x: 0,
 y: 0,
 fontSize: 24,
 anchor: 'top',
});

const svg2 = textToSVG.getSVG('邀请您参加', {
 x: 0,
 y: 0,
 fontSize: 16,
 anchor: 'top',
});

const svg3 = textToSVG.getSVG('人人讲课程', {
 x: 0,
 y: 0,
 fontSize: 32,
 anchor: 'top',
});

Promise.coroutine(function* generateInvitationCard() {
 const targetImg1Path = './i/1.png';
 const targetImg2Path = './i/2.png';
 const targetImg3Path = './i/3.png';
 const targetImg4Path = './i/qrcode.jpg';
 const [buffer1, buffer2, buffer3] = yield Promise.all([
  svg2png(svg1),
  svg2png(svg2),
 svg2png(svg3),
 ]);

 yield Promise.all([
  fs.writeFileAsync(targetImg1Path, buffer1),
  fs.writeFileAsync(targetImg2Path, buffer2),
  fs.writeFileAsync(targetImg3Path, buffer3),
 ]);

 const target1Img = images(targetImg1Path);
 const t1Width = target1Img.width();
 const t1Height = target1Img.height();
 const offsetX1 = (sWidth - t1Width) / 2;
 const offsetY1 = 200;

 const target2Img = images(targetImg2Path);
 const t2Width = target2Img.width();
 const t2Height = target2Img.height();
 const offsetX2 = (sWidth - t2Width) / 2;
 const offsetY2 = 240;

 const target3Img = images(targetImg3Path);
 const t3Width = target3Img.width();
 const t3Height = target3Img.height();
 const offsetX3 = (sWidth - t3Width) / 2;
 const offsetY3 = 270;

 const target4Img = images(targetImg4Path);
 const t4Width = target4Img.width();
 const t4Height = target4Img.height();
 const offsetX4 = (sWidth - t4Width) / 2;
 const offsetY4 = 400;

 images(sourceImg)
 .draw(target1Img, offsetX1, offsetY1)
 .draw(target2Img, offsetX2, offsetY2)
 .draw(target3Img, offsetX3, offsetY3)
 .draw(target4Img, offsetX4, offsetY4)
 .save('./i/card.png', { quality : 90 });
})().catch(e => console.error(e));

注意事项

text-to-svg需要中文字体的支持,不然中文会乱码

在我的破电脑上执行一次只花了500多毫秒,感觉足够了,分享出来希望能给大家一个参照

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

Javascript 相关文章推荐
jquery keypress,keyup,onpropertychange键盘事件
Jun 25 Javascript
Jquery 获取checkbox的checked问题
Nov 16 Javascript
探讨js中的双感叹号判断
Nov 11 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
Jun 26 Javascript
jQuery实现加入购物车飞入动画效果
Mar 14 Javascript
jQuery Ajax使用实例
Apr 16 Javascript
详解微信小程序——自定义圆形进度条
Dec 29 Javascript
jQuery实现CheckBox全选、全不选功能
Jan 11 Javascript
jquery仿苹果的时间/日期选择效果
Mar 08 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
Aug 15 jQuery
vue2.0 axios跨域并渲染的问题解决方法
Mar 08 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
Sep 01 Javascript
vue-cli中打包图片路径错误的解决方法
Oct 26 #Javascript
javascript+html5+css3自定义弹出窗口效果
Oct 26 #Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
Oct 26 #Javascript
JS手机端touch事件计算滑动距离的方法示例
Oct 26 #Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
Oct 26 #Javascript
JavaScript实现树的遍历算法示例【广度优先与深度优先】
Oct 26 #Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
Oct 26 #Javascript
You might like
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
2013/08/13 PHP
简单的php新闻发布系统教程
2014/05/09 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
2014/12/22 PHP
基于PHP如何把汉字转化为拼音
2015/12/11 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
phpstudy2020搭建站点的实现示例
2020/10/30 PHP
js 图片轮播(5张图片)
2008/12/30 Javascript
淘宝搜索框效果实现分析
2011/03/05 Javascript
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
JavaScript输入邮箱自动提示实例代码
2014/01/13 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
js实现自动图片轮播代码
2017/03/22 Javascript
javascript 中的try catch应用总结
2017/04/01 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
Python时间的精准正则匹配方法分析
2017/08/17 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
澳大利亚新奇小玩意网站:Yellow Octopus
2017/12/28 全球购物
迪士尼法国在线商店:shopDisney FR
2020/12/03 全球购物
暑期培训心得体会
2014/09/02 职场文书
2014年人事专员工作总结
2014/11/19 职场文书
2014全年工作总结
2014/11/27 职场文书
基层党支部承诺书
2015/04/30 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书