【问题标题】:Jimp : how to use new filename as parameter of write function?Jimp:如何使用新文件名作为写入函数的参数?
【发布时间】:2018-04-05 22:23:02
【问题描述】:

我正在使用 NodeJS 的 Jimp 模块在我的(大)nodejs 脚本中在我的文件名是动态生成的大循环内进行一些图像转换。

在进行我的 jimp 图像转换时,提供给写入函数参数的文件名已经更改。因为写入在回调中(所以是另一个线程?),我的循环已经在继续处理另一个循环步骤。

这是一个示例概述:

for (var i = 0; i < 10; ++i) {
    var filename = 'test' + i + '.png';
    //some script to generate my image : pupperteer screenshot of a webpage

    Jimp.read(filename).then(function (image) {
        image.greyscale().write(filename);
    }).catch(function (err) {
        console.error(err);
    });
}

在这个例子中,我的脚本创建了彩色文件 test1.png,然后我可以看到一个 test2.png,它是 test1.png 的副本,但是是灰度的... 然后它被一个名为的新彩色图像覆盖test2.png。

所以我想知道如何解决这个问题? 在多线程中完全可以,那么如何使用“文件名”字符串的副本在写入函数的参数中使用它?

问候

亚历克斯

【问题讨论】:

    标签: node.js


    【解决方案1】:

    用 let 代替 var

    let filename = 'test' + i + '.png';
    

    【讨论】:

      【解决方案2】:

      您遇到了异步问题。我认为您可以创建一个方法并将文件名作为参数发送。例如:

      for (var i = 0; i < 10; ++i) {
          let filename = 'test' + i + '.png';
          //some script to generate my image : pupperteer screenshot of a webpage
          _saveImg(filename);
      }
      
      function _saveImg(name) {
          const filename = name;
          Jimp.read(filename).then(function (image) {
              image.greyscale().write(filename);
          }).catch(function (err) {
              console.error(err);
          });
      }
      

      =)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-31
        • 2012-05-06
        • 2017-06-30
        • 2020-12-03
        相关资源
        最近更新 更多