前言
在可视化图形的分析中,对基础图形进行增删改之后。除了保存修改之后的可视化数据之外。还需要保存为图片或者svg
进行分享。
导出图片和SVG的使用
导出图片和导出SVG相似,只是调用的生成方法不同。而生成图片有两种方法分别为makeImage
和makeImageData
。而生成SVG
只有makeSvg
方法。其准备工作沿用之前的数据。添加生成image
和svg
的按钮。
//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);
导出图片的使用方法
生成图片有两种方法分别为makeImage
和makeImageData。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的资料请关注编程网其它相关文章!