在node.js中使用imagemagick将svg转换为png

问题描述 投票:0回答:4

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

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

node.js imagemagick
4个回答
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的文档即可。


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();

1
投票

您还可以使用svgexport(我是它的作者):

var svgexport = require('svgexport');

svgexport.render({input: 'file.svg', output: 'file.png'}, callback);

1
投票

您还可以使用流并将结果通过管道传输到某处,而不将结果存储为临时文件。以下是从 github 存储库

获取的一些示例代码
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')
});
© www.soinside.com 2019 - 2024. All rights reserved.