使用node js Sharp包复合功能没有给出动画结果

问题描述 投票:0回答:1

我使用discord.js创建了一个简单的程序,我想要的是将静止图像与包含动画帧的图像组合起来,然后机器人将在一张图像中发送动画图像的结果和静止图像的背景。

const Discord = require('discord.js');
const sharp = require('sharp');
const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES"] });

client.on('messageCreate', async message => {
    if (message.content === '!merge') {
        const background = await sharp('logo.png').resize(288, 288);
        const overlay = await sharp('banana.gif').resize(288, 288);

        const result = await background.composite([{ input: await overlay.toBuffer(), gravity: 'center' }]).toBuffer();

        message.channel.send({ files: [result] });
    }
});

client.login('your-token');

但是结果并不成功,它发送的是静态图像,没有GIF格式的动画帧。
我试图寻找一个包裹,但没有找到任何东西。

希望有人能帮助我们,谢谢。

node.js merge discord.js gif sharp
1个回答
0
投票

为了创建动画图像,您必须告诉 Sharp 对合成结果进行动画处理。

根据文档,复合的默认行为是具有默认值animated = false。所以你要做的就是告诉它哪些图像是动画的。

更改此行

const result = await background.composite([{ input: await overlay.toBuffer(), gravity: 'center' }]).toBuffer();


const result = await background.composite([{ input: await overlay.toBuffer(), gravity: 'center', animated: true }]).toBuffer();

请注意覆盖输入的 animated: true 声明。

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.