jimp没有发送保存的图像

时间:2018-04-16 06:29:01

标签: node.js image-manipulation discord.js

我试图使用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

2 个答案:

答案 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"));

所以在这里我们告诉我们的服务器我们正在使用公共文件夹