温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

GoJs中导出图片或SVG实现的方法是什么

发布时间:2023-05-04 15:06:13 来源:亿速云 阅读:103 作者:iii 栏目:开发技术

这篇文章主要介绍“GoJs中导出图片或SVG实现的方法是什么”,在日常操作中,相信很多人在GoJs中导出图片或SVG实现的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”GoJs中导出图片或SVG实现的方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    导出图片和SVG的使用

    导出图片和导出SVG相似,只是调用的生成方法不同。而生成图片有两种方法分别为makeImagemakeImageData。而生成SVG只有makeSvg方法。其准备工作沿用之前的数据。添加生成imagesvg的按钮。

    //html
    <button @click="image">image</button>
    <button @click="svg">svg</button>
    //data
    nodes: [
        { key: "1", color: "#99FFFF", text: "三国", figure: "Rectangle" },
        { key: "1-1", color: "#FF0000", text: "魏", figure: "Circle" },
        { key: "1-2", color: "#FFFF66", text: "蜀", figure: "Circle" },
        { key: "1-3", color: "#0000FF", text: "吴", figure: "Circle" },
    ],
    links: [
        {
          from: "1",
          to: "1-1",
        },
        {
          from: "1",
          to: "1-2",
        },
        {
          from: "1",
          to: "1-3",
        },
    ],
    //methods
    this.myDiagram = $$(go.Diagram, "myDiagramDiv", {
        allowDelete: true,
        layout: $$(go.TreeLayout),
        });
    this.myDiagram.nodeTemplate = $$(
    go.Node,
    "Vertical",
    $$(
      go.Shape,
      "Circle",
      { width: 30, height: 30, name: "ICON" },
      new go.Binding("fill", "color"),
      new go.Binding("figure", "figure")
    ),
    $$(go.TextBlock,new go.Binding("text", "text"))
    );
    this.myDiagram.model = new go.GraphLinksModel(this.nodes, this.links);

    GoJs中导出图片或SVG实现的方法是什么

    导出图片的使用方法

    生成图片有两种方法分别为makeImagemakeImageData。makeImage生成的是图表的标签内容,makeImageData生成的则是Base64图像数据。其使用方法分别如下

    makeImage的使用

    image(){
        this.myDiagram.makeImage({
            scale: 1.0,//放大倍数
            parts: this.myDiagram.links,//选中导出的图中元器件
            background: "#FFF",//导出图片的背景颜色
            type: "image/jpeg",//导出图片的格式
            detail: 1.0,//导出图片的详细程度
            size: new go.Size(NAN,NAN),//导出图片的尺寸
            position: new go.Point(0,0),导出图片的左上角在画布上的位置
            callback: img => {
                let a = document.createElement("a");
                a.style = "display: none";
                a.href = img.src;
                a.download = "导出图片";
                a.click();
            }
        })
    },

    通过makeImage中可以配置属性,保证导出图片的格式和样式。其中parts属性为导出图片中显示画布中的元器件,其后面的value值可以通过前面文章中的查询节点和连线的方法获取,其中上面示例中this.myDiagram.links为所有的连线。

    makeImageData的使用

    image(){
        let blob = this.myDiagram.makeImageData({
            returnType: "blob",
            scale: 1.0,
            detail: 10.0,
            background: "#FFF",
            callback: this.myCallback,
        });
    },
    myCallback(blob) {
      let url = window.URL.createObjectURL(blob);
      let filename = "img.png";
      let a = document.createElement("a");
      a.style = "display: none";
      a.href = url;
      a.download = "导出图片";
      let file = new File([blob], filename, { type: "png" });
      // IE 11
      if (window.navigator.msSaveBlob !== undefined) {
        window.navigator.msSaveBlob(blob, filename);
        return;
      }
      document.body.appendChild(a);
      requestAnimationFrame(function () {
        a.click();
        window.URL.revokeObjectURL(url);
        document.body.removeChild(a);
      });
    },

    其中makeImageData中的属性配置和makeImage一样。但是makeImageData生成的Base64图像数据。因此通过window.URL.createObjectURL创建图片的url链接。然后下载图片。

    导出SVG的使用方法

    导出SVG图片的是通过makeSvg来进行配置

    svg(){
        let svg = this.myDiagram.makeSvg({ 
            scale: 1.0,//放大倍数
            parts: this.myDiagram.links,//选中导出的图中元器件
            background: "#FFF",//导出图片的背景颜色
            type: "image/jpeg",//导出图片的格式
            detail: 1.0,//导出图片的详细程度
            size: new go.Size(NAN,NAN),//导出图片的尺寸
            position: new go.Point(0,0),//导出图片的左上角在画布上的位置
        });
        let svgstr = new XMLSerializer().serializeToString(svg);
        let blob = new Blob([svgstr], { type: "image/svg+xml" });
        this.myCallback(blob);
    },
    myCallback(blob) {
      let url = window.URL.createObjectURL(blob);
      let filename = "img.png";
      let a = document.createElement("a");
      a.style = "display: none";
      a.href = url;
      a.download = "导出图片";
      let file = new File([blob], filename, { type: "png" });
      // IE 11
      if (window.navigator.msSaveBlob !== undefined) {
        window.navigator.msSaveBlob(blob, filename);
        return;
      }
      document.body.appendChild(a);
      requestAnimationFrame(function () {
        a.click();
        window.URL.revokeObjectURL(url);
        document.body.removeChild(a);
      });
    },

    导出SVG的属性配置和导出图片一致,其调用的回调函数也是可以通用,因为返回的是svg标签数据,只需要把makeSvg返回的svg对象转换成blob图像数据就可以了。

    到此,关于“GoJs中导出图片或SVG实现的方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI