我试图使用lib discord.js为我的不和谐机器人设置图像处理设置。我从命令中抓取了args [0],并将该文本添加到图像上,保存,发送,然后用fs删除它。这是我的代码:
const Jimp = require('jimp');
const fs = require('fs');
module.exports = {
// Information
name: 'test',
aliases: [],
description: "test af.",
usage: "<args>",
args: {
req: true,
min: 1,
},
// Function
run: async (client, command, msg, args) => {
Jimp.read("img/brain.jpg").then(function(image){
Jimp.loadFont(Jimp.FONT_SANS_32_BLACK).then(function (font) {
image.resize(542, 767);
image.print(font, 16, 22, args[0]);
image.write('brain.jpg');
});
});
await msg.channel.send({
files: [
"brain.jpg"
]
});
fs.unlinkSync('brain.jpg');
}
}
我们遇到的问题是,在执行命令并添加参数时,例如:&#34; .test argshere&#34;它在图像上打印文本并保存,但是当它试图发送图像时,它说它无法在该目录中找到它,但如果我进入该文件夹它就在那里。我相信它在它甚至还没有保存之前就试图发送。我试过等待打印,写入和msg.channel.send,但似乎没有任何效果。
我也想问一下如何添加一个&#34;文本框&#34;在图像上,所以如果一行中有太多字母,文本将会转到另一行,因为我不希望文本超过模因。这是下图: brain image meme
答案 0 :(得分:0)
使用两个回调来编写文件,然后在放回将在回调之前运行的代码之后立即执行。这是一个异步问题。如果你在写函数之后放了发送代码,这应该可以解决你的问题。
run: async (client, command, msg, args) => {
Jimp.read("img/brain.jpg").then(function(image) {
Jimp.loadFont(Jimp.FONT_SANS_32_BLACK).then(function(font) {
image.resize(542, 767);
image.print(font, 16, 22, args[0]);
image.write('brain.jpg');
});
});
// brain.jpg doesn't exist until the second callback from above is run.
await msg.channel.send({
files: [
"brain.jpg"
]
});
fs.unlinkSync('brain.jpg');
}
答案 1 :(得分:0)
您应该给出图像应保存在哪个文件夹中的位置。您必须使用 public 文件夹,其中应该有保存图像的图像文件夹
所以代码将是
image.write("public/image/brain.png");
在它之前,如果你使用 express 你应该写
const express = require('express');
const app = express();
app.use(express.static("public"));
所以在这里我们告诉我们的服务器我们正在使用公共文件夹