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 相关文章推荐
js实现单击图片放大图片的方法
Feb 17 Javascript
jQuery实现复选框成对选择及对应取消的方法
Mar 03 Javascript
jquery验证邮箱格式是否正确实例讲解
Nov 16 Javascript
JS简单循环遍历json数组的方法
Apr 22 Javascript
js实现上传图片及时预览
May 07 Javascript
基于vue2的table分页组件实现方法
Mar 20 Javascript
JavaScript实现短信倒计时60s
Oct 09 Javascript
微信小程序实现之手势锁功能实例代码
Jul 19 Javascript
JS实现提示效果弹出及延迟隐藏的功能
Aug 26 Javascript
微信小程序实现分享商品海报功能
Sep 30 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
Nov 04 Javascript
使用JS前端技术实现静态图片局部流动效果
Aug 05 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
是否存在第一台收音机的说法
2021/03/01 无线电
其他功能
2006/10/09 PHP
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
php防止SQL注入详解及防范
2013/11/12 PHP
php 截取utf-8格式的字符串实例代码
2016/10/30 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
img onload事件绑定各浏览器均可执行
2012/12/19 Javascript
javascript动态获取登录时间和在线时长
2016/02/25 Javascript
JS实现消息来时让网页标题闪动效果的方法
2016/04/20 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
JS判断浏览器是否安装flash插件的简单方法
2016/09/13 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
js实现登录验证码
2016/12/22 Javascript
jquery实现超简单的瀑布流布局【推荐】
2017/03/08 Javascript
vue2 前端搜索实现示例
2018/02/26 Javascript
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
jquery插件实现轮播图效果
2020/10/19 jQuery
Python 元组(Tuple)操作详解
2014/03/11 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
python实现俄罗斯方块
2018/06/26 Python
pyQt4实现俄罗斯方块游戏
2018/06/26 Python
对python特殊函数 __call__()的使用详解
2019/07/02 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
Python csv文件记录流程代码解析
2020/07/16 Python
css图标制作教程制作云图标
2014/01/19 HTML / CSS
基于Jquery和Css3代码制作可以缩放的搜索框
2015/11/19 HTML / CSS
美国最大的袜子制造商和零售商:Renfro Socks
2017/09/03 全球购物
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
销售文员岗位职责
2013/11/29 职场文书
幼儿园英语教学反思
2014/01/30 职场文书
小学家庭教育心得体会
2016/01/14 职场文书