【问题标题】:Strip EXIF data from image从图像中去除 EXIF 数据
【发布时间】:2015-02-22 15:50:58
【问题描述】:

如何通过 javascript 从上传的图片中去除 EXIF 数据?我目前可以使用this exif-js plugin 访问 EXIF 数据,如下所示:

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

但是,我还没有找到任何方法来实际删除 Exif 数据,只能检索它。

更具体地说,我试图这样做是为了摆脱在某些浏览器上旋转我的图像的方向 Exif 数据。

【问题讨论】:

  • @alex 我目前似乎不可能使用 PHP 来完成这项任务。即使没有允许这样做的本机 Javascript 函数,插件也是可以接受的。如何编辑我的问题,使其不那么宽泛?
  • @alex,同样使用 nodejs,你想用 JS 处理它并不是那么极端。即使这个问题与此无关。

标签: javascript exif


【解决方案1】:

这是它的一个小演示,选择一个带有方向数据的图像,看看它在有和没有它的情况下看起来如何(仅限现代浏览器)。

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");
        }
    }       
}

【讨论】:

  • 有没有办法将方向替换为 1 而不是删除所有 exif 数据? @Musa
  • @danial 当然,您只需要知道方向数据在哪里并在数据视图中设置值,例如dataview.setUint16(orientationOffset, newValue)
  • 我如何知道方向数据在哪里?
  • 查找文件格式和exif format
  • 我刚刚提出了一个问题。这是一个可能的错误:stackoverflow.com/questions/41490122/…
猜你喜欢
  • 2014-12-15
  • 2013-11-17
  • 1970-01-01
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多