2014-12-24 33 views
13

如何通过JavaScript去除上传图像中的EXIF数据?我现在能够访问使用this exif-js plugin的EXIF数据,如:从图像中剥离EXIF数据

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

不过,我还没有发现任何方式实际删除Exif数据中,仅进行检索。

更具体地说,我试图做到这一点摆脱Exif的数据,在特定的浏览器上旋转我的图像。

+0

@alex目前,它似乎并不可能,我使用PHP这项任务。即使没有原生Javascript功能允许,插件也是可以接受的。我如何编辑我的问题不那么宽泛? –

+0

@alex,还有nodejs,你不想用JS处理这个问题。即使这个问题不是这个问题。 – fejese

回答

17

这是一个小小的演示,选择一个带有方向数据的图像,看看它是如何外观的(无现代浏览器)。

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

​​3210
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

有没有办法用1替换方向,而不是删除所有的exif数据? @Musa – danial

+0

@danial当然,你只需要知道方向数据的位置,并在数据视图中设置值,如'dataview.setUint16(orientationOffset,newValue)' – Musa

+0

如何知道方向数据的位置? – danial