从客户端 DOM 序列化 SVG 的最佳方法是什么?
我正在开发交互式 SVG/AJAX 界面,其中元素由用户即时创建和重新定位。 我希望支持用户将当前视图导出为 PNG 图像和/或 SVG 文档的功能。 我真的希望 SVG 文档尽可能简单(没有大量嵌套转换)。 有没有已经支持这个的框架?
我目前要求我的用户使用 Ctrl+Alt+PrntScrn 技术,并且我不想要求他们安装任何软件/插件。
服务器端代码现在是用 PHP 实现的,如果有帮助的话。 我已经实现了使用 ImageMagick 从“原始”文档(在客户端进行任何修改之前)生成 PNG 图像的功能。
I am working on interactive SVG/AJAX interfaces where elements are created and repositioned on-the-fly by users. I'd like to support the ability for users to export their current view to a PNG image and/or an SVG document. I'd really like the SVG document to be as simple as possible (without a lot of nested transforms). Is there any framework that already supports this?
I'm currently asking my users to use the Ctrl+Alt+PrntScrn technique, and I don't want to ask them to install any software/plugins.
The server-side code is implemented in PHP right now, if that helps. I've already implemented the ability to generate a PNG image from the "original" document (before the client makes any modifications) using ImageMagick.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我假设您需要它仅在支持 SVG 的浏览器中工作。
Firefox、Safari 和 Opera 提供非标准
XMLSerializer
API,因此您可以执行以下操作:从那里,您可以将其发送到服务器并接收 PNG 作为返回。
这是 Mozilla 的有关从 DOM 序列化 XML 的开发人员页面。
I'm assuming you need this to work only in browsers that support SVG.
Firefox, Safari, and Opera provide the non-standard
XMLSerializer
API, so you could do something like this:From there, you can send it to the server and receive a PNG in return.
Here's Mozilla's developer page on serializing XML from the DOM.
Opera 实现了 W3C 的 DOM→XML 序列化器。 在 XML 模式下,
innerHTML
在 Gecko 中返回格式正确的 XML。HTML5
可以使用
toDataURL()
将其内容导出为 PNG 文件,并且可以在画布上绘制任何元素使用
drawImage()
,因此应该可以创建,将其绘制在画布上并导出为
data:
URL。Opera has implementation of W3C's DOM→XML serializer. In XML mode
innerHTML
returns well-formed XML in Gecko.HTML5
<canvas>
can export its content as PNG file usingtoDataURL()
and it's possible to paint any<img>
element on canvas usingdrawImage()
, so it should be possible to create<img src="data:application/svg+xml,…">
, paint it on canvas and export asdata:
URL.