GoJs中導(dǎo)出圖片或者SVG實(shí)現(xiàn)示例詳解
前言
在可視化圖形的分析中,對(duì)基礎(chǔ)圖形進(jìn)行增刪改之后。除了保存修改之后的可視化數(shù)據(jù)之外。還需要保存為圖片或者svg進(jìn)行分享。
導(dǎo)出圖片和SVG的使用
導(dǎo)出圖片和導(dǎo)出SVG相似,只是調(diào)用的生成方法不同。而生成圖片有兩種方法分別為makeImage和makeImageData。而生成SVG只有makeSvg方法。其準(zhǔn)備工作沿用之前的數(shù)據(jù)。添加生成image和svg的按鈕。
//html
<button @click="image">image</button>
<button @click="svg">svg</button>
//data
nodes: [
{ key: "1", color: "#99FFFF", text: "三國(guó)", 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);
導(dǎo)出圖片的使用方法
生成圖片有兩種方法分別為makeImage和makeImageData。makeImage生成的是圖表的標(biāo)簽內(nèi)容,makeImageData生成的則是Base64圖像數(shù)據(jù)。其使用方法分別如下
makeImage的使用
image(){
this.myDiagram.makeImage({
scale: 1.0,//放大倍數(shù)
parts: this.myDiagram.links,//選中導(dǎo)出的圖中元器件
background: "#FFF",//導(dǎo)出圖片的背景顏色
type: "image/jpeg",//導(dǎo)出圖片的格式
detail: 1.0,//導(dǎo)出圖片的詳細(xì)程度
size: new go.Size(NAN,NAN),//導(dǎo)出圖片的尺寸
position: new go.Point(0,0),導(dǎo)出圖片的左上角在畫布上的位置
callback: img => {
let a = document.createElement("a");
a.style = "display: none";
a.href = img.src;
a.download = "導(dǎo)出圖片";
a.click();
}
})
},
通過(guò)makeImage中可以配置屬性,保證導(dǎo)出圖片的格式和樣式。其中parts屬性為導(dǎo)出圖片中顯示畫布中的元器件,其后面的value值可以通過(guò)前面文章中的查詢節(jié)點(diǎn)和連線的方法獲取,其中上面示例中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 = "導(dǎo)出圖片";
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圖像數(shù)據(jù)。因此通過(guò)window.URL.createObjectURL創(chuàng)建圖片的url鏈接。然后下載圖片。
導(dǎo)出SVG的使用方法
導(dǎo)出SVG圖片的是通過(guò)makeSvg來(lái)進(jìn)行配置
svg(){
let svg = this.myDiagram.makeSvg({
scale: 1.0,//放大倍數(shù)
parts: this.myDiagram.links,//選中導(dǎo)出的圖中元器件
background: "#FFF",//導(dǎo)出圖片的背景顏色
type: "image/jpeg",//導(dǎo)出圖片的格式
detail: 1.0,//導(dǎo)出圖片的詳細(xì)程度
size: new go.Size(NAN,NAN),//導(dǎo)出圖片的尺寸
position: new go.Point(0,0),//導(dǎo)出圖片的左上角在畫布上的位置
});
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 = "導(dǎo)出圖片";
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);
});
},
導(dǎo)出SVG的屬性配置和導(dǎo)出圖片一致,其調(diào)用的回調(diào)函數(shù)也是可以通用,因?yàn)榉祷氐氖?code>svg標(biāo)簽數(shù)據(jù),只需要把makeSvg返回的svg對(duì)象轉(zhuǎn)換成blob圖像數(shù)據(jù)就可以了。
總結(jié)
導(dǎo)出圖片和導(dǎo)出svg是兩種不同的方式,只不過(guò)都是以圖像的形式進(jìn)行顯示。因?yàn)楝F(xiàn)在瀏覽器也是可以打開svg的,因此推薦使用導(dǎo)出svg。因?yàn)樵诳梢暬瘓D形數(shù)據(jù)量比較大的時(shí)候,svg能夠保持不失真,并且放大縮小顯示更加清晰。
以上就是GoJs中導(dǎo)出圖片或者SVG實(shí)現(xiàn)示例詳解的詳細(xì)內(nèi)容,更多關(guān)于GoJs導(dǎo)出圖片SVG的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JS apply用法總結(jié)和使用場(chǎng)景實(shí)例分析
這篇文章主要介紹了JS apply用法總結(jié)和使用場(chǎng)景,結(jié)合實(shí)例形式分析了JS apply的基本功能、原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下2020-03-03
動(dòng)態(tài)修改DOM 里面的 id 屬性的弊端分析
我不知道是否有什么標(biāo)準(zhǔn)規(guī)定不允許修改id屬性,或者不建議修改id屬性,總之IE對(duì)此支持不佳。2008-09-09
js鍵盤方向鍵 文章翻頁(yè)跳轉(zhuǎn)的效果[小說(shuō)站常用已支持firefox]
一些小說(shuō)或圖片類網(wǎng)站,為了方便大家閱讀,往往會(huì)加入利用鍵盤方向鍵進(jìn)行翻頁(yè)、返回上一級(jí)、返回目錄、回首頁(yè)等功能。2009-05-05
微信小程序開發(fā)搜索功能實(shí)現(xiàn)(前端+后端+數(shù)據(jù)庫(kù))
這篇文章主要介紹了微信小程序開發(fā)搜索功能實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
js 基礎(chǔ)篇必看(點(diǎn)擊事件輪播圖的簡(jiǎn)單實(shí)現(xiàn))
下面小編就為大家?guī)?lái)一篇js 基礎(chǔ)篇必看(點(diǎn)擊事件輪播圖的簡(jiǎn)單實(shí)現(xiàn))。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08

