【问题标题】:Retrieve EXIF Image Meta Data from HTML5 FileApi loaded Image?从 HTML5 FileApi 加载的图像中检索 EXIF 图像元数据?
【发布时间】:2013-09-24 12:24:24
【问题描述】:

我正在使用 HTML5 File API & FileReader

HTML:

<div id="holder"></div> 

JS:

<script>
var holder = document.getElementById('holder'),
    state = document.getElementById('status');

if (typeof window.FileReader === 'undefined') {
  state.className = 'fail';
} else {
  state.className = 'success';
  state.innerHTML = 'File API & FileReader available';
}

holder.ondragover = function () { this.className = 'hover'; return false; };
holder.ondragend = function () { this.className = ''; return false; };
holder.ondrop = function (e) {
  this.className = '';
  e.preventDefault();

  var file = e.dataTransfer.files[0],
      reader = new FileReader();
  reader.onload = function (event) {
    console.log(event.target);
    holder.style.background = 'url(' + event.target.result + ') no-repeat center';
  };
  console.log(file);
  reader.readAsDataURL(file);

  return false;
};
</script>

如何从上传的图片中检索 EXIF 元数据?

我尝试使用this

HTML:

<img src="image1.jpg" id="img1" exif="true" />

JS:

console.log($("#img1").exifPretty());

这只会返回一个空集。

我也使用FileReader JQuery Plugin

当我使用加载函数时,我得到一个文件,它是原始 File 对象的扩展名。

on:
    load: function(e, file) { }

但是如何从中检索 EXIF 元数据?

【问题讨论】:

  • @Andreas 我使用 FileReader JQuery 插件来检索文件:github.com/bgrins/filereader.js 我有一个文件对象,但我无法获取元数据。请参阅我的问题更新。可以发个答案吗?
  • 在您的示例中,您没有使用 FileReader 插件,所以您是否尝试过链接 SO 问题的解决方案?使用FileReader 中的.readAsBinaryString,将此字符串包装到BinaryFile(包含在EXIF 库中)将此对象提供给EXIF.readFromBinaryFile(binaryFileObject)

标签: javascript jquery html filereader


【解决方案1】:

如果您的 EXIF 未定义,请使用 var EXIF = require('./exif.js'); FTW。

我设法让那只野兽在没有魔术的情况下工作(快速而肮脏的试验和错误结果):

'use strict';
var EXIF = require('./exif.js');

$(function() {
    $('#fileinput').on('change', function(){
       var files = this.files,
           i=0;
        for(i=0; i<files.length;++i){
            previewImage(this.files[i]);
        }
    });
    function previewImage(file) {
        var gallery = $('#gallery'),
            thumb = null,
            img = null,
            reader= null;
        if(!file.type.match('image/*')){
            throw 'File type must be an image';
        }

        thumb = $('<div />',{class: 'thumbnail'}).appendTo(gallery);
        img = $('<img />');
        reader = new FileReader();
        reader.onload = function(e){
            img.prop('src',reader.result);
            // important for exif-js! Set src attribute after calling img.prop
            img.src = img.prop('src');
            img.appendTo(thumb);
            EXIF.getData(img, function() {
                console.log(EXIF.pretty(img));
            });
        };
        reader.readAsDataURL(file);
    }

});

【讨论】:

    【解决方案2】:

    在 exif.js 的帮助下,以下脚本可以从文件输入中获取 exif

    $('#imageupload').change(function(){
        var file = this.files[0];
        var reader = new FileReader();
        reader.onload = function(e) {
    
            var exif = EXIF.readFromBinaryFile(this.result);
            console.log(exif);
    
    
         }
    
         reader.readAsArrayBuffer(file);
    
    
    });
    

    【讨论】:

      【解决方案3】:

      这是解决方案:

      on:
          load: function(event, file) {
          // get image meta data
          var base64 = event.target.result.replace(/^.*?,/,'');
          var binary = atob(base64);
          var exif = EXIF.readFromBinaryFile(new BinaryFile(binary));
      }
      

      【讨论】:

      • 我不知道为什么它说“ReferenceError: exif is not defined”,即使我添加了 jquery.exif.js。
      • 我认为这个答案需要 exif-js 依赖,因此您收到的 EXIF 未定义错误:github.com/exif-js/exif-js(也就是说这不是一个很好的答案,请检查这个答案:stackoverflow.com/questions/10341685/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 2017-09-11
      • 2019-02-28
      • 2015-12-31
      • 1970-01-01
      • 2012-10-15
      相关资源
      最近更新 更多