在Nodejs中使用gmresize和构图两个或多个图像

给定两个图像,比如img(大小为1024×768)的文件夹(img1.png和img2.png),我需要调整img2的大小(比如300×300),把img1放在x和y(比如100,200)的img1。 最终结果应该是1024×768大小的图像。

使用gm( https://github.com/aheckmann/gm ),试过这个:

gm('./img/img1.png') .composite('./img/img2.png') .geometry('300x300+100+200') .write('resultGM.png', (err) => { if (err) console.log(err); }); 

预计(由于整个操作链)产生300×300的图像。 然后我试了这个:

 gm('./img/img1.png') .composite( gm('./img/img2.png') .geometry('300x300+100+200') ) .write('resultGM.png', (err) => { if (err) console.log(err); }); 

希望复合函数接受缓冲区,但没有机会,它只接受文件path,并给出错误。 花了2-3个小时,读了几个post(只能在这里find一些讨论: 如何做复合gm node.js?在这里: 结合两个gm对象,同时调整其中的一个在graphicsMagick为NodeJS (这一个不回答这个问题实际上),我找不到任何解决scheme在内存中使用stream或缓冲区执行此操作。写入临时文件时可以执行此操作。是否有任何人可以在内存中find解决scheme调整和合并图像?

使用ImageMagick而不是GraphicMagic;

经过几个小时的search终于find了如何合并两个图像调整和重新sorting图层位置(上,下,等)使用gm。

先来看看这个图片:

在这里输入图像说明

几分钟后,挖掘ImageMagick的撰写帮助页面,我看到了DstOver定位的用法。

http://www.imagemagick.org/Usage/compose/#dstover

所以,我已经尝试下面的代码,它的工作就像一个魅力!

 imageMagick(background) .composite(image) .in('-compose', 'Dst_Over') .in('-geometry', '253x253+15+15') .write(output, function (err) { if (err) console.error(err); else console.log('Compose OK!'); }); 

最后,我可以做到这一点,在这里,我发布任何人可能需要它的参考:

 gm() .in('-geometry', '+0+0') .in('./img/img1.png') .in('-geometry', '300x300+100+200') .in('./img/img2.png') .flatten() .write('resultGM.png', function (err) { if (err) console.log(err); });