UNPKG

ngx-image-cropper-upgraded

Version:
120 lines 12.8 kB
/** * @fileoverview added by tsickle * Generated from: lib/utils/exif.utils.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ // Black 2x1 JPEG, with the following meta information set: // - EXIF Orientation: 6 (Rotated 90° CCW) // Source: https://github.com/blueimp/JavaScript-Load-Image /** @type {?} */ var testAutoOrientationImageURL = 'data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAA' + 'AAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA' + 'QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE' + 'BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/x' + 'ABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAA' + 'AAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q=='; /** * @return {?} */ export function supportsAutomaticRotation() { return new Promise((/** * @param {?} resolve * @return {?} */ function (resolve) { /** @type {?} */ var img = new Image(); img.onload = (/** * @return {?} */ function () { // Check if browser supports automatic image orientation: /** @type {?} */ var supported = img.width === 1 && img.height === 2; resolve(supported); }); img.src = testAutoOrientationImageURL; })); } /** * @param {?} exifRotationOrBase64Image * @return {?} */ export function getTransformationsFromExifData(exifRotationOrBase64Image) { if (typeof exifRotationOrBase64Image === 'string') { exifRotationOrBase64Image = getExifRotation(exifRotationOrBase64Image); } switch (exifRotationOrBase64Image) { case 2: return { rotate: 0, flip: true }; case 3: return { rotate: 2, flip: false }; case 4: return { rotate: 2, flip: true }; case 5: return { rotate: 1, flip: true }; case 6: return { rotate: 1, flip: false }; case 7: return { rotate: 3, flip: true }; case 8: return { rotate: 3, flip: false }; default: return { rotate: 0, flip: false }; } } /** * @param {?} imageBase64 * @return {?} */ function getExifRotation(imageBase64) { /** @type {?} */ var view = new DataView(base64ToArrayBuffer(imageBase64)); if (view.getUint16(0, false) != 0xFFD8) { return -2; } /** @type {?} */ var length = view.byteLength; /** @type {?} */ var offset = 2; while (offset < length) { if (view.getUint16(offset + 2, false) <= 8) return -1; /** @type {?} */ var marker = view.getUint16(offset, false); offset += 2; if (marker == 0xFFE1) { if (view.getUint32(offset += 2, false) != 0x45786966) { return -1; } /** @type {?} */ var little = view.getUint16(offset += 6, false) == 0x4949; offset += view.getUint32(offset + 4, little); /** @type {?} */ var tags = view.getUint16(offset, little); offset += 2; for (var i = 0; i < tags; i++) { if (view.getUint16(offset + (i * 12), little) == 0x0112) { return view.getUint16(offset + (i * 12) + 8, little); } } } else if ((marker & 0xFF00) != 0xFF00) { break; } else { offset += view.getUint16(offset, false); } } return -1; } /** * @param {?} imageBase64 * @return {?} */ function base64ToArrayBuffer(imageBase64) { imageBase64 = imageBase64.replace(/^data\:([^\;]+)\;base64,/gmi, ''); /** @type {?} */ var binaryString = atob(imageBase64); /** @type {?} */ var len = binaryString.length; /** @type {?} */ var bytes = new Uint8Array(len); for (var i = 0; i < len; i++) { bytes[i] = binaryString.charCodeAt(i); } return bytes.buffer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhpZi51dGlscy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1pbWFnZS1jcm9wcGVyLXVwZ3JhZGVkLyIsInNvdXJjZXMiOlsibGliL3V0aWxzL2V4aWYudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0lBS00sMkJBQTJCLEdBQzdCLHdFQUF3RTtJQUN4RSx3RUFBd0U7SUFDeEUsd0VBQXdFO0lBQ3hFLHdFQUF3RTtJQUN4RSx3RUFBd0U7SUFDeEUsMkRBQTJEOzs7O0FBRS9ELE1BQU0sVUFBVSx5QkFBeUI7SUFDckMsT0FBTyxJQUFJLE9BQU87Ozs7SUFBQyxVQUFDLE9BQU87O1lBQ2pCLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRTtRQUN2QixHQUFHLENBQUMsTUFBTTs7O1FBQUc7OztnQkFFSCxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3JELE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUEsQ0FBQztRQUNGLEdBQUcsQ0FBQyxHQUFHLEdBQUcsMkJBQTJCLENBQUM7SUFDMUMsQ0FBQyxFQUFDLENBQUM7QUFDUCxDQUFDOzs7OztBQUVELE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyx5QkFBMEM7SUFDckYsSUFBSSxPQUFPLHlCQUF5QixLQUFLLFFBQVEsRUFBRTtRQUMvQyx5QkFBeUIsR0FBRyxlQUFlLENBQUMseUJBQXlCLENBQUMsQ0FBQztLQUMxRTtJQUNELFFBQVEseUJBQXlCLEVBQUU7UUFDL0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUM7UUFDdkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFDLENBQUM7UUFDeEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxP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QUFDLE9BQU8sQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLENBQUMsQ0FBQzs7UUFDL0QsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7O1FBQ2hDLEdBQUcsR0FBRyxZQUFZLENBQUMsTUFBTTs7UUFDekIsS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQztJQUNqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3pDO0lBQ0QsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFeGlmVHJhbnNmb3JtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9leGlmLXRyYW5zZm9ybS5pbnRlcmZhY2UnO1xuXG4vLyBCbGFjayAyeDEgSlBFRywgd2l0aCB0aGUgZm9sbG93aW5nIG1ldGEgaW5mb3JtYXRpb24gc2V0OlxuLy8gLSBFWElGIE9yaWVudGF0aW9uOiA2IChSb3RhdGVkIDkwwrAgQ0NXKVxuLy8gU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9KYXZhU2NyaXB0LUxvYWQtSW1hZ2VcbmNvbnN0IHRlc3RBdXRvT3JpZW50YXRpb25JbWFnZVVSTCA9XG4gICAgJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsLzlqLzRRQWlSWGhwWmdBQVRVMEFLZ0FBQUFnQUFRRVNBQU1BQUFBQkFBWUFBQUEnICtcbiAgICAnQUFBRC8yd0NFQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQScgK1xuICAgICdRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFJyArXG4gICAgJ0JBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQWYvQUFCRUlBQUVBQWdNQkVRQUNFUUVERVFIL3gnICtcbiAgICAnQUJLQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFMRUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFBQUFBQUFBQUFBQUFBQScgK1xuICAgICdBQUFBQUVRRUFBQUFBQUFBQUFBQUFBQUFBQUFBQS85b0FEQU1CQUFJUkF4RUFQd0EvOEgvLzJRPT0nO1xuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNBdXRvbWF0aWNSb3RhdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBicm93c2VyIHN1cHBvcnRzIGF1dG9tYXRpYyBpbWFnZSBvcmllbnRhdGlvbjpcbiAgICAgICAgICAgIGNvbnN0IHN1cHBvcnRlZCA9IGltZy53aWR0aCA9PT0gMSAmJiBpbWcuaGVpZ2h0ID09PSAyO1xuICAgICAgICAgICAgcmVzb2x2ZShzdXBwb3J0ZWQpO1xuICAgICAgICB9O1xuICAgICAgICBpbWcuc3JjID0gdGVzdEF1dG9PcmllbnRhdGlvbkltYWdlVVJMO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhbnNmb3JtYXRpb25zRnJvbUV4aWZEYXRhKGV4aWZSb3RhdGlvbk9yQmFzZTY0SW1hZ2U6IG51bWJlciB8IHN0cmluZyk6IEV4aWZUcmFuc2Zvcm0ge1xuICAgIGlmICh0eXBlb2YgZXhpZlJvdGF0aW9uT3JCYXNlNjRJbWFnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZXhpZlJvdGF0aW9uT3JCYXNlNjRJbWFnZSA9IGdldEV4aWZSb3RhdGlvbihleGlmUm90YXRpb25PckJhc2U2NEltYWdlKTtcbiAgICB9XG4gICAgc3dpdGNoIChleGlmUm90YXRpb25PckJhc2U2NEltYWdlKSB7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIHtyb3RhdGU6IDAsIGZsaXA6IHRydWV9O1xuICAgICAgICBjYXNlIDM6IHJldHVybiB7cm90YXRlOiAyLCBmbGlwOiBmYWxzZX07XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIHtyb3RhdGU6IDIsIGZsaXA6IHRydWV9O1xuICAgICAgICBjYXNlIDU6IHJldHVybiB7cm90YXRlOiAxLCBmbGlwOiB0cnVlfTtcbiAgICAgICAgY2FzZSA2OiByZXR1cm4ge3JvdGF0ZTogMSwgZmxpcDogZmFsc2V9O1xuICAgICAgICBjYXNlIDc6IHJldHVybiB7cm90YXRlOiAzLCBmbGlwOiB0cnVlfTtcbiAgICAgICAgY2FzZSA4OiByZXR1cm4ge3JvdGF0ZTogMywgZmxpcDogZmFsc2V9O1xuICAgICAgICBkZWZhdWx0OiByZXR1cm4ge3JvdGF0ZTogMCwgZmxpcDogZmFsc2V9O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0RXhpZlJvdGF0aW9uKGltYWdlQmFzZTY0OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYmFzZTY0VG9BcnJheUJ1ZmZlcihpbWFnZUJhc2U2NCkpO1xuICAgIGlmICh2aWV3LmdldFVpbnQxNigwLCBmYWxzZSkgIT0gMHhGRkQ4KSB7XG4gICAgICAgIHJldHVybiAtMjtcbiAgICB9XG4gICAgY29uc3QgbGVuZ3RoID0gdmlldy5ieXRlTGVuZ3RoO1xuICAgIGxldCBvZmZzZXQgPSAyO1xuICAgIHdoaWxlIChvZmZzZXQgPCBsZW5ndGgpIHtcbiAgICAgICAgaWYgKHZpZXcuZ2V0VWludDE2KG9mZnNldCArIDIsIGZhbHNlKSA8PSA4KSByZXR1cm4gLTE7XG4gICAgICAgIGNvbnN0IG1hcmtlciA9IHZpZXcuZ2V0VWludDE2KG9mZnNldCwgZmFsc2UpO1xuICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgaWYgKG1hcmtlciA9PSAweEZGRTEpIHtcbiAgICAgICAgICAgIGlmICh2aWV3LmdldFVpbnQzMihvZmZzZXQgKz0gMiwgZmFsc2UpICE9IDB4NDU3ODY5NjYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxpdHRsZSA9IHZpZXcuZ2V0VWludDE2KG9mZnNldCArPSA2LCBmYWxzZSkgPT0gMHg0OTQ5O1xuICAgICAgICAgICAgb2Zmc2V0ICs9IHZpZXcuZ2V0VWludDMyKG9mZnNldCArIDQsIGxpdHRsZSk7XG4gICAgICAgICAgICBjb25zdCB0YWdzID0gdmlldy5nZXRVaW50MTYob2Zmc2V0LCBsaXR0bGUpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhZ3M7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh2aWV3LmdldFVpbnQxNihvZmZzZXQgKyAoaSAqIDEyKSwgbGl0dGxlKSA9PSAweDAxMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDE2KG9mZnNldCArIChpICogMTIpICsgOCwgbGl0dGxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hcmtlciAmIDB4RkYwMCkgIT0gMHhGRjAwKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9mZnNldCArPSB2aWV3LmdldFVpbnQxNihvZmZzZXQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQXJyYXlCdWZmZXIoaW1hZ2VCYXNlNjQ6IHN0cmluZykge1xuICAgIGltYWdlQmFzZTY0ID0gaW1hZ2VCYXNlNjQucmVwbGFjZSgvXmRhdGFcXDooW15cXDtdKylcXDtiYXNlNjQsL2dtaSwgJycpO1xuICAgIGNvbnN0IGJpbmFyeVN0cmluZyA9IGF0b2IoaW1hZ2VCYXNlNjQpO1xuICAgIGNvbnN0IGxlbiA9IGJpbmFyeVN0cmluZy5sZW5ndGg7XG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShsZW4pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgYnl0ZXNbaV0gPSBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ5dGVzLmJ1ZmZlcjtcbn1cbiJdfQ==