是否可以使用 ng-file-upload 读取图像的地理位置?

Is it possible to read the geolocation of images using ng-file-upload?

我想知道,是否可以使用 ng-file-upload 库读取附加到图像文件的 Exif 元数据来读取地理定位。

有些选项(例如 ngf-fix-orientation)利用了 Exif 对象的元数据。但是,选择文件后,它不再包含任何exif信息。

我试过了:

ngf-before-model-change="beforeChange($files)"

与:

$scope.beforeChange = function(files){ console.log('BeforeChangefiles', files); };

结果如下:

0: File name: "IMG_5277.JPG" lastModified: 1559123113000 lastModifiedDate: Wed May 29 2019 11:45:13 GMT+0200 (Mitteleuropäische Sommerzeit) {} webkitRelativePath: "" size: 3741545 type: "image/jpeg" $ngfBlobUrl: "blob:http://localhost/630d0c34-07a1-4f41-81fd-e2cf021cbf65" $ngfWidth: 4032 $ngfHeight: 3024

此时 Exif 信息似乎已经丢失。

是否有可能在丢失之前访问 exif 信息?

如果不是,建议采用哪些解决方法?

图书馆似乎无法检索您的 EXIF 元数据。有很多未解决的问题,但通常应该支持它 (this one for example)。

您可以尝试使用 exif-js 在对图像进行进一步处理之前检索图像的 EXIF 元数据:

EXIF.getData(yourImg, function() {
    var allMetaData = EXIF.getAllTags(this);
    var allMetaDataSpan = document.getElementById("allMetaDataSpan");
    allMetaDataSpan.innerHTML = JSON.stringify(allMetaData, null, "\t");
});

JPEG 可能包含嵌入的 EXIF 片段,其中可能包含 GPS 坐标。它们很容易提取。虽然我不推荐 exif-js,因为它多年来一直没有维护,有没有人响应的错误和堆积问题。

我会推荐 exifr,它也可以很好地将 GPS 转换为简单值(原始形式存储在 4 个单独的标签中)

// fancy async syntax
let {latitude, longitude} = await exifr.gps('./myimage.jpg')

// older promise syntax
exifr.gps(arrayBuffer).then(gps => {
  console.log(gps.latitude, gps.longitude)
})

输入可以是任何东西。 URL、ArrayBuffer、Blob 等...