UNPKG

@e-group/utils

Version:

eGroup team utils that share across projects.

64 lines (53 loc) 1.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = getOrientation; /** * Get orientation of image. * https://stackoverflow.com/questions/7584794/accessing-jpeg-exif-rotation-data-in-javascript-on-the-client-side/32490603#32490603 * * @param {File} file image file prepare for uplaod */ function getOrientation(file) { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = function (e) { try { const view = new DataView(e.target.result); if (view.getUint16(0, false) !== 0xffd8) { return resolve(-2); } const length = view.byteLength; let offset = 2; while (offset < length) { if (view.getUint16(offset + 2, false) <= 8) return resolve(-1); const marker = view.getUint16(offset, false); offset += 2; if (marker === 0xffe1) { if (view.getUint32(offset += 2, false) !== 0x45786966) { return resolve(-1); } const little = view.getUint16(offset += 6, false) === 0x4949; offset += view.getUint32(offset + 4, little); const tags = view.getUint16(offset, little); offset += 2; for (let i = 0; i < tags; i++) { if (view.getUint16(offset + i * 12, little) === 0x0112) { return resolve(view.getUint16(offset + i * 12 + 8, little)); } } } else if ((marker & 0xff00) !== 0xff00) { break; } else { offset += view.getUint16(offset, false); } } return resolve(-1); } catch (error) { reject(error); } }; reader.readAsArrayBuffer(file); }); }