GoJS如何制作影像

Wesley13
• 阅读 741

GoJS是一款功能强大,快速且轻量级的流程图控件,可帮助你在JavaScript 和HTML5 Canvas程序中创建流程图,且极大地简化您的JavaScript / Canvas 程序。

GoJS具有用于创建图像的两个功能:Diagram.makeImageData,它输出一个Base64图像数据串,和Diagram.makeImage,这是一个方便的功能调用Diagram.makeImageData并返回一个新HTMLImageElement与图像数据作为其源。这两个函数具有相同的单个参数,即JavaScript对象,其中包含几个可定义的属性,在文档中进行了枚举。
该页面几乎与制作SVG上的页面相同,该页面显示了如何渲染SVG元素而不是PNG图像。

GoJS如何制作影像

调用不带参数或属性对象为空的makeImage会生成与图的视口大小相同的图像。

myDiagram.makeImage();

使用“ scale”属性设置为1的对象调用makeImage会生成包含整个图的图像,而不仅仅是视口中可见的区域。但是,将修剪文档边界周围的空白区域。

myDiagram.makeImage({ scale: 1 });

GoJS如何制作影像

设置比例尺属性将创建一个比例缩放的图像,该图像恰好足以容纳该图。下图以2的比例创建。

myDiagram.makeImage({ scale: 2 });

通过设置makeImage的size选项创建以下图像。请注意,画布是均匀缩放的,任何多余的空间都放在图像的底部或右侧。

myDiagram.makeImage({ size: new go.Size(100,100) });

通过设置makeImage的size选项也可以创建以下图像,但是只设置了宽度。高度将是统一包含图表所需的任何大小。

myDiagram.makeImage({ size:new go.Size(100,NaN) });

零件选项允许我们指定要绘制的零件的可迭代集合。如果只想对图的一部分(例如选择节点)进行图像处理,这将很有用。

myPartsList = new go.List(); myPartsList.add(myDiagram.findNodeForKey("Beta")); myPartsList.add(myDiagram.findNodeForKey("Delta")); myDiagram.makeImage({ parts: myPartsList });

GoJS如何制作影像

或者只是简单地绘制链接:

myDiagram.makeImage({ parts:myDiagram.links });

GoJS如何制作影像

同时设置缩放比例和尺寸将创建一个图像,该图像将被专门缩放并裁剪为给定的尺寸,如下图所示。

myDiagram.makeImage({ scale: 1.5, size: new go.Size(100,100) });

GoJS如何制作影像

我们可能需要一个非常大的缩放图像,该图像的大小受到限制,我们可以使用maxSize属性来限制一个或两个尺寸。下图应用了非常大的比例,但是水平尺寸受到限制,因此将发生一些水平裁剪。
maxSize的默认值为go.Size(2000, 2000),并且指定go.Size(600, NaN)等效于指定go.Size(600, 2000)。如果我们不想在高度上裁剪,我们可以写go.Size(600, Infinity)。

myDiagram.makeImage({ scale:9, maxSize:new go.Size(600,NaN) });

同时设置位置和大小会创建一个图表图像,该图像专门定位并裁剪为给定的大小。设置位置但未设置比例尺时,比例尺默认为1。

myDiagram.makeImage({ position: new go.Point(20,20), size: new go.Size(50,50) });

将背景设置为CSS颜色字符串将用给定的颜色替换透明的Diagram背景。

myDiagram.makeImage({ size:new go.Size(NaN,250), background:“ rgba( 0,255,0,0.5 )” //半透明的绿色背景 });

GoJS如何制作影像

在下面的代码中,我们使用文档边界将Diagram分成四个相等的部分,从而在每个部分中制作出四个图像。通过这种方式,我们可以为分页,制作图库或打印目的准备图像。创建的四个图像如下所示。

var d = myDiagram.documentBounds; var halfWidth = d.width / 2; var halfHeight = d.height / 2; img = myDiagram.makeImage({ position: new go.Point(d.x, d.y), size: new go.Size(halfWidth,halfHeight) }); addImage(img); // Adds the image to a DIV below

img = myDiagram.makeImage({
        position: new go.Point(d.x + halfWidth, d.y),
        size: new go.Size(halfWidth,halfHeight)
      });
addImage(img);

img = myDiagram.makeImage({
        position: new go.Point(d.x, d.y+ halfHeight),
        size: new go.Size(halfWidth,halfHeight)
      });
addImage(img);

img = myDiagram.makeImage({
        position: new go.Point(d.x + halfWidth, d.y + halfHeight),
        size: new go.Size(halfWidth,halfHeight)
      });
addImage(img);

GoJS如何制作影像

图像类型

我们可以设置参数对象的类型和详细信息属性,以检索不同种类的图像。唯一受广泛支持的类型是“ image / jpeg”。jpeg的详细信息通过使用0到1之间的值(包括0和1)来确定其质量。Jpegs通常不用于图表,因为它们的有损压缩会导致文本不可读。

下图是输出的jpeg。请注意透明背景如何变为黑色,因为jpeg格式不支持alpha透明,并且HTML5画布的默认状态是完全透明的黑色像素rgba(0,0,0,0)。

myDiagram.makeImage({ scale:1, type:“ image / jpeg” });

GoJS如何制作影像

下图是使用指定的AntiqueWhite背景创建的jpeg。

myDiagram.makeImage({ scale: 1, background: "AntiqueWhite", type: "image/jpeg" });

GoJS如何制作影像

下图是创建的jpeg(具有AntiqueWhite背景)和details选项,但质量很低。

myDiagram.makeImage({ scale: 1, background: "AntiqueWhite", type: "image/jpeg", details: 0.05 });

下载图像

如果您希望用户下载图像,则无需涉及Web服务器。请参阅样本“ 最小斑点”。请注意,该示例仅下载单个图像。
如果用户可以接受该选择,建议您使用SVG下载图像。该样本位于最小SVG处。

本文转载自慧都科技, 欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,尊重他人劳动成果

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
3年前
GoJS用于HTML图表的JavaScript库
GoJS(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.evget.com%2Fproduct%2F3108)是一款功能强大,快速且轻量级的流程图控件,可帮助你在JavaScript和HTML5Canvas程序中创建流程图,且极大地简化您的JavaScript/Canv
Stella981 Stella981
3年前
Essential Studio for UWP发布2017 v2,新增甘特图控件
EssentialStudioforUWP(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.evget.com%2Fproduct%2F3894)是包含有35组件的综合套包,包括最快的图表和网格组件。所有组件根据当前被呈现的设备系列自适应渲染。EssentialStu
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这