3

我在 nodejs 中搜索一种方法,在 imagemagick https://github.com/rsms/node-imagemagick的帮助下将 svg 转换为 png ,而不将生成的 png 存储在本地文件系统上的临时文件中。

不幸的是,我无法做到这一点。而且我没有在互联网上找到示例。有人可以给我一个例子吗?

4

4 回答 4

3

o我找到了我要找的东西。基本上,我想出了如何将数据通过管道传输到转换执行的 std::in 中。这使我可以在不访问本地文件系统的情况下转换图像。

这是我的演示代码:

var im = require('imagemagick');
var fs = require('fs');

var svg = fs.readFileSync('/somepath/svg.svg', 'utf8');                

var conv = im.convert(['svg:-', 'png:-'])
conv.on('data', function(data) {
  console.log('data');
  console.log(data);
}); 
conv.on('end', function() {
  console.log('end');
});                                                                                
conv.stdin.write(svg);
conv.stdin.end();
于 2012-12-13T07:18:12.333 回答
3
var im = require('imagemagick');
var fs = require('fs');
im.convert(['foo.svg', 'png:-'], 
function(err, stdout){
  if (err) throw err;
  //stdout is your image
  //just write it to file to test this:
   fs.writeFileSync('test.png', stdout,'binary');
});

它只是将“原始”参数抛出到命令行convert,所以对于更多问题,只需查看 convert 的文档。

于 2012-12-12T18:23:53.877 回答
1

你也可以使用svgexport(我是它的作者):

var svgexport = require('svgexport');

svgexport.render({input: 'file.svg', output: 'file.png'}, callback);
于 2015-01-13T05:49:25.233 回答
1

您还可以使用流并将结果传输到某处,而无需将结果存储为临时文件。下面是一些来自github repo的示例代码

var fs = require('fs');

im.resize({
  srcData: fs.readFileSync('kittens.jpg', 'binary'),
  width:   256,
  format:  'png'
}, function(err, stdout, stderr){
  if (err) throw err
  fs.writeFileSync('kittens-resized.png', stdout, 'binary');  // change this part
  console.log('resized kittens.jpg to fit within 256x256px')
});

顺便说一句:你的接受率是 0%

于 2012-12-12T18:17:11.997 回答