在服务器上使用纯JavaScript将SVG呈现为PNG

在服务器上使用纯JavaScript将SVG呈现为PNG,javascript,node.js,png,Javascript,Node.js,Png,标题说明了这一点。我知道Imagemagick可以做到这一点,但让我们假设我所在的云服务器只允许我使用JavaScript(咳嗽)。事实上,这不是一件坏事 最近我听说javascript中有h.264渲染器,所以png并没有那么牵强?不幸的是,javascript中所有可用的高级渲染都是通过HTML5画布的浏览器实现的。NodeJS缺少这些特性 NodeJS有一些扩展,可以让您进行图像处理,但只有在主机安装它们的情况下,您才能使用这些扩展 (只要求 imagemagick已安装) PNG渲染

标题说明了这一点。我知道Imagemagick可以做到这一点,但让我们假设我所在的云服务器只允许我使用JavaScript(咳嗽)。事实上,这不是一件坏事


最近我听说javascript中有h.264渲染器,所以png并没有那么牵强?

不幸的是,javascript中所有可用的高级渲染都是通过HTML5画布的浏览器实现的。NodeJS缺少这些特性

NodeJS有一些扩展,可以让您进行图像处理,但只有在主机安装它们的情况下,您才能使用这些扩展

  • (只要求 imagemagick已安装)
PNG渲染器并非遥不可及,事实上它已经存在:

这里的问题是,您需要一个“假画布”实现,它不绘制任何东西,只构建一个像素阵列,然后可以保存到PNG。没有比这更好的了,因为除了这个案子,它是没用的

i、 例如:svg->位图渲染器(假画布)->rgb数组->png文件

一些托管提供程序将允许您声明系统级依赖项,或者提供一些默认值。就这一目的而言,这是可行的:

gm = require('gm')

gm('image.svg').write('image.png', function(err){
  if (!err) console.log('image converted.')
})

显然,您可以在机器上安装imagemagick/graphicsmagick,并且还可以使用IM。问问nodester的家伙,他们很可能有一个图形库可用。

有一个svg2png,它使用无头浏览器将SVG渲染为png


不确定是否有帮助,但Canvas可以生成PNG。不过,我不确定SVG和画布配合得有多好。您可以使用类似于在画布上渲染SVG的项目,然后从画布上转换为PNG。我甚至会直接在画布上使用SVG,但我担心这是一种效率低下的方式。将SVG发送给客户端是一个好主意吗,使用它们的
转换为PNG,然后在游戏反动画中使用png?如果客户端已经可以呈现SVG并且有一个画布元素,为什么要将其转换为png?知道你想做什么会有帮助。让服务器调用游戏动画听起来很慢。我想这样做:我的玩家可以从SVG预设中创建一个角色。然后,这就是我的想法,当播放器完成后,服务器将获取参数,组装预置,并将其转换为一个完整的PNG,缓存在数据库中。我想这样做是因为像素图像的绘制速度比SVG快。我预计一个玩家的
上会同时出现20种不同的图像。@Scán如果你只是想优化性能,你第一条评论中的想法会很好:使用fabric.js或类似的东西在画布上渲染SVG,保存位图数据(在内存中,不需要png),并将其用于动画。一定要对它进行彻底的测试,SVG中有些东西速度更快,特别是在iOS上。这篇文章应该会让您感兴趣:node有假的画布模块。@从这个意义上说,可用的画布库不是“假的”。它们都依赖于外部图形库来渲染画布。我的意思是,您需要一个用JS编写的2d渲染器。npm包
sharp
现在就可以做到这一点——可能已经晚了10年:P它仍然使用外部非JS库来工作,但它会为您安装它们。99%的情况下,这应该是足够的那些需要PhantomJs,打破javascript只requirement@Jaime你也许可以用Puppeter来做,从技术上讲,它不仅仅是“javascript”,但它的工作原理与它的工作原理一样。i、 大多数地方无论如何都会接受