基于canvas实现合图引擎 设计思路
合图引擎基于json数据 解析,比较与htmltocanvas 先生成html再生成canva的解决方案, 渲染过程更可控,定制化成都高。
import Dev from '@ali/hetuCanva/dist/dev';
const data = {
"name": "draw edit action",
"width": 375,
"height": 850,
"layers": [
{
"name": "bg-layer",
"materials": [
{
"type": "IMAGE",
"style": {
"x": 0,
"y": 0,
"width": 375,
"height": 850,
"src": "https://img.alicdn.com/tfs/TB1Itzu4AL0gK0jSZFtXXXQCXXa-1500-3400.png"
}
}
]
},
{
"name": "items-bg-list-layer",
"materials": [
{
"type": "RECTANGLE",
"style": {
"x": 15,
"y": 143,
"width": 170,
"height": 170,
"color": "#f0f0f0"
}
},
{
"type": "RECTANGLE",
"style": {
"x": 190,
"y": 143,
"width": 170,
"height": 170,
"color": "#f0f0f0"
}
},
{
"type": "RECTANGLE",
"style": {
"x": 15,
"y": 318,
"width": 170,
"height": 170,
"color": "#f0f0f0"
}
},
{
"type": "RECTANGLE",
"style": {
"x": 190,
"y": 318,
"width": 170,
"height": 170,
"color": "#f0f0f0"
}
},
{
"type": "RECTANGLE",
"style": {
"x": 15,
"y": 493,
"width": 170,
"height": 170,
"color": "#f0f0f0"
}
},
{
"type": "RECTANGLE",
"style": {
"x": 190,
"y": 493,
"width": 170,
"height": 170,
"color": "#f0f0f0"
}
}
]
},
{
"name": "items",
"materials": [
{
"type": "IMAGE",
"style": {
"x": 15,
"y": 143,
"width": 170,
"height": 170,
"src": "https://img.alicdn.com/tfs/TB1u75srIVl614jSZKPXXaGjpXa-580-335.png",
"size": "contain",
"position": "top",
}
},
{
"type": "IMAGE",
"style": {
"x": 190,
"y": 143,
"width": 170,
"height": 170,
"src": "https://img.alicdn.com/tfs/TB1u75srIVl614jSZKPXXaGjpXa-580-335.png",
"size": "contain",
"position": "bottom",
}
},
{
"type": "IMAGE",
"style": {
"x": 15,
"y": 318,
"width": 170,
"height": 170,
"src": "https://img.alicdn.com/tfs/TB1rf72rggP7K4jSZFqXXamhVXa-352-614.png",
"size": "contain",
"position": "left",
}
},
{
"type": "IMAGE",
"style": {
"x": 190,
"y": 318,
"width": 170,
"height": 170,
"src": "https://img.alicdn.com/tfs/TB1rf72rggP7K4jSZFqXXamhVXa-352-614.png",
"size": "contain",
"position": "right",
}
},
{
"type": "IMAGE",
"style": {
"x": 15,
"y": 493,
"width": 170,
"height": 170,
"src": "https://img.alicdn.com/tfs/TB1rf72rggP7K4jSZFqXXamhVXa-352-614.png",
"size": "contain",
"position": "center",
}
},
{
"type": "IMAGE",
"style": {
"x": 190,
"y": 493,
"width": 170,
"height": 170,
"src": "https://img.alicdn.com/tfs/TB1u75srIVl614jSZKPXXaGjpXa-580-335.png",
"size": "contain",
"position": "center",
}
}
]
}
]
}
const engine = new Dev({
data: data,
});
engine.render(document.querySelector('#example'))
draw任务流:
概念: 多个 元件合并 成一个图层, 多个图层合并成 一张图片
- 元件(图片,文本,业务组件)
- 图层
- 图片
使用koa-compose函数,入参是单个绘制处理任务(包括图层、元素),将多个图层||元件合并成一个任务来处理
export function compose(middleware: Function[]): Function {
return function (context: any, next: Function): Promise<any> {
let index = -1;
return dispatch(0);
function dispatch(i: number): Promise<any> {
if (i <= index) {
return Promise.reject()
}
index = i;
let fn: Function = middleware[i];
if (i === middleware.length) {
fn = next;
}
if (!fn) {
return Promise.resolve();
}
try {
return Promise.resolve(fn(context, dispatch.bind(null, i + 1)));
} catch (err) {
return Promise.reject(err)
}
}
}
}

浙公网安备 33010602011771号