2014-12-24 16 views
13

Come rimuovere i dati EXIF ​​da un'immagine caricata tramite javascript? Sono attualmente in grado di accedere ai dati EXIF ​​utilizzando this exif-js plugin, in questo modo:Striscia dati EXIF ​​dall'immagine

EXIF.getData(oimg, function() { 
    var orientation = EXIF.getTag(this, "Orientation"); 
}); 

Tuttavia, non ho trovato alcun modo per rimuovere effettivamente i dati Exif, solo per recuperarla.

In particolare, sto cercando di farlo per eliminare i dati Exif di orientamento che ruotano la mia immagine su determinati browser.

+0

@alex Attualmente non sembra possibile per me di utilizzare PHP per questo compito. Anche se non esiste una funzione Javascript nativa che permetta questo, un plugin sarebbe accettabile. Come posso modificare la mia domanda per essere meno ampia? –

+0

@alex, anche con nodejs, non è così estremo che vorresti gestirlo con JS. Anche se questa domanda non riguarda questo. – fejese

risposta

17

Ecco una piccola dimostrazione di esso, selezionare un'immagine con dati di orientamento per vedere come appare e con esso (solo browser moderni).

http://jsfiddle.net/mowglisanu/frhwm2xe/3/

<input id="erd" type="file"/> 
var input = document.querySelector('#erd'); 
input.addEventListener('change', load); 
function load(){ 
    var fr = new FileReader(); 
    fr.onload = process; 
    fr.readAsArrayBuffer(this.files[0]); 
    window.open(URL.createObjectURL(this.files[0]), "_blank", "toolbar=yes, scrollbars=yes, resizable=yes, top=500, left=500, width=400, height=400"); 
} 
function process(){ 
    var dv = new DataView(this.result); 
    var offset = 0, recess = 0; 
    var pieces = []; 
    var i = 0; 
    if (dv.getUint16(offset) == 0xffd8){ 
     offset += 2; 
     var app1 = dv.getUint16(offset); 
     offset += 2; 
     while (offset < dv.byteLength){ 
      console.log(offset, '0x'+app1.toString(16), recess); 
      if (app1 == 0xffe1){ 

       pieces[i] = {recess:recess,offset:offset-2}; 
       recess = offset + dv.getUint16(offset); 
       i++; 
      } 
      else if (app1 == 0xffda){ 
       break; 
      } 
      offset += dv.getUint16(offset); 
      var app1 = dv.getUint16(offset); 
      offset += 2; 
     } 
     if (pieces.length > 0){ 
      var newPieces = []; 
      pieces.forEach(function(v){ 
       newPieces.push(this.result.slice(v.recess, v.offset)); 
      }, this); 
      newPieces.push(this.result.slice(recess)); 
      var br = new Blob(newPieces, {type: 'image/jpeg'}); 
      window.open(URL.createObjectURL(br), "_blank", "toolbar=yes, scrollbars=yes, resizable=yes, top=500, left=500, width=400, height=400"); 
     } 
    }  
} 
+2

C'è un modo per sostituire l'orientamento con 1 invece di rimuovere tutti i dati exif? @Musa – danial

+0

@danial sicuro, devi solo sapere dove sono i dati di orientamento e impostare il valore nella visualizzazione dati, ad esempio 'dataview.setUint16 (orientationOffset, newValue)' – Musa

+0

Come faccio a sapere dove sono i dati di orientamento? – danial

Problemi correlati