【发布时间】:2016-10-13 15:40:33
【问题描述】:
我需要一些帮助,我可以在 JavaScript 中处理以下任务: 我有一个应用程序,使用 Jimp 用于图像处理和节点精灵生成器。这一切都在 node.js 上下文中运行。我将一些图像加载到 Jimp,用图像制作一些东西,然后使用 nodejs 文件模块将其写回我的文件系统。然后我会将新创建的图像粘贴到 node-sprite-generator。问题是,此时并非所有图像都被创建/写入。虽然创建 spritesheet 的代码在 Jimp 返回后立即运行,但我认为 Jimp 会处理所有图像并返回一个承诺。结果是,创建 spritesheet 的代码被执行但堆栈没有完成。
我尝试使用 fs.stat() 和属性 mtime 来测试文件是否已写入
if (stat.mtime.getTime() === prev.mtime.getTime())
但是,当此时未创建文件时,可能会发生错误。另外:当图像的路径当前不可用时,我需要一种方法来检查图像是否完全通过处理写入。
function resize(img) {
Jimp.read(img.path).then(function (err, file) {
if (err) throw err;
file.resize(200, 200)
.quality(70)
.write(newPath); //newPath for simplicity
});
}
function rec(imgObjArray) {
if(_.isEmpty(imgObjArray)) return;
resize(imgObjArray.pop());
//correct mistake in function call from fn() to rec()
rec(imgObjArray);
}
rec(imgObjArray); //imgObjArray === [img,img,img....]
//nsg() does not work because not all images are written at this time
nsg({
src: [
'out/images/desktop/*.jpg'
],
spritePath: 'out/images/desktop/sprite.jpg',,
compositor: 'jimp'
}, function (err) {
console.log('Sprite generated!');
})
我认为首先我必须检查图像是否存在于给定路径中,然后检查是否写入完成。但是,当我使用 fs.access(path[, mode], callback) 进行 fn 并且此时未创建文件时,出现错误。
【问题讨论】:
-
如果你有一个承诺,你需要在第一个动作完成后使用它来执行下一个动作。查看您的代码或至少其中一部分您正在转换任务的代码会很有帮助,以提供有关如何修复它的任何有用指导。
-
我也是这么想的,所以我为 jimp 队列创建了一个 then() 函数,其中包含 fn-call 以执行 sprite-sheet 代码。但我遇到了同样的问题。
-
您需要向我们展示您的代码。有关代码的问题必须在您的问题中包含相关代码。如果您向我们展示代码,我们可能会在几分钟内提供帮助。
标签: javascript node.js