Node.js GraphicsMagick-组合2个图像以及位置和尺寸



我正在尝试使用Node.js gm库将两个图像叠加在一起。对于最终图像,avatar.png需要位于bg.png之上。这是我开始使用的代码:

const image = gm("bg.png")
.composite("avatar.png");

这样可以正常工作,但我还需要将图像移动到5050xy,所以我使用了geometry()函数:

const image = gm("bg.png")
.composite("avatar.png")
.geometry("+50+50");

下一个问题是,我需要将图像放大为200x200,所以我尝试了一些方法:

const image = gm("bg.png")
.composite("avatar.png")
.geometry("200x200+50+50");

这最终将bg.png缩放为尽可能接近200x200,同时仍然保持图像的宽高比。由于这不起作用,我尝试了这个:

const image = gm("bg.png")
.composite("avatar.png")
.resize("200x200")
.geometry("+50+50");

这只是忽略了resize()函数,根本没有缩放任何内容。CCD_ 14和CCD_。

如何将avatar.png缩放为200x200

看起来任何被调用的函数都只适用于构造函数中传递的映像,即使在调用composite之后也是如此。

您必须单独进行处理:

gm("bg.png")
.geometry("+50+50")
.toBuffer('PNG', function(err, buffer) {
if (err) return handle(err);
console.log('done!');
gm(buffer, 'image.png')
.composite('avatar.png')
.geometry("200x200+50+50!")
.write('output.png', function(err) {
console.log(err);
});
});

祝你好运!

正如Josh H在回答中所说,看起来我需要单独调整avatar.png的大小,然后用bg.png组合它。这是我的最后一个代码:

gm("avatar.png")
.resize(200, 200)
.write("resizedAvatar.png", () => {
gm("bg.png")
.composite("resizedAvatar.png")
.geometry("+50+50")
.toBuffer("PNG", (err, buffer) => {
// do whatever with `buffer`
});
});

最新更新