提问人:Sup Acc 提问时间:9/23/2023 更新时间:9/23/2023 访问量:21
NodeJS exif 返回 undefined
NodeJS exif returns undefined
问:
我试图从我的图像中获取 exif 信息。所以我做了一些划痕。它可以工作,但在循环中使用它时不起作用
你好。我试图从我的图像中获取 exif 信息。所以我做了这个
const fs = require('fs');
const mime = require('mime');
const exif = require('exif-reader');
const ExifImage = require('exif').ExifImage;
function getFiles(dir, files = []) {
const fileList = fs.readdirSync(dir);
for (const file of fileList) {
const name = `${dir}/${file}`;
if (fs.statSync(name).isDirectory()) {
getFiles(name, files);
} else {
files.push(name);
}
}
return files;
}
function getEXIF(filepath){
try {
new ExifImage({ image : filepath }, function (error, exifData) {
if (error)
console.log('Error: '+error.message);
else
console.log(exifData.image);
});
} catch (error) {
console.log('Error: ' + error.message);
}
}
//getEXIF('D://MyTestImage.jpg')
const filearr=getFiles('D://Photoes', files = [])
filearr.forEach((element) => {
const ftype=mime.getType(element)
if (ftype=='image/jpeg'){
console.log(getEXIF(element))
}
}
);
当我为一个特定文件运行函数 getEXIF 时,它工作正常。但是当我尝试在foreach循环中使用它时,它返回undefined。为什么?。我确定该元素包含文件的路径,因为它非常适合 mime.getType 函数并返回一个值。
请指出我的错误。
答:
2赞
Robin Thomas
9/23/2023
#1
首先,您需要重构 exif 数据。由于您没有返回任何东西,因此您会得到.getEXIF()
undefined
其次,接受回调,该回调提供 作为第二个参数。ExifImage
exifData
function (error, exifData) {}
从回调中获取 并使用它来响应的最简单方法是使用 Promise。exifData
getEXIF
我们将 getEXIF 包装在一个 promise 中,然后使用 或 从回调中响应。ExifImage
reject
resolve
async function getEXIF(filepath) {
return new Promise((resolve, reject) => {
try {
new ExifImage({ image : filepath }, function (error, exifData) {
if (error)
reject(error);
else
resolve(exifData.image);
});
} catch (error) {
reject(error);
}
});
}
然后,您可以将其用作:
const exif = await getEXIF('D://MyTestImage.jpg');
console.log(exif)
评论