使用Node.js中的ImageMagick将SVG转换为PNG

3
我正在寻找一种在 nodejs 中使用 imagemagick https://github.com/rsms/node-imagemagick 将 SVG 转换为 PNG 的方法,而不需要将生成的 PNG 存储在本地文件系统中的临时文件中。
很遗憾,我无法做到这一点。并且我在互联网上也没有找到示例。有人可以给我一个例子吗?
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

我找到了我需要的东西。基本上,我发现如何将数据传输到转换执行的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
这会抛出一个错误:TypeError: 'null'不是一个对象(在评估“input.height”时) - makeitmorehuman
@HarisurRehman 如果您在Github上提交了一个带有详细信息和示例的问题,我可能可以帮助解决它。 - Ali Shakiba

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%


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接