EXIF.js获取图片信息

问题描述

使用exif.js来获取图片的方向信息报错了,有的图片出现的下面的错误,有的图片能过够获取到图片的方向信息

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

        EXIF.getData(element, function () {
            var direction = EXIF.getTag(this, 'Orientation');
            PictureCompression(element, index, direction); // 图片压缩的函数
        })

浏览器抛出的异常

阅读 3.9k
1 个回答

是EXIF.js库本身的问题,在解析分辨率大于600dpi的图片时就会出现这个问题,到目前为止还没有解决,看这里。如果只是想获取图片的方向的话,可以使用以下代码:

getOrientation = function (file, callback) {
    var reader = new window.FileReader();
    reader.onload = function (e) {

        var view = new window.DataView(e.target.result);
        if (view.getUint16(0, false) != 0xFFD8) {
            return callback(-2);
        }
        var length = view.byteLength, offset = 2;
        while (offset < length) {
            var marker = view.getUint16(offset, false);
            offset += 2;
            if (marker == 0xFFE1) {
                if (view.getUint32(offset += 2, false) != 0x45786966) {
                    return callback(-1);
                }
                var little = view.getUint16(offset += 6, false) == 0x4949;
                offset += view.getUint32(offset + 4, little);
                var tags = view.getUint16(offset, little);
                offset += 2;
                for (var i = 0; i < tags; i++) {
                    if (view.getUint16(offset + (i * 12), little) == 0x0112) {
                        return callback(view.getUint16(offset + (i * 12) + 8, little));
                    }

                }
            } else if ((marker & 0xFF00) != 0xFF00) {
                break;
            } else {
                offset += view.getUint16(offset, false);
            }
        }
        return callback(-1);
    };
    reader.readAsArrayBuffer(file);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题