【问题标题】:Discord.js sending base64 encoded image to channelDiscord.js 将 base64 编码图像发送到通道
【发布时间】:2021-04-16 22:34:01
【问题描述】:

我已经在这工作了好几天了,我坚持到了最后一部分。 正如标题所示,我的创作收到了一个 base64 编码的图像。然后它将其加载到缓冲区中并尝试将其发送到这样的通道:

sfbuffer = new Buffer.from(base64_img, "base64");
const finalattach = new Discord.MessageAttachment(sfbuffer);
message.channel.send(finalattach);

它确实发送了缓冲区,但它总是导致this

加载的 base64 数据示例

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAEA and so on...

我尝试使用文件选项发送它(甚至没有发送),并使用 .setimage 和 .attachfiles 作为嵌入,两者都产生相同的结果。请我在这个问题上敲我的头。所有的谷歌链接都是紫色的,我不知道还能做什么 D:

【问题讨论】:

  • 如果您下载该图像,它实际上是否正确显示?
  • 这让我更加困惑。拿了一个示例 base64 图像并将其放入通用转换器中,但它不起作用。看着它,即使我用.replace('"', '')删除了它们,最后还是有一个语音标记
  • 您是否尝试过使用为它制作的在线工具对其进行解码? base64.guru/converter/decode/image
  • 抱歉没有更清楚。我把机器人得到的输出放到一个工具中来解码base64 pngs(它们总是pngs),但它没有用。我看了看,发现应该用上述方法去除多余的语音标记。删除语音标记使其正确解码

标签: node.js discord.js


【解决方案1】:

试试这样的:

replyMessage.Attachments.Add(new Attachment()
{
     ContentUrl = $"data:image/jpeg;base64,{Convert.ToBase64String(bdata)}"
});

This 帖子正在回答类似的问题。

【讨论】:

【解决方案2】:

图像缓冲区不应包含 data:image/png;base64, 部分。只有非人类可读的数据

在逗号处拆分base64字符串,将其作为缓冲区加载到附件中并发送附件,例如

const sfbuff = new Buffer.from(base64_img.split(",")[1], "base64");
const sfattach = new Discord.MessageAttachment(sfbuff, "output.png");
message.channel.send(sfattach)

即使我想通了,如果没有 Aviv lo,我也无法做到 谢谢大家:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 2015-08-20
    • 2020-11-23
    相关资源
    最近更新 更多