zoukankan      html  css  js  c++  java
  • 基于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)
          }
        }
      }
    
    }
    

      

             

  • 相关阅读:
    将个人博客与github关联
    docker镜像制作
    perf命令
    vmstat命令
    ps命令
    top命令
    linux查看当前用户登陆信息
    .NET CORE应用程序启动
    WebAPI简介
    Redis-位图
  • 原文地址:https://www.cnblogs.com/breakdown/p/15086674.html
Copyright © 2011-2022 走看看