当前位置:首页 > 日记 > 正文

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.webp');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.webp'; const targetImg2Path = './i/2.webp'; const targetImg3Path = './i/3.webp'; const targetImg4Path = './i/qrcode.webp'; 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.webp', { quality : 90 });})().catch(e => console.error(e));

注意事项

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

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

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

相关文章

Angular中$state.go页面跳转并传递

Angular中$state.go页面跳转并传递

传递参数,方法,页面跳转,电脑软件,Angular,遇到一个页面跳转的时候,在跳转后的页面获取跳转前页面的数据,我想到用一种是localstorage,一种用broadcast和on,然后老大说不用这么麻烦,既然都$state.go了直接带参数,这次就介绍一下$state.go页面跳…

ionic中的$ionicPlatform.ready事

ionic中的$ionicPlatform.ready事

设置,通用,事件中,电脑软件,ionic,前言$ionicPlatform.ready事件是用于检测当前的平台是否就绪的事件,相当于基于document的deviceready事件, 在app中一些通用关于设备的设置必须在这个事件中处理, 为了代码的可读性,我们把设置功能封装成一…

一个简易的js轮播效果

一个简易的js轮播效果

简易,效果,电脑软件,js,一个简易的js图片轮播效果,话不多说,代码献上. 只有img标签的html代码,做测试用:<body> <img src="images/class1-1.jpg" id="img"> </body> 下面是js代码:var k=0; //当前的索引var ss = new Array(); //数组,用来…

微信小程序 本地按照屏幕尺寸处理

微信小程序 本地按照屏幕尺寸处理

屏幕尺寸,程序,电脑软件,微信小,微信小程序 本地图片按照屏幕尺寸处理前言:个人感觉微信小程序的IDE用起来有时候不太方便,可能是之前用惯了Eclipse的原因吧。微信小程序的开发工具不支持直接将文件拷贝到目录下,所以首先要将图片文件导入到本…

wps演示中怎么制作柱状图

wps演示中怎么制作柱状图

柱状图,方法,演示,电脑软件,wps,  你知道怎么在wps幻灯片中制作柱状图吗?对于刚从其它版本转型过来的应该就不会太懂wps,没关系下面小编就为你介绍wps演示怎么制作柱状图的方法啦!欢迎大家来到学习wps制作柱状图。wps演示制作柱状图的方法…

微信小程序之数据双向绑定与数据操

微信小程序之数据双向绑定与数据操

双向绑定,数据操作,数据,程序,电脑软件, 微信小程序之数据双向绑定与数据操作数据双向绑定是指js部分数据发生变化是html部分的数据也会发生变化,当然html部分数据发生变化js部分数据也会发生变化,从而使界面很方便的实现动态数据显示,一般拥…

怎样在Word2013文档中任意位置放置

怎样在Word2013文档中任意位置放置

数字,文档,位置,页码,电脑软件,  普通数字页码,是指单纯的数字,页码不带其他装饰。如果需要移动这类页码,可以将数字放置到文本框中,然后通过拖动文本框来改变页码的位置。以下是小编为您带来的关于在Word2013文档中任意位置放置普通数字页码…

ps怎么设计一个stop交通标志图?

ps怎么设计一个stop交通标志图?

交通标志,电脑软件,ps,stop,想要使用ps绘制一个stop交通标志图,该怎么绘制呢?下面我们就来看看详细的教程。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、新建400*400像素的画布,分辨率为300,颜色模式…

portraiture教程:如何利用磨皮滤镜

portraiture教程:如何利用磨皮滤镜

教程,滤镜,人像,电脑软件,portraiture,下面教大家如何利用磨皮滤镜portraiture为人像磨皮,使用portraiture滤镜磨皮后再Photoshop中进行调整,从原图与效果图可以明显看出,磨皮后人物皮肤变得更加光滑,更显的年轻。软件名称:Portraiture滤镜 port…

怎样为Word2013文档解决出现乱码的

怎样为Word2013文档解决出现乱码的

文档,出现乱码,电脑软件,  在网上下载下来的很多文档都会出现一些格式问题,比如说里面有乱码了,尤其是在页码上,那么我们应该想办法解决这些乱码问题。以下是小编为您带来的关于Word2013文档解决出现乱码,希望对您有所帮助。Word2013文档解决…

ps怎么给文字制作华丽的背景?

ps怎么给文字制作华丽的背景?

文字,背景,电脑软件,ps,华丽,有时候突然要做一个海报,由于时间关系不可能找很多素材,而且想法也不是要有就有的,这里教大家一个比较通用的活动海报制作,就用简单的图形和叠加也可以做出不赖的海报,这技能学习了,以后再也不怕临时交图了。软件名称…

PPT教程之设置自定义动画PPT怎么设

PPT教程之设置自定义动画PPT怎么设

自定义动画,设置,教程,电脑软件,PPT,  有时候我们需要设置自定义动画,PowerPoint如何设置自定义动画呢,今天就由小编教大家解决这个问题!希望可以帮到大家!PPT设置自定义动画的教程1.制作进入动画效果选中需要设置动画效果的对象,如文本、图…