• 基于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)
          }
        }
      }
    
    }
    

      

             

  • 相关阅读:
    最小生成树示例程序_Prim算法
    邻接表示例程序
    拓扑排序示例程序
    hdu1754 I Hate It && hdu1166 敌兵布阵 ——线段树复习
    2013年4月26日 晴
    Snakes & Ladders ——BFS入门题
    zoj1203 Swordfish ——最小生成树入门题_Kruscal算法
    poj3087 Shuffle'm Up ——水题
    poj1002 4873279 ——水题
    2013年4月21日 阴
  • 原文地址:https://www.cnblogs.com/breakdown/p/15086674.html
Copyright © 2020-2023  润新知