Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Node/gm将SVG字符串转换为PNG输出_Javascript_Node.js_Imagemagick - Fatal编程技术网

Javascript 使用Node/gm将SVG字符串转换为PNG输出

Javascript 使用Node/gm将SVG字符串转换为PNG输出,javascript,node.js,imagemagick,Javascript,Node.js,Imagemagick,我想获取一个SVG字符串并将PNG输出到浏览器。我看了几个帖子: 我可以输出png,但不能输出svg。我可以很好地将svg写入一个文件,只是不能流式传输 以下是我所拥有的: var gm = require('gm'); var im = gm.subClass({ imageMagick: true }); var inputsvg = 'public/test.svg'; var inputpng = 'public/test.png'; // works im(inputsvg).wr

我想获取一个SVG字符串并将PNG输出到浏览器。我看了几个帖子:

我可以输出png,但不能输出svg。我可以很好地将svg写入一个文件,只是不能流式传输

以下是我所拥有的:

var gm = require('gm');
var im = gm.subClass({ imageMagick: true });

var inputsvg = 'public/test.svg';
var inputpng = 'public/test.png';

// works
im(inputsvg).write(output, function(err){
  if (!err) console.log('image converted.');
});

// works
im(inputpng).write(output, function(err){
  if (!err) console.log('image converted.');
});


res.set('Content-Type', 'image/png'); 

// works
im(inputpng).stream(function (err, stdout, stderr) {
  stdout.pipe(res);
});

// does not work - no errors given.
im(inputsvg).stream(function (err, stdout, stderr) {
  stdout.pipe(res);
});
好的,明白了

var svg = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><svg width="840" height="430"  xmlns="http://www.w3.org/2000/svg" version="1.1"><rect width="300" height="100" style="fill:rgb(0,0,255);stroke-width:1;stroke:rgb(0,0,0)" /></svg>';

var buf = new Buffer(svg);
res.set('Content-Type', 'image/png');
gm(buf, 'svg.svg').stream('png', function (err, stdout, stderr) {
  stdout.pipe(res);
});
var svg='';
var buf=新缓冲区(svg);
res.set('Content-Type','image/png');
gm(buf,'svg.svg').stream('png',function(err,stdout,stderr){
标准管道(res);
});
一些要点:

  • xml行必须在那里
  • svg标记中必须提供宽度和高度
  • stream()函数需要格式参数('png')

希望这能帮助别人。

非常感谢!正是我需要的。