2013-04-08 51 views
2

我想要一個SVG字符串並輸出一個PNG到瀏覽器。我看了幾個帖子:SVG字符串到PNG輸出使用節點/ gm

我可以輸出一個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); 
}); 

回答

7

好了它。

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

一些要點:

  • 的XML線路必須有
  • 的寬度和高度必須在SVG標籤
  • 流()函數所需要的格式參數(被提供'png')

希望能幫助別人。

+0

非常感謝!正是我需要的。 – 2014-10-03 01:08:25