我正在寻找一种在 nodejs 中使用 imagemagick https://github.com/rsms/node-imagemagick 将 SVG 转换为 PNG 的方法,而不需要将生成的 PNG 存储在本地文件系统中的临时文件中。
很遗憾,我无法做到这一点。并且我在互联网上也没有找到示例。有人可以给我一个例子吗?
很遗憾,我无法做到这一点。并且我在互联网上也没有找到示例。有人可以给我一个例子吗?
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的文档。我找到了我需要的东西。基本上,我发现如何将数据传输到转换执行的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();
var svgexport = require('svgexport');
svgexport.render({input: 'file.svg', output: 'file.png'}, callback);
您还可以使用流并将结果管道传输到某个地方,而无需将结果存储为临时文件。以下是一些示例代码,取自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%