Можно ли прочитать геолокацию изображений с помощью ng-file-upload? - PullRequest
0 голосов
/ 25 февраля 2020

Мне интересно, можно ли прочитать метаданные Exif, которые прикреплены к файлам изображений, для чтения геолокации с помощью библиотеки ng-file-upload.

Существуют варианты (например, ngf-fix- ориентации), которые используют метаданные объекта 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 до того, как она будет потеряна?

Если нет, какие обходные пути рекомендуются?

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

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, et c ...

0 голосов
/ 25 февраля 2020

Кажется, библиотека не может получить ваши метаданные EXIF. Есть много открытых вопросов по этому поводу, но обычно это должно поддерживаться ( этот, например ).

Вы можете попробовать использовать exif-js для получения ваших изображений EXIF метаданные перед дальнейшей обработкой на них:

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