Jimp:如何使用新的文件名作为写函数的参数?

时间:2018-04-05 13:56:39

标签: node.js

我正在使用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。

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

此致

亚历

2 个答案:

答案 0 :(得分:2)

使用let而不是var

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

答案 1 :(得分:0)

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

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);
    });
}

=)