我需要一些帮助,了解如何在JavaScript中处理以下任务:
我有一个应用程序,使用Jimp进行图像处理和node-sprite-generator。这一切都在node.js上下文中运行。我将几张图片加载到Jimp中,对图像进行某些操作,然后使用nodejs文件模块将其写回到我的文件系统中。然后,我会将新创建的图像粘贴到node-sprite-generator中。问题是,并非所有图像都在此时创建/编写。虽然用于创建精灵表的代码在Jimp返回后立即运行,但我认为Jimp正在处理所有图像并返回一个承诺。结果是,用于创建精灵表的代码被执行,但堆栈尚未完成。
但是有时候会出现错误,当文件在这个时候没有被创建。另外:我需要一种方法来检查图像是否已经完全写入,并处理当图像路径当前不可用的情况。
我尝试使用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)创建一个函数时,如果此时文件尚未创建,我会收到错误信息。