我正在编写一个应用程序,让用户可以使用Raphael.JS生成图像。我想要的一个次要功能是生成Raphael画布的PNG。
这是我头脑中的一般管道:
步骤4是我需要一些指导的步骤。用户可能正在使用IE;我们无法保证JS是在SVG浏览器中执行的。无论如何,我们需要在服务器端运行才能保证可靠性。所以这是我到目前为止提出的三种可能性:
所以......所有这三个选项都很糟糕。我认为。我错了什么?还有另一种方式吗?
答案 0 :(得分:3)
用wkhtmltoimage解决了这个问题。丑陋的解决方案,但它确实有效。
答案 1 :(得分:1)
在客户端上序列化SVG文档后,您只需在服务器上运行SVG渲染器和/或光栅化器即可生成PNG。我不清楚你认为JS包装器会做什么,或者为什么需要它。由于您发送的SVG文档不包含动态内容,您只需要将序列化的SVG文档发送到服务器上的光栅化器,以便将其光栅化为PNG。
SVG渲染器/光栅化器可能只是一个调用ImageMagick的CGI脚本,或者可能是更复杂的东西。就个人而言,我建议设置一个运行Apache Batik的servlet,其中包含一个SVG Rasterizer,并且可以通过编程方式调用。快速谷歌搜索表明这对于Batik来说是一项非常常见的任务:http://www.mail-archive.com/batik-users@xml.apache.org/msg06116.html
答案 2 :(得分:0)
在通过ImageMagick运行之前,您可以尝试transforming the VML to SVG on the server。我知道项目本身就是PHP,但转换是通过XSL完成的(文件在下载档案中),所以应该可以移植到任何服务器平台。