Подтвердить что ты не робот

HTML/Javascript Доступ к данным EXIF ​​перед загрузкой файлов

Я пытаюсь извлечь данные EXIF ​​ из изображения (jpeg), которое было перетащено в браузер или было выбрано через элемент ввода файла html.

Мне удалось просмотреть изображение в браузере, используя FileReader and FileReader.readAsDataURL как описано здесь.

и я нашел библиотеку EXIF ​​, которая позволяет извлекать EXIF-данные изображения через javascript. Но для меня это работает, только если я использую его с обычными тегами img, которые загружают их содержимое по URL-адресу.

Я также нашел этот вопрос в StackOverflow, где принятый ответ утверждает, что это просто невозможно.

Но я уверен, что это можно реализовать, потому что 500px.com извлекает данные EXIF ​​сразу после добавления файла для загрузки и прежде чем загрузка будет завершена.

Некоторые идеи о том, как можно извлечь данные EXIF ​​из кодированного изображения base64, которое я получаю из FileReader?

4b9b3361

Ответ 1

Наконец-то я нашел решение на стороне клиента для проблемы:

  • Прочитайте файл с помощью FileReader и метода .readAsBinaryString
  • Затем сверните эту двоичную строку в объект BinaryFile, который уже включен в EXIF ​​Library
  • Наконец вызовите EXIF.readFromBinaryFile(binaryFileObject);

и его выполнение:)

Ответ 2

jQuery-fileExif Библиотека javascript считывает изображения exif-данных перед загрузкой.
ссылка GitHub, пример jsfiddle из библиотеки.

var someCallback = function(exifObject) {

    $('#cameraModel').val(exifObject.Model);
    $('#lat').val(exifObject.GPSLatitude);
    $('#lng').val(exifObject.GPSLongitude);
    // Uncomment the line below to examine the
    // EXIF object in console to read other values
    //console.log(exifObject);

  }

      try {
        $('#file').change(function() {
            $(this).fileExif(someCallback);
        });
      }
      catch (e) {
        alert(e);
      }

Ответ 3

Посмотрите на код FxIF firefox extension. Он читает exif-данные, используя только JavaScript. Чтобы прочитать содержимое файла, вы можете использовать FileReader API современных браузеров.