图文拼接工具Puzzles (支持纯前端、nodejs、webAPI)

  1. 图文拼接工具 Puzzles

1.1 Puzzles 是什么东西?
1.2 应用原理
1.3 配置及获取方式
1.4 Puzzles 的使用场景
1.5 为什么使用 Puzzles?
1.6 Puzzles 未来还会提供什么?

  1. Puzzles APIs
  2. Puzzles 中的文本和字体
  3. 随机验证码生成

Github地址: https://github.com/Alalabu/puzzles

1.1 Puzzles 是什么东西?

puzzles-3-01.png

Puzzles 是一个用于 动态的 将多个图片、文本或形状,合并成一个新的图片的工具,上图很清晰直观的在阐述 Puzzles 合并的过程。

1.2 应用原理

Puzzles 由一个云端拼图服务器,以及对外提供的 WebAPI 构成。云服务提供拼接过程及计算和优化能力,将 web 接口获取到的指令进行运算,对其响应一个 buffer 或者 base64 格式数据,用于描述一张图片。

buffer:当访问者是服务器端,有文件处理能力。则可以将响应的 buffer 作为缓存处理或者写入文件等;
base64:主要面向纯H5前端访问者,通过浏览器自带的 <img> 标签,将 base64 格式数据直接赋值于 src 属性即可被渲染为显示图片。

server.png

1.3 配置及获取方式

a. WebAPI

对于 Puzzles 的访问是通过 http 协议,发送 POST 数据来进行拼图业务描述的。

// Puzzles API 拼接
const puzzData = {
  dataType: 'base64',
  puzz: {
    root: { type: 'img', imgurl: 'https://xxx/bg.jpg' },
    nodes: [{
      type: 'img', imgurl: 'https://xxx/goods.jpg',
      top: 45.6, left: 45.3, width: 412, height: 219.4,
    }, {
      type: 'text', text: `木瓜牛奶`, 
      fontsize: 20, color: '#613E94', top: 0, left: 0,
    }, {
      type: 'shape', shape: 'rectangle', width: 90, height:45, x: 10, y: 18, fillColor: '#D46C75',
    }]
  },
};

// 模拟 jQuery Ajax 的调用方式
$.ajax({
  type: "POST",
  url: "http://puzzles.net.cn/xxx",
  data: puzzData, 
  success: function(res){
    // do something...
  }
});

此种方式的 优势 ,便是调用灵活。支持 http 访问协议的应用都可以发起调用。但其 劣势 ,是繁琐,特别是在拼接每个图层的过程中,查询所需参数会比较麻烦。

b. 前端外部 js 封装对象

Puzzles 封装了一个外部 js 文件,用于更方便的访问 WebAPI

<img id='example' />

<script src="./puzzles.min.js" />
<script>
    var puzz = new Puzz();
    // 为拼图添加一个纯色或图片背景(此处为纯色背景)
    puzz.drawBackground({width: 200, height: 300, bgcolor: '#DD5145'});
    // 添加绘制一个图片
    puzz.drawImage({
        width: 100, height: 100, left: 50, top: 50, 
        imgurl: 'https://sheu-huabei2.oss-cn-beijing.aliyuncs.com/puzzles_demo/js-logo.jpg',
    });
    // 添加绘制一段文字
    puzz.drawText({top: 170, left: 30, text: 'I love code!', color: '#FFF', fontsize: 25, family: 'msyh'});
    // 获取渲染结果
    puzz.render((err, res) => {
        const imgData = res.data;
        // 页面调用过程中返回数据为base64数据格式,可直接赋值于 img 标签的 src 属性
        document.getElementById('example').src = imgData;
    });
</script>

下载地址:puzzles.min.js

c. npm 安装

Puzzles 提供 node.js 环境下的依赖注入,安装命令是:npm install puzzles --save

"use strict";
const Puzz = require('puzzles');

// 某一个用于生成图片的函数
const someFunc = async function(){
  const puzz = new Puzz({dataType: 'buffer'});
  // 为拼图添加一个纯色或图片背景(此处为纯色背景)
  puzz.drawBackground({width: 200, height: 300, bgcolor: '#DD5145'});
  // 添加绘制一个图片
  puzz.drawImage({
      width: 100, height: 100, left: 50, top: 50, 
      imgurl: 'https://sheu-huabei2.oss-cn-beijing.aliyuncs.com/puzzles_demo/js-logo.jpg',
  });
  // 添加绘制一段文字
  puzz.drawText({top: 170, left: 30, text: 'I love code!', color: '#FFF', fontsize: 25, family: 'msyh'});
  // 获取渲染结果
  const res = await puzz.render();
  if(!res.err){
    const fs = require('fs');
    const wres = await fs.writeFileSync('./demo01-first.png', new Buffer(res.data.data));
    console.log('写入文件结果:', wres);
  }
};

1.4 Puzzles 的使用场景

如果你只需要生成一张图片(不需要自动填充变量),建议使用美图秀秀、PS、AI之类的做图软件;

  • 批量自动化的名片、海报生成;
  • 背景相似,局部不同的图片生成,如:每个用户的标签拥有不同的二维码;
  • 无需服务器端支持的纯前端图文生成;
  • node.js服务器端自动化图文拼接;
  • ...

Example

比如,我们需要根据用户来生成可以裂变新用户的分享图,其中背景是设计好的模板,而一些其他数据需要实时动态获取,例如用户信息、分享码或者二维码、商品图片等


image

生成的新图,用户可以选择保存,进而进一步分享或裂变。或者将结果作为一种凭证,应用于其他线下营销场景。

可拼接内容

  • 将多图片进行拼接;
  • 选择不同的字体,生成拼接文字;
  • 生成可拼接的形状,包含矩形、圆形、椭圆形、多边形或线条;

拼接步骤

  • 1.实例化 Puzz 对象;
  • 2.通过 drawBackground() 绘制主背景;
  • 3.通过其他的 draw...() 函数绘制其他图层;
  • 4.渲染并得到返回结果。

使用限制

  • 只能使用图片的 web url 地址,暂不支持本地图片发送;
  • 拼接的文字不支持自动换行;
  • 拼接的文字字体现只支持13种,包含部分中文和英文字体;
  • 访问者必须是可联网的应用;

1.5 为什么使用 Puzzles?

  • 减轻应用服务器压力,将部分业务依托于第三方进行计算;
  • 支持中文文本拼接
  • 无需安装其他软件作为环境支持
  • 降低拼图过程中的技术成本

1.6 Puzzles 未来还会提供什么?

未来预计添加的升级内容

  • 自定义字体上传及应用
  • 文本自动换行
  • 更多的形状支持
  • 本地图片拼接
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 面试题一:https://github.com/jimuyouyou/node-interview-questio...
    R_X阅读 1,638评论 0 5
  • 人生在世,生来匆匆!每个当下就是最美好的,每个现在都是无与伦比的美好时光
    李星辰1314阅读 196评论 0 0
  • 文/任我思存 【1】适看鸿雁岳阳回,又睹玄禽逼社来;瑶琴玉箫无愁绪,任从蛛网任从灰。 ——关盼盼 唐,徐州...
    秦关月阅读 739评论 0 2
  • 如果说 错的时间遇到的是对的你 爱过一场 没在一起并不算可惜 以前也一直认为 你是我在错的时间遇到的对的人 可后来...
    借颜阅读 388评论 2 10
  • 是五十根琴弦拨动你的心弦 是缓缓的琴声让你重温爱情 是五十根琴弦拨动你的华年 是琴声使你回忆心中的爱人 雨声让你辗...
    诗人张毅伟阅读 379评论 0 6