我正在尝试使用lib discord.js为我的一个不和谐的机器人设置图像处理。我从命令中获取参数,并将该文本添加到图像中,保存、发送,然后使用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');
}
}我们的问题是,当执行命令并添加参数时,例如:".test argshere“它打印图像上的文本并保存它,但当它试图发送图像时,它会说在那个目录中找不到它,但如果我进入文件夹,它就在那里。我相信它甚至在保存之前就已经尝试发送了。我试着等待打印、写入和msg.channel.send,但似乎都不起作用。
我还想问一下如何在图像上添加一种“文本框”,这样如果一行中有太多字母,文本就会转到另一行,因为我不想让文本通过memes。这是下图:brain image meme
发布于 2018-04-20 11:28:15
您使用两个回调函数来编写文件,然后紧接着放入将在回调函数之前运行的代码。这是一个异步问题。如果你把发送代码放在你的write函数后面,就可以解决你的问题了。
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');
}发布于 2020-12-28 00:21:07
您应该提供图像应保存在哪个文件夹中的位置。您必须使用公用文件夹,其中应包含保存图像的图像文件夹
因此代码将是
image.write("public/image/brain.png");在它之前,如果你使用的是express,你应该写
const express = require('express');
const app = express();
app.use(express.static("public"));因此,我们在这里告诉我们的服务器,我们正在使用公共文件夹
https://stackoverflow.com/questions/49850812
复制相似问题