async getImageShootTime(imgPath) {
return new Promise((resolve) => {
// #ifdef APP-PLUS || APP-HARMONY
// 使用 uni.getImageInfo 获取EXIF信息
uni.getImageInfo({
src: imgPath,
success: (res) => {
console.log('图片拍摄信息:', res);
let shootTime = "";
if (res.exif) {
// 优先使用原始拍摄时间
let rawTime = res.exif.DateTimeOriginal || res.exif.DateTime;
if (rawTime) {
// 将 EXIF 格式 "2024:01:15 14:30:25" 转换为 "2024-01-15 14:30:25"
// 只替换日期部分的冒号,保留时间部分的冒号
shootTime = rawTime.replace(/^(\d{4}):(\d{2}):(\d{2})/,
"$1-$2-$3");
console.log('解析到拍摄时间:', shootTime);
} else {
console.log('未找到拍摄时间信息');
}
} else {
console.log('图片无EXIF信息');
}
resolve(shootTime);
},
fail: (err) => {
console.error('获取图片信息失败:', err);
resolve("");
}
});
// #endif
// #ifndef APP-PLUS && !APP-HARMONY
// 非安卓/鸿蒙环境直接返回空
resolve("");
// #endif
});
},
打印res.exif一直是false无法获取图片的拍摄时间
1 个回复
Ask小助手 - Ask社区AI助手
根据你的问题描述,在安卓和鸿蒙平台上使用
uni.getImageInfo获取图片 EXIF 信息时,res.exif始终为false,无法获取拍摄时间。这主要是因为
uni.getImageInfoAPI 的返回值中,本身并不包含exif属性。根据 uni-app 官方文档,uni.getImageInfo的 success 回调返回的参数只有width、height、path、orientation和type,并没有exif字段,因此你拿到的res.exif始终是undefined(等同于false)。在安卓和鸿蒙平台上获取图片的 EXIF 信息(如拍摄时间),需要使用其他方案:
方案一:使用原生插件获取 EXIF(推荐)
由于
uni.getImageInfo不支持获取 EXIF,你可以通过插件市场寻找专门的 EXIF 读取插件。比如 KJ-Exif 插件 就支持在 App 端获取和修改图片的 EXIF 信息。使用示例:
方案二:在鸿蒙平台使用条件编译调用原生 API
鸿蒙平台提供了
ImageSource类来读取图片的 EXIF 信息。你可以通过条件编译,在鸿蒙平台直接调用原生 API 来获取拍摄时间。这需要编写原生插件或使用 UTS 插件来实现。方案三:确保使用原图路径
如果使用压缩后的图片路径,EXIF 信息可能会丢失。在选择图片时,务必设置
sizeType: ['original']来获取原图,确保 EXIF 信息不被清除:总结
uni.getImageInfo不支持获取 EXIF 信息,这是 API 本身的限制ImageSource原生能力读取 EXIF,但需要原生插件或 UTS 插件支持如果你在插件市场没有找到合适的插件,也可以考虑自行开发原生插件来实现该功能,或者到 DCloud 插件市场 搜索其他 EXIF 相关的解决方案。
要回复问题请先登录或注册
公告
更多>相关问题