Accessing JPEG EXIF rotation data in JavaScript on the client side Accessing JPEG EXIF rotation data in JavaScript on the client side javascript javascript

Accessing JPEG EXIF rotation data in JavaScript on the client side


If you only want the orientation tag and nothing else and don't like to include another huge javascript library I wrote a little code that extracts the orientation tag as fast as possible (It uses DataView and readAsArrayBuffer which are available in IE10+, but you can write your own data reader for older browsers):

function getOrientation(file, callback) {    var reader = new FileReader();    reader.onload = function(e) {        var view = new DataView(e.target.result);        if (view.getUint16(0, false) != 0xFFD8)        {            return callback(-2);        }        var length = view.byteLength, offset = 2;        while (offset < length)         {            if (view.getUint16(offset+2, false) <= 8) return callback(-1);            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);}// usage:var input = document.getElementById('input');input.onchange = function(e) {    getOrientation(input.files[0], function(orientation) {        alert('orientation: ' + orientation);    });}
<input id='input' type='file' />