我正在尝试使用Node.js gm库将两个图像叠加在一起。对于最终图像,avatar.png
需要位于bg.png
之上。这是我开始使用的代码:
const image = gm("bg.png")
.composite("avatar.png");
这样可以正常工作,但我还需要将图像移动到50
、50
的x
、y
,所以我使用了geometry()
函数:
const image = gm("bg.png")
.composite("avatar.png")
.geometry("+50+50");
下一个问题是,我需要将图像放大为200
x200
,所以我尝试了一些方法:
const image = gm("bg.png")
.composite("avatar.png")
.geometry("200x200+50+50");
这最终将bg.png
缩放为尽可能接近200
x200
,同时仍然保持图像的宽高比。由于这不起作用,我尝试了这个:
const image = gm("bg.png")
.composite("avatar.png")
.resize("200x200")
.geometry("+50+50");
这只是忽略了resize()
函数,根本没有缩放任何内容。CCD_ 14和CCD_。
如何将avatar.png
缩放为200
x200
?
看起来任何被调用的函数都只适用于构造函数中传递的映像,即使在调用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`
});
});