2016-02-28 58 views
0

我想使用GraphicsMagick在内存中调整图像大小,Node.js使用gm包。在内存中调整GraphicsMagick图像的大小

我想:

const gm = require("gm"); 

gm("octocat.jpg").resize(240, 240).size(function (err, data) { 
    console.log(err || data); 
    // => { width: 896, height: 896 } 
}); 

我想,gm在存储器内存储初始文件数据,并准备选择运行gm过程。

但是,我如何调整内存中的对象,并获得新的缓冲区(.toPNGBuffer)和大小为调整大小的图像?

+0

你已经知道从调整新的大小,不是吗? – Shanoor

+0

其实好点...原来,toBuffer(“PNG”,fn)'返回调整大小的图像缓冲区 - 这是完美的。稍后我可以使用它创建一个新图像:'gm(pngBuffer).size(...)'将返回调整大小的图像大小。你可以发表一个答案:)谢谢! –

回答

0

尝试使用节点帆布:https://github.com/Automattic/node-canvas

node-canvas extends the canvas API to provide interfacing with node, 
for example streaming PNG data, converting to a Buffer instance, etc. 

实施例:

fs.readFile(__dirname + '/images/squid.png', function(err, squid){ 
    if (err) throw err; 
    img = new Image; 
    img.src = squid; 
    ctx.drawImage(img, 0, 0, img.width/4, img.height/4); 
}); 

而且,帆布是3倍ImageMagic更快

你可以尝试比较Node.js的模块图像处理 - https://github.com/ivanoff/images-manipulation-performance

author's results: 
    canvas.js : 4.001 img/sec; 
    gm-imagemagic.js : 1.206 img/sec; 
    gm.js : 1.536 img/sec; 
    lwip.js : 0.406 img/sec;