流程圖控件GoJS教程:如何制作影像
GoJS是一款功能強(qiáng)大,快速且輕量級(jí)的流程圖控件,可幫助你在JavaScript 和HTML5 Canvas程序中創(chuàng)建流程圖,且極大地簡(jiǎn)化您的JavaScript / Canvas 程序。
GoJS具有用于創(chuàng)建圖像的兩個(gè)功能:Diagram.makeImageData,它輸出一個(gè)Base64圖像數(shù)據(jù)串,和Diagram.makeImage,這是一個(gè)方便的功能調(diào)用Diagram.makeImageData并返回一個(gè)新HTMLImageElement與圖像數(shù)據(jù)作為其源。這兩個(gè)函數(shù)具有相同的單個(gè)參數(shù),即JavaScript對(duì)象,其中包含幾個(gè)可定義的屬性,在文檔中進(jìn)行了枚舉。
該頁面幾乎與制作SVG上的頁面相同,該頁面顯示了如何渲染SVG元素而不是PNG圖像。
myDiagram.makeImage();使用“ scale”屬性設(shè)置為1的對(duì)象調(diào)用makeImage會(huì)生成包含整個(gè)圖的圖像,而不僅僅是視口中可見的區(qū)域。但是,將修剪文檔邊界周圍的空白區(qū)域。
myDiagram.makeImage({ scale: 1 });
myDiagram.makeImage({ scale: 2 });通過設(shè)置makeImage的size選項(xiàng)創(chuàng)建以下圖像。請(qǐng)注意,畫布是均勻縮放的,任何多余的空間都放在圖像的底部或右側(cè)。
myDiagram.makeImage({ size: new go.Size(100,100) });通過設(shè)置makeImage的size選項(xiàng)也可以創(chuàng)建以下圖像,但是只設(shè)置了寬度。高度將是統(tǒng)一包含圖表所需的任何大小。
myDiagram.makeImage({ size:new go.Size(100,NaN) });零件選項(xiàng)允許我們指定要繪制的零件的可迭代集合。如果只想對(duì)圖的一部分(例如選擇節(jié)點(diǎn))進(jìn)行圖像處理,這將很有用。
myPartsList = new go.List(); myPartsList.add(myDiagram.findNodeForKey("Beta")); myPartsList.add(myDiagram.findNodeForKey("Delta")); myDiagram.makeImage({ parts: myPartsList });
myDiagram.makeImage({ parts:myDiagram.links });
myDiagram.makeImage({ scale: 1.5, size: new go.Size(100,100) });
maxSize的默認(rèn)值為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) });同時(shí)設(shè)置位置和大小會(huì)創(chuàng)建一個(gè)圖表圖像,該圖像專門定位并裁剪為給定的大小。設(shè)置位置但未設(shè)置比例尺時(shí),比例尺默認(rèn)為1。
myDiagram.makeImage({ position: new go.Point(20,20), size: new go.Size(50,50) });將背景設(shè)置為CSS顏色字符串將用給定的顏色替換透明的Diagram背景。
myDiagram.makeImage({ size:new go.Size(NaN,250), background:“ rgba( 0,255,0,0.5 )” //半透明的綠色背景 });
在下面的代碼中,我們使用文檔邊界將Diagram分成四個(gè)相等的部分,從而在每個(gè)部分中制作出四個(gè)圖像。通過這種方式,我們可以為分頁,制作圖庫或打印目的準(zhǔn)備圖像。創(chuàng)建的四個(gè)圖像如下所示。
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);
我們可以設(shè)置參數(shù)對(duì)象的類型和詳細(xì)信息屬性,以檢索不同種類的圖像。唯一受廣泛支持的類型是“ image / jpeg”。jpeg的詳細(xì)信息通過使用0到1之間的值(包括0和1)來確定其質(zhì)量。Jpegs通常不用于圖表,因?yàn)樗鼈兊挠袚p壓縮會(huì)導(dǎo)致文本不可讀。
下圖是輸出的jpeg。請(qǐng)注意透明背景如何變?yōu)楹谏?,因?yàn)閖peg格式不支持alpha透明,并且HTML5畫布的默認(rèn)狀態(tài)是完全透明的黑色像素rgba(0,0,0,0)。
myDiagram.makeImage({ scale:1, type:“ image / jpeg” });
myDiagram.makeImage({ scale: 1, background: "AntiqueWhite", type: "image/jpeg" });
myDiagram.makeImage({ scale: 1, background: "AntiqueWhite", type: "image/jpeg", details: 0.05 });
下載圖像
如果您希望用戶下載圖像,則無需涉及Web服務(wù)器。請(qǐng)參閱樣本“ 最小斑點(diǎn)”。請(qǐng)注意,該示例僅下載單個(gè)圖像。如果用戶可以接受該選擇,建議您使用SVG下載圖像。該樣本位于最小SVG處。