2012-04-16 39 views
2

是否可以导出Kinetic JS对象到SVG?将KinteticJS导出为SVG?

解决方法是将Kintetic JS的画布转换为SVG。

编辑:

最好是使用fabricJS,因为它支持画布渲染SVG与面料对象工作时。

我接受了Phrogz的答案,因为它也可以将canvas转换为svg,而无需使用其他库来绘制画布。编辑2:好吧,我搞砸了,Phrogz的图书馆是围绕画布元素的包装,所以你用它的方法画在画布上(我认为它只是'侦听'在画布上,并创建SVG路径)。所以最好的解决方案是fabricJS。

+0

Kinect是一个HTML5 Canvas库。 HTML5 Canvas是一种位图格式(有时候使用类似矢量的命令)。 SVG是一种矢量格式。最简单的答案是获取画布的输出并将其用作SVG文件中的图像。你真的想做什么? – Phrogz 2012-04-16 17:07:55

+0

Thx,但这不是一个选项,因为我需要SVG路径,而不是基于64位的png,因为之后的文件大小。 – vale4674 2012-04-16 18:16:11

+0

您是否仅包含可捕获的路径命令的画布图形?你可以改变填充画布的JS的来源吗? – Phrogz 2012-04-16 18:25:28

回答

0

basicly可以在画布转换为Base64 PNG,然后把它放在SVG

也许这可以帮助你

http://svgkit.sourceforge.net/tests/canvas_tests.html

+0

Thx,但这不是一个选项,因为我需要SVG路径,而不是base64 png,因为之后的文件大小。 - vale4674刚刚编辑 – vale4674 2012-04-16 18:16:39

+0

呃......就我所知,你所能做的只是将图像嵌入png中,但对于纯粹的svg,你可能需要先进的工具才能将图像追踪到路径 – chepe263 2012-04-16 18:22:37

+0

好吧,我会尝试其他的东西,然后。 – vale4674 2012-04-16 18:53:53

4

我创建an alpha version of a library,使您可以扩展一个HTML5画布上下文,以便跟踪所有矢量绘图命令并将它们存储为上下文的ctx.svgObjects属性中的数组SVG元素。

你可以看到这里的行动库:http://phrogz.net/svg/HTML5CanvasRecordsSVG.html
演示打开记录,绘制了几个形状HTML5的Canvas,然后追加“记录” SVG对象的SVG容器隔壁。

一般而言库:

  1. 经由SVGMatrix对象跟踪当前上下文变换。 (这是因为HTML5上下文API允许你设置当前变换到一个矩阵,但不会让你得到当前矩阵)。它通过像translate()rotate()并相应地更新矩阵拦截来电做到这一点。
  2. 拦截beginPath()并创建一个新的SVG Path元素,然后拦截更多命令,如moveTo()lineTo(),以将等效路径命令添加到SVG路径。
    • 注意:在撰写本文时,并非所有路径命令都支持或在库中进行过测试。
  3. 截获fill()stroke()到当前SVG <path>的副本添加到svgObjects阵列,设置当前变换矩阵,填充和中风样式。
    • 注意:在撰写本文时,不支持所有笔划样式(lineCap,lineJoin,miterLimit)。
    • 注意:调用fill()后跟stroke()会创建两个独立的SVG元素;没有优化来区分这种特定情况与笔画/填充,或更改调用之间的变换或路径。
  4. 截获fillRect()strokeRect()创建SVG <rect>元件。

更多的工作可以在这个库进行充实的所有命令(不只是路径命令,但还搞什么fillText())。但这不是我个人需要的东西,所以我不想花费数小时的时间把它带到终点线上。

+0

这很酷:o – david 2012-04-17 00:38:59

+0

您应该用参数调用cloneNode来确定是否需要浅层或深层克隆。当缺少参数时,gecko似乎做了深入的克隆,而webkit做了浅层克隆,Opera引发了一个异常。 – 2012-04-17 10:46:43

+0

@ErikDahlström啊,好点,谢谢。我经常忘记FF在这方面的挑剔。固定。 – Phrogz 2012-04-17 12:42:36