4Manuals

  • PDF Cloud HOME

保存文件后,Node.js JIMP重新启动应用程序 Download

    CSS / JS-如何覆盖一个孩子而不是其他孩子的父母过渡 反应:更改方向后触发重新渲染和offsetWidth的重新计算 我的Javascript从'string'转换为'integer'或'number'无效 如何删除外部索引并合并内部json 在React Native 图片无法通过javascript刷新 如何在react图表上的datakey中操作DateTime 在Cypress中保存变量 如何从作为请求传递的输入类型数据绑定中提取数据 通过dropzone laravel通过电子邮件发送多个图像

我有一个使用JIMP的小应用程序。我的目标是在jpeg文件上添加水印。我的应用程序的主要部分工作正常,但我想为用户添加“重试”功能。现在,这部分不起作用。保存我的编辑文件之前调用重试部分

const Jimp = require('jimp');
const inquirer = require('inquirer');
const fs = require('fs');

const addTextWatermarkToImage = async function(inputFile, outputFile, text) {
  try {
    const image = await Jimp.read(inputFile);
    const font = await Jimp.loadFont(Jimp.FONT_SANS_32_BLACK);
    const textData = {
      text: text,
      alignmentX: Jimp.HORIZONTAL_ALIGN_CENTER,
      alignmentY: Jimp.VERTICAL_ALIGN_MIDDLE,
    };
    image.print(font, 10, 10, textData, image.getWidth(), image.getHeight());
    image.quality(100).write(outputFile);
  } catch (error) {
    console.log('Error. Something went wrong');
  }
};

const addImageWatermarkToImage = async function(
  inputFile,
  outputFile,
  watermarkFile
) {
  try {
    const image = await Jimp.read(inputFile);
    const watermark = await Jimp.read(watermarkFile);
    const x = image.getWidth() / 2 - watermark.getWidth() / 2;
    const y = image.getHeight() / 2 - watermark.getHeight() / 2;

    image.composite(watermark, x, y, {
      mode: Jimp.BLEND_SOURCE_OVER,
      opacitySource: 0.5,
    });

    image.quality(100).write(outputFile);
  } catch (error) {
    console.log('Error. Something went wrong');
  }
};

const prepareOutputFilename = filename => {
  const [name, ext] = filename.split('.');
  return `${name}-with-watermark.${ext}`;
};

const startApp = async () => {
  //check if user is ready
  const answer = await inquirer.prompt([
    {
      name: 'start',
      message:
        'Hi! This is "Watermar manager". Move your files to `/img` folder. Then you\'ll be able to use them in the app. Are you ready?',
      type: 'confirm',
    },
  ]);

  // if no - exit app
  if (!answer.start) process.exit();

  // ask about input file and watermark type
  const options = await inquirer.prompt([
    {
      name: 'inputImage',
      type: 'input',
      message: 'What file do you want to mark?',
      default: 'test.jpg',
    },
    {
      name: 'watermarkType',
      type: 'list',
      choices: ['Text watermark', 'Image watermark'],
    },
  ]);
  if (options.watermarkType === 'Text watermark') {
    const text = await inquirer.prompt([
      {
        name: 'value',
        type: 'input',
        message: 'Type your watermark text:',
      },
    ]);
    options.watermarkText = text.value;
    if (fs.existsSync('./img/' + options.inputImage) === true) {
      addTextWatermarkToImage(
        './img/' + options.inputImage,
        './img/' + prepareOutputFilename(options.inputImage),
        options.watermarkText
      );
    } else {
      console.log('O_o Error!!!! No such file');
    }
  } else {
    const image = await inquirer.prompt([
      {
        name: 'filename',
        type: 'input',
        message: 'Type your watermark name:',
        default: 'logo.png',
      },
    ]);
    options.watermarkImage = image.filename;
    if (
      fs.existsSync('./img/' + options.inputImage) === true &&
      fs.existsSync('./img/' + options.watermarkImage) === true
    ) {
      addImageWatermarkToImage(
        './img/' + options.inputImage,
        './img/' + prepareOutputFilename(options.inputImage),
        './img/' + options.watermarkImage
      );
    } else {
      console.log('O_o Error!!!! No such file');
    }
  }

  console.log('File was saved - now');

const retry = await inquirer.prompt([
    {
      name: 'retry',
      message: 'Do you want to try again',
      type: 'confirm',
    },
  ]);
  if (!retry.retry) process.exit();
  startApp();
};

startApp();

保存文件后,我想重新运行此应用程序。现在

const retry = await inquirer.prompt([
    {
      name: 'retry',
      message: 'Do you want to try again',
      type: 'confirm',
    },
  ]);
  if (!retry.retry) process.exit();
  startApp();

这部分代码在保存文件之前运行,这可能会引起一些问题。 关于如何处理此问题有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您正在使用await语句(addImageWatermarkToImage,addImageWatermarkToImage)调用很少的异步方法。使用await并进行检查。



Similar searches
    Camelot Python如何添加文件路径 Cosmos Gremlin查询的奇怪执行行为 使用Firebase和angular进行基于角色的身份验证 将静态PDF文件添加到nuxt js项目 音频Web API将MediaStreamSource记录到AudioNode以进行循环