Exif情報読み取り


JavascriptでExifタグ情報を読込。

exif.js でjpeg専用
https://github.com/ajalabox/exifjs

まあ基本jpegで十分か。
本当はExif 2.1のGPS IFDは南緯と西経あるから考慮しなきゃ駄目だが、サーバ側に投げずに
ユーザ確認後にアップロードと言うシナリオが取れるのは良いかも。

以下動作実験
http://jpusergis.site44.com/ExitJs.html

L.Control.InputFile = L.Control.extend({
    onAdd: function (map) {
      var container = L.DomUtil.create('div', '');
      var input = L.DomUtil.create('input', '', container);
      input.type = 'file';
      input.multiple = 'multiple';
      input.accept = 'image/*';

      L.DomEvent.on(input, 'change', this._handleFileSelect, this);
      this._input = input;
      return container;
    },
    onRemove: function (map) {
      this._input.style.diplay = 'none';
    },
    _handleFileSelect: function (evt) {
      var files = evt.target.files;
      for (var i = 0, f; f = files[i]; i++) {
        var reader = new FileReader;
        //var exifData = Exif.readFromBinaryFile(f);
        reader.onload = function () {
          try {
            var exifData = Exif.loadFromArrayBuffer(reader.result);
            var gps = exifData.gpsifd;
            if (typeof gps === "undefined") {
              throw "GPS data is unavailable.";
            } else {
              var t = function (b, a) { return a + b / 60; };
              lat = gps.latitude.reduceRight(t) * (gps.latitudeRef.indexOf("N") >= 0 ? 1 : -1);
              lng = gps.longitude.reduceRight(t) * (gps.longitudeRef.indexOf("E") >= 0 ? 1 : -1);
              console.log(lat + " , " + lng);
              var marker = L.marker([lat, lng]).addTo(map);
              map.panTo([lat, lng]);
            }
          } catch (e) {
            alert(e);
          }
        };
        reader.readAsArrayBuffer(f);
      }
    }
  });
  L.control.inputFile = function (options) {
    return new L.Control.InputFile(options);
  };
カテゴリー: 開発 タグ: パーマリンク