将多个图像添加到画布中

Posted

技术标签:

【中文标题】将多个图像添加到画布中【英文标题】:Adding multiple images into a canvas 【发布时间】:2019-10-17 12:11:32 【问题描述】:

我正在尝试创建一个包含信息的“横幅”,包括图像。

横幅如下所示:

图片会放在圆圈上,然后文字会放在其他区域。

我的尝试失败了,因为创建了一个空图像。

const  createCanvas, loadImage  = require('canvas');
    const canvas = createCanvas(901, 231)
    const ctx = canvas.getContext('2d');
    const ctxAvatar = canvas.getContext('2d');
    const ctxSkin = canvas.getContext('2d');
    loadImage('assets/images/avatar.png').then(avatar => 
        ctxAvatar.drawImage(avatar, 50, 0, 70, 70);
        loadImage('assets/images/banner.png').then(banner => 
            ctx.drawImage(avatar, 50, 0, 70, 70);
            ctx.drawImage(banner, 50, 0, 70, 70);
        );
    );
    const output = canvas.toBuffer();

我做错了什么?

【问题讨论】:

这有点难测试,你的节点代码是否生成了一个带有canvas元素的html页面?控制台中的图像是否出现 404 错误?我将从分离两个 loadImage 调用开始,以便您可以分别测试它们。此外,ctxAvatar 和 ctxSkin 是相同的。为什么要使用“toBuffer”? 不,这里没有附加网络服务器。我还使用 toBuffer 将图像上传到不和谐客户端(discord.js) 现在的问题是你的问题不完整。您加载和绘制图像似乎没问题,因此在您的过程中出现了其他问题。您必须提供最低限度的工作代码示例,以便其他人可以复制您的问题。 【参考方案1】:

这应该可行:

const canvas = createCanvas(901, 231)
const ctx = canvas.getContext('2d');
const ctxAvatar = canvas.getContext('2d');
const ctxSkin = canvas.getContext('2d');
loadImage('assets/images/avatar.png').then(avatar => 
    ctxAvatar.drawImage(avatar, 50, 0, 70, 70);
    loadImage('assets/images/banner.png').then(banner => 
        ctx.drawImage(banner, 50, 0, 70, 70);
        const output = canvas.toBuffer();
    );
);

const output = canvas.toBuffer(); 应该在里面

【讨论】:

以上是关于将多个图像添加到画布中的主要内容,如果未能解决你的问题,请参考以下文章

如何在画布元素中添加超链接到图像?

如何将多个图像绘制到单个画布上?

将图像动态添加到画布

使用 FabricJs 在同一画布上裁剪多个图像

如何将图像添加到织物画布?

java将图像添加到画布