Last active
September 23, 2018 07:53
-
-
Save eJayYoung/c8a28383da9e8bc731879982dd37186e to your computer and use it in GitHub Desktop.
获取图片旋转方向
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment