使用Node.js和GraphicsMagick将四个图像拼接在一起

我有四个256×256 px图像:a.jpg,b.jpg,c.jpg和d.jpg。 我想将它们合并在一起产生2×2的马赛克图像。 由此产生的图像也应该是256×256像素。

喜欢这个:

+---+---+ | a | b | +---+---+ | c | d | +---+---+ 

使用普通的GraphicsMagick和命令行,这可以完成

 gm convert -background black \ -page +0+0 a.jpg \ -page +256+0 b.jpg \ -page +0+256 c.jpg \ -page +256+256 d.jpg \ -minify \ -mosaic output.jpg 

但问题是,如何在Node.js中使用GraphicsMagick ?

 gm('a.jpg') .append('b.jpg') .append('c.jpg') .append('d.jpg') .write('output.jpg', function (err) {}) // Produces 1x4 mosaic with dimensions 256x1024 px, not what I wanted 

find解决scheme! gm的公共API似乎没有提供我需要的任何适当的方法。 解决scheme是使用非公开的.in方法,这使得插入自定义GraphicsMagick参数成为可能。

下面的代码取四个256×256的图像,将它们合并到512x512canvas上的2×2网格,使用快速线性插值将大小减半到256×256,并将结果保存到output.jpg。

 var gm = require('gm'); // abcd -> ab // cd gm() .in('-page', '+0+0') // Custom place for each of the images .in('a.jpg') .in('-page', '+256+0') .in('b.jpg') .in('-page', '+0+256') .in('c.jpg') .in('-page', '+256+256') .in('d.jpg') .minify() // Halves the size, 512x512 -> 256x256 .mosaic() // Merges the images as a matrix .write('output.jpg', function (err) { if (err) console.log(err); });