• 技术文章 >web前端 >js教程

    node实现文字生成图片代码分享

    小云云小云云2018-01-20 14:25:59原创1893
    本文主要介绍了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多毫秒,感觉足够了,分享出来希望能给大家一个参照。

    相关推荐:

    php原生图片合成和文字生成图片

    讨论在PHP中如何把带有HTML内容的文字生成图片

    分享Nodejs中用captchapng生成图片验证码的实例

    以上就是node实现文字生成图片代码分享的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:node 图片 生成
    上一篇:AngularJs用户登录交互及验证、阻止FQ处理详解 下一篇:React Native地址挑选器功能实现方法
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 怎么利用node生成word文档?使用库分享• JavaScript字典与集合(总结分享)• 深入理解JavaScript内存管理和GC算法• 怎么使用pkg将Node.js项目打包为可执行文件?• 详细介绍JavaScript二叉树及各种遍历算法
    1/1

    PHP中文网