是否可以使用 Sharp Node 创建一个 2x2 马赛克拼图?

Is it possible to create a tile 2x2 mosaic using Sharp Node?

使用 Image Magick 我能够使用 montage 来制作这个:

使用此代码:

montage -density 300 -tile 2x0 -geometry 150x150^ -gravity center -crop 150x150+0+0 -border 0 '.$img_array.' /var/www/html/uploads/output.jpg

我想知道这是否也可以使用 Sharp,我看到了 tile 选项,但我不明白如何同时使用 4 个不同的图像。

感谢 Author,我找到了这个棘手的解决方案。

假设您想要一个固定大小为 400x400 像素的 2x2 马赛克。

在下面的示例中,我将所有图像放入 ./images/ 文件夹中。所有 4 张图片都是固定大小的 200x200 像素。

您还需要一张足以包含马赛克的背景图片。您可以为此使用任何图像,也可以使用 Sharp 调整大小。

const sharp = require('sharp');
 
sharp('./images/output4.jpg')
  .resize(400, 400)
  .toFile('bg.jpg', function(err) {
    console.log("Something wrong",err)
  });

现在您已经创建了 bg.jpg 图像,您可以 运行 这个 JavaScript:

const sharp = require('sharp');
 
sharp('./images/bg.jpg') //here call the previous generated image
  .composite([
    { input: './images/output1.jpg', gravity: 'northwest' },
    { input: './images/output2.jpg', gravity: 'northeast' },
    { input: './images/output3.jpg', gravity: 'southwest' },
    { input: './images/output4.jpg', gravity: 'southeast' },
  ])
  .toFile('combined.jpg');

以后像这样的东西会更容易(尚未实现):

 vips arrayjoin "./images/1.jpg ./images/2.jpg ./images/3.jpg ./images/4.jpg" out.jpg --across 2