如何以编程方式从 draw.io PNG 中提取 XML 数据
How to programatically extract XML data from draw.io PNG
长话短说,我希望能够在浏览器中使用 PHP 或 JavaScript 从 draw.io 保存的 PNG 中提取 XML 数据。
我正在使用 draw.io 带图层的图像来记录网络设备之间的物理连接。文档站点是一个内部站点 运行 一个 dokuwiki 我没有管理权限的实例。我可以将导出的 PNG 文件上传到网站,但不允许上传 TXT、XML 或 SVG 文件。无论出于何种原因,我都可以在页面上嵌入 HTML、PHP 和 JavaScript。我现在可以粘贴 HTML 嵌入代码,但这会显着降低浏览器在编辑页面时的速度,以至于在粘贴嵌入代码后我无法进行任何进一步的更改。
我的解决方案是使用 PHP 或 JavaScript 从上传的 PNG 中提取 XML 数据。与 this ask 几乎相反。然后,我会将其插入到页面上的嵌入代码中。
这是我要使用的嵌入代码:
<div
class="mxgraph"
style="max-width:100%;border:1px solid transparent;"
data-mxgraph="{"highlight":"#0000ff","nav":true,"resize":true,"toolbar":"zoom layers lightbox","edit":"_blank","xml":"_INSERT_XML_DATA_HERE_"}">
</div>
<script
type="text/javascript"
src="https://www.draw.io/js/viewer.min.js">
</script>
我对 JavaScript 的了解还不足以弄清楚 draw.io 在从 PNG 打开时是如何做到这一点的,但是一些关于它如何工作的示例代码甚至是 link 到源代码中发生这种情况的地方会有所帮助。
XML 数据无法从 PNG 中提取,因为它是光栅化压缩像素数据。我认为您正在寻找的格式是 SVG,它是一种基于 XML 的图像格式。使用 SVG 图像,您可以使用文件中的 XML 做任何您需要的事情,或者只上传 svg.
在 draw.io 中,您需要导出为 svg。
文件 > 导出为 > SVG...
希望对您有所帮助。
Draw.io能做到,你也能做到!但我认为只有在导出到 PNG 时选择 Include a copy of my diagram
选项才有可能。使用此选项 Draw.io 在 PNG 中保存其他数据(您可以查看 writeGraphModelToPng。
但对您来说更有趣的是 extractGraphModelFromPng
长话短说,我希望能够在浏览器中使用 PHP 或 JavaScript 从 draw.io 保存的 PNG 中提取 XML 数据。
我正在使用 draw.io 带图层的图像来记录网络设备之间的物理连接。文档站点是一个内部站点 运行 一个 dokuwiki 我没有管理权限的实例。我可以将导出的 PNG 文件上传到网站,但不允许上传 TXT、XML 或 SVG 文件。无论出于何种原因,我都可以在页面上嵌入 HTML、PHP 和 JavaScript。我现在可以粘贴 HTML 嵌入代码,但这会显着降低浏览器在编辑页面时的速度,以至于在粘贴嵌入代码后我无法进行任何进一步的更改。
我的解决方案是使用 PHP 或 JavaScript 从上传的 PNG 中提取 XML 数据。与 this ask 几乎相反。然后,我会将其插入到页面上的嵌入代码中。
这是我要使用的嵌入代码:
<div
class="mxgraph"
style="max-width:100%;border:1px solid transparent;"
data-mxgraph="{"highlight":"#0000ff","nav":true,"resize":true,"toolbar":"zoom layers lightbox","edit":"_blank","xml":"_INSERT_XML_DATA_HERE_"}">
</div>
<script
type="text/javascript"
src="https://www.draw.io/js/viewer.min.js">
</script>
我对 JavaScript 的了解还不足以弄清楚 draw.io 在从 PNG 打开时是如何做到这一点的,但是一些关于它如何工作的示例代码甚至是 link 到源代码中发生这种情况的地方会有所帮助。
XML 数据无法从 PNG 中提取,因为它是光栅化压缩像素数据。我认为您正在寻找的格式是 SVG,它是一种基于 XML 的图像格式。使用 SVG 图像,您可以使用文件中的 XML 做任何您需要的事情,或者只上传 svg.
在 draw.io 中,您需要导出为 svg。
文件 > 导出为 > SVG...
希望对您有所帮助。
Draw.io能做到,你也能做到!但我认为只有在导出到 PNG 时选择 Include a copy of my diagram
选项才有可能。使用此选项 Draw.io 在 PNG 中保存其他数据(您可以查看 writeGraphModelToPng。
但对您来说更有趣的是 extractGraphModelFromPng