J'utilise 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>
Comment puis-je récupérer les métadonnées EXIF de l'image téléchargée?
J'ai essayé de l'utiliser.
HTML:
<img src="image1.jpg" id="img1" exif="true" />
JS:
console.log($("#img1").exifPretty());
Cela renvoie uniquement un ensemble vide.
J'utilise également le plugin FileReader JQuery .
Lorsque j'utilise la fonction de chargement, je reçois un fichier qui est une extension de l'objet Fichier d'origine.
on: load: function(e, file) { }
Mais comment puis-je récupérer les métadonnées EXIF?
Si vous obtenez EXIF indéfini, utilisez var EXIF = require('./exif.js');
FTW.
J'ai réussi à faire fonctionner cette bête sans astuces de magie (essai rapide et sale et résultat d'erreur):
'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); } });
Avec l'aide d'exif.js, le script suivant peut obtenir l'exif à partir de l'entrée de fichier
$('#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); });
C'est la solution:
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)); }