首页 > 解决方案 > Node.js GraphicsMagick - 将 2 个图像连同位置和尺寸组合在一起

问题描述

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

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

这按它应该的方式工作,但我还需要将图像移动到一个x, yof 50, 50,所以我使用了这个geometry()函数:

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

下一个问题是我需要将图像放大到200x 200,所以我尝试了一些方法来做到这一点:

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

这最终缩放bg.png到尽可能接近200x 200,同时仍然保留图像的纵横比。由于这不起作用,我尝试了这个:

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

这只是忽略了该resize()功能,根本没有缩放任何东西。交换的顺序,resize()geometry()没有做任何事情。

我怎样才能缩放avatar.png200x 200

标签: javascriptnode.jsimage-processinggraphicsmagickgm

解决方案


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

您必须单独进行处理:

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);
      });
  });

祝你好运!


推荐阅读