GoJs中导出图片或者SVG实现示例详解

目录
  • 前言
  • 导出图片和SVG的使用
    • 导出图片的使用方法
    • 导出SVG的使用方法
  • 总结

前言

在可视化图形的分析中,对基础图形进行增删改之后。除了保存修改之后的可视化数据之外。还需要保存为图片或者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);

导出图片的使用方法

生成图片有两种方法分别为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图像数据就可以了。

总结

导出图片和导出svg是两种不同的方式,只不过都是以图像的形式进行显示。因为现在浏览器也是可以打开svg的,因此推荐使用导出svg。因为在可视化图形数据量比较大的时候,svg能够保持不失真,并且放大缩小显示更加清晰。

以上就是GoJs中导出图片或者SVG实现示例详解的详细内容,更多关于GoJs导出图片SVG的资料请关注我们其它相关文章!

(0)

相关推荐

  • 一文详解GoJs中go.Panel的itemArray属性

    目录 前言 itemArray属性的使用 只包含一种绘图模板的渲染列表 包含不同的绘图模板的渲染列表 内部多个绘图模板的不同列的行循环 总结 前言 上一篇文章中,为了演示go.panel内部元素的折叠展开,也是为了举例子比较简单.使用了一个go.Panel的属性itemArray,本文将详细的介绍一下itemArray属性. itemArray属性的使用 只包含一种绘图模板的渲染列表 //data nodes: [ { key: 1, text:"三国", list1: ["

  • 详解GoJs节点的折叠展开实现

    目录 前言 节点折叠展开的不同情况 树形布局特有的属性后代节点的折叠展开 go.Group(组)的内部元素的展开折叠 go.Panel(面板)的内部元素的展开折叠 总结 前言 前面的文章中提到了提示信息(toolTip)在节点信息内容过多的时候,需要节点信息的内容进行隐藏,在鼠标移入的时候进行未显示信息的提示框形式的选中,本文讲从另外的角度处理在画布上的可视化图形的内容过多的时候的处理情况,一种是把节点的内部的折叠和展开,另外一种就是对部分节点进行折叠和展开. 节点折叠展开的不同情况 对于节点的

  • 详解GoJs节点的选中高亮实现示例

    目录 前言 gojs节点选中高亮的使用 只选中节点内部分元素的选中样式 定制的选中样式 节点选中时候增加操作按钮 修改选中节点的内部样式 总结 前言 上文中我们说到了,节点之间的文字描述.在有些时候我们要看两个节点之间的关系,在数据量比较大的时候就需要给两个节点给一个选中的样式.在使用的过程中,gojs默认给了一个节点的选中样式,就是一个蓝色的边框. gojs节点选中高亮的使用 //data myDiagram: null, nodes:[ { key: "1", color: &qu

  • GoJs连线上的信息展示使用详解

    目录 前言 连线上的信息怎么使用 连线上的文字信息的默认显示 对连线显示的信息增加其他绘图模板 修改文字和连线方向平行 两个节点之间有多个关系 总结 前言 在可视化图像中.节点是信息写的单元,而连线就是这些这些信息单元的联系.在有些情况下,不止需要知道两个节点之间有关系并且还需要知道两个节点之间的关系进行一个描述.这个时候就需要在连线上展示一些信息. 连线上的信息怎么使用 连线上的文字信息的默认显示 在之前的go.Link一文中提到过,是通过linkTemplate连线进行配置.下面对连线上的配

  • GoJs中使用HTML方法示例

    目录 前言 使用html的方式 提示信息的html交互 右键菜单的html交互 文本编辑的html交互 总结 前言 在gojs中因为有自己的绘图模板和一些语法限制,实际上都是在canvas标签的特性上进行的封装.但是有些时候其拓展就不能满足需求的时候,可以对其和html结构进行一些交互,达到自己显示上的特殊需求的展示. 使用html的方式 本文将从提示信息.右键菜单.和文本编辑三个方面来体现gojs和html之间的交互.而对于html的使用交互过程中,最主要考虑到的就是html信息何时展示,何时

  • GoJs中标题和缩略图使用技巧

    目录 前言 标题的使用 随图形变化的标题 不随图形变化的标题 缩略图的使用 总结 前言 在可视化图形中为了方便区分,需要给图形一个标题.可以在画布外面用html调整位置之后作为图形的标题,当然也可以在画布内部进行一个标题的绘制.在画布上的节点数据量比较大的时候,也需要用到缩略图对图形进行一个缩略显示并且拖动缩略图的框选来重点的画布中的部分数据. 标题的使用 还是以前面的数据为例,在原有数据的基础上给图形增加一个标题代码示例如下 //data nodes: [ { key: "1", c

  • GoJs连线绘图模板Link使用示例详解

    目录 前言 go.link的简单使用 go.Link的属性配置 routing属性 curve属性 corner.toEndSegmentLength.fromEndSegmentLength.fromShortLength.toShortLength属性 selectable.fromSpot.toSpot属性 总结 前言 可视化图形中除了携带很多信息的节点(node)之外,还需要知道他们之间的关系,而链接他们之间的连线在gojs中是使用go.link进行绘制.在渲染的时候我们根据数据的fro

  • Python中八大图像特效算法的示例详解

    目录 0写在前面 1毛玻璃特效 2浮雕特效 3油画特效 4马赛克特效 5素描特效 6怀旧特效 7流年特效 8卡通特效 0 写在前面 图像特效处理是基于图像像素数据特征,将原图像进行一定步骤的计算——例如像素作差.灰度变换.颜色通道融合等,从而达到期望的效果.图像特效处理是日常生活中应用非常广泛的一种计算机视觉应用,出现在各种美图软件中,这些精美滤镜背后的数学原理都是相通的,本文主要介绍八大基本图像特效算法,在这些算法基础上可以进行二次开发,生成更高级的滤镜. 本文采用面向对象设计,定义了一个图像

  • JS前端中的设计模式和使用场景示例详解

    目录 引言 策略模式 1.绩效考核 2.表单验证 策略模式的优缺点: 代理模式 1.图片懒加载: 2.缓存代理 总结 引言 相信大家在日常学习和工作中都多多少少听说/了解/使用过 设计模式,我们都知道,使用恰当的设计模式可以优化我们的代码,那你是否知道对于前端开发哪些 设计模式 是日常工作经常用到或者必须掌握的呢?本文我将带大家一起学习下前端常见的设计模式以及它们的 使用场景!!! 本文主讲: 策略模式 代理模式 适合人群: 前端人员 设计模式小白/想知道如何在项目中使用设计模式 策略模式 策略

  • GoJs分组绘图模板go.Group使用示例详解

    目录 前言 Group的使用 Group的属性 handlesDragDropForMembers.isSubGraphExpanded属性 isSubGraphExpanded属性 ungroupable.wasSubGraphExpanded属性 结语 前言 在可视化图形中,很多的节点和连线都有某一个特征或者属于某些分类,为了在使用可视化图形的时候更加直观的看出相同类型节点的集合,我们就会用到分组的绘图模板. Group的使用 //data nodes: [ { key: "1",

  • python中前缀运算符 *和 **的用法示例详解

    这篇主要探讨 ** 和 * 前缀运算符,**在变量之前使用的*and **运算符. 一个星(*):表示接收的参数作为元组来处理 两个星(**):表示接收的参数作为字典来处理 简单示例: >>> numbers = [2, 1, 3, 4, 7] >>> more_numbers = [*numbers, 11, 18] >>> print(*more_numbers, sep=', ') 2, 1, 3, 4, 7, 11, 18 用途: 使用 * 和

  • MySQL中使用去重distinct方法的示例详解

    一 distinct 含义:distinct用来查询不重复记录的条数,即distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段 用法注意: 1.distinct[查询字段],必须放在要查询字段的开头,即放在第一个参数: 2.只能在SELECT 语句中使用,不能在 INSERT, DELETE, UPDATE 中使用: 3.DISTINCT 表示对后面的所有参数的拼接取 不重复的记录,即查出的参数拼接每行记录

  • Pandas中的 transform()结合 groupby()用法示例详解

    首先,假设我们有如下餐厅数据集: import pandas as pd df = pd.DataFrame({ 'restaurant_id': [101,102,103,104,105,106,107], 'address': ['A','B','C','D', 'E', 'F', 'G'], 'city': ['London','London','London','Oxford','Oxford', 'Durham', 'Durham'], 'sales': [10,500,48,12,2

  • python编程中简洁优雅的推导式示例详解

    目录 1. 列表推导式 增加条件语句 多重循环 更多用法 2. 字典推导式 3. 集合推导式 4. 元组推导式 Python语言有一种独特的推导式语法,相当于语法糖的存在,可以帮助你在某些场合写出较为精简酷炫的代码.但没有它,也不会有太多影响.Python语言有几种不同类型的推导式. 1. 列表推导式 列表推导式是一种快速生成列表的方式.其形式是用方括号括起来的一段语句,如下例子所示: lis = [x * x for x in range(1, 10)] print(lis) 输出 [1, 4

  • 利用Python中xlwt模块操作excel的示例详解

    目录 一.安装 二.创建表格并写入 三.设置单元格样式 四.设置单元格宽度 五.设置单元格背景色 六.设置单元格内容对齐方式 七.单元格添加超链接 八.单元格添加公式 九.单元格中输入日期 十.合并行和列 十一.单元格添加边框 一.安装 pip install xlwt 二.创建表格并写入 import xlwt # 创建一个workbook并设置编码 workbook = xlwt.Workbook(encoding = 'utf-8') # 添加sheet worksheet = workb

  • Java实现图片裁剪功能的示例详解

    目录 前言 Maven依赖 代码 验证一下 前言 本文提供将图片按照自定义尺寸进行裁剪的Java工具类,一如既往的实用主义. Maven依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>30.1.1-jre</version> </dependency> <dependen

随机推荐