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 {?} */ const 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 {?} */ (resolve) => { /** @type {?} */ const img = new Image(); img.onload = (/** * @return {?} */ () => { // Check if browser supports automatic image orientation: /** @type {?} */ const 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 {?} */ const view = new DataView(base64ToArrayBuffer(imageBase64)); if (view.getUint16(0, false) != 0xFFD8) { return -2; } /** @type {?} */ const length = view.byteLength; /** @type {?} */ let offset = 2; while (offset < length) { if (view.getUint16(offset + 2, false) <= 8) return -1; /** @type {?} */ const marker = view.getUint16(offset, false); offset += 2; if (marker == 0xFFE1) { if (view.getUint32(offset += 2, false) != 0x45786966) { return -1; } /** @type {?} */ const little = view.getUint16(offset += 6, false) == 0x4949; offset += view.getUint32(offset + 4, little); /** @type {?} */ const tags = view.getUint16(offset, little); offset += 2; for (let 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 {?} */ const binaryString = atob(imageBase64); /** @type {?} */ const len = binaryString.length; /** @type {?} */ const bytes = new Uint8Array(len); for (let i = 0; i < len; i++) { bytes[i] = binaryString.charCodeAt(i); } return bytes.buffer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhpZi51dGlscy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1pbWFnZS1jcm9wcGVyLXVwZ3JhZGVkLyIsInNvdXJjZXMiOlsibGliL3V0aWxzL2V4aWYudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O01BS00sMkJBQTJCLEdBQzdCLHdFQUF3RTtJQUN4RSx3RUFBd0U7SUFDeEUsd0VBQXdFO0lBQ3hFLHdFQUF3RTtJQUN4RSx3RUFBd0U7SUFDeEUsMkRBQTJEOzs7O0FBRS9ELE1BQU0sVUFBVSx5QkFBeUI7SUFDckMsT0FBTyxJQUFJLE9BQU87Ozs7SUFBQyxDQUFDLE9BQU8sRUFBRSxFQUFFOztjQUNyQixHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUU7UUFDdkIsR0FBRyxDQUFDLE1BQU07OztRQUFHLEdBQUcsRUFBRTs7O2tCQUVSLFNBQVMsR0FBRyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDckQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQSxDQUFDO1FBQ0YsR0FBRyxDQUFDLEdBQUcsR0FBRywyQkFBMkIsQ0FBQztJQUMxQyxDQUFDLEVBQUMsQ0FBQztBQUNQLENBQUM7Ozs7O0FBRUQsTUFBTSxVQUFVLDhCQUE4QixDQUFDLHlCQUEwQztJQUNyRixJQUFJLE9BQU8seUJBQXlCLEtBQUssUUFBUSxFQUFFO1FBQy9DLHlCQUF5QixHQUFHLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0tBQzFFO0lBQ0QsUUFBUSx5QkFBeUIsRUFBRTtRQUMvQixLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztRQUN2QyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUMsQ0FBQztRQUN4QyxL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QzVDLFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLDZCQUE2QixFQUFFLEVBQUUsQ0FBQyxDQUFDOztVQUMvRCxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQzs7VUFDaEMsR0FBRyxHQUFHLFlBQVksQ0FBQyxNQUFNOztVQUN6QixLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDO0lBQ2pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDMUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDekM7SUFDRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV4aWZUcmFuc2Zvcm0gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2V4aWYtdHJhbnNmb3JtLmludGVyZmFjZSc7XG5cbi8vIEJsYWNrIDJ4MSBKUEVHLCB3aXRoIHRoZSBmb2xsb3dpbmcgbWV0YSBpbmZvcm1hdGlvbiBzZXQ6XG4vLyAtIEVYSUYgT3JpZW50YXRpb246IDYgKFJvdGF0ZWQgOTDCsCBDQ1cpXG4vLyBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL0phdmFTY3JpcHQtTG9hZC1JbWFnZVxuY29uc3QgdGVzdEF1dG9PcmllbnRhdGlvbkltYWdlVVJMID1cbiAgICAnZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwvOWovNFFBaVJYaHBaZ0FBVFUwQUtnQUFBQWdBQVFFU0FBTUFBQUFCQUFZQUFBQScgK1xuICAgICdBQUFELzJ3Q0VBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBJyArXG4gICAgJ1FFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUUnICtcbiAgICAnQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBZi9BQUJFSUFBRUFBZ01CRVFBQ0VRRURFUUgveCcgK1xuICAgICdBQktBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUxFQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVBQUFBQUFBQUFBQUFBQUFBJyArXG4gICAgJ0FBQUFBRVFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBLzlvQURBTUJBQUlSQXhFQVB3QS84SC8vMlE9PSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c0F1dG9tYXRpY1JvdGF0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGJyb3dzZXIgc3VwcG9ydHMgYXV0b21hdGljIGltYWdlIG9yaWVudGF0aW9uOlxuICAgICAgICAgICAgY29uc3Qgc3VwcG9ydGVkID0gaW1nLndpZHRoID09PSAxICYmIGltZy5oZWlnaHQgPT09IDI7XG4gICAgICAgICAgICByZXNvbHZlKHN1cHBvcnRlZCk7XG4gICAgICAgIH07XG4gICAgICAgIGltZy5zcmMgPSB0ZXN0QXV0b09yaWVudGF0aW9uSW1hZ2VVUkw7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2Zvcm1hdGlvbnNGcm9tRXhpZkRhdGEoZXhpZlJvdGF0aW9uT3JCYXNlNjRJbWFnZTogbnVtYmVyIHwgc3RyaW5nKTogRXhpZlRyYW5zZm9ybSB7XG4gICAgaWYgKHR5cGVvZiBleGlmUm90YXRpb25PckJhc2U2NEltYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICBleGlmUm90YXRpb25PckJhc2U2NEltYWdlID0gZ2V0RXhpZlJvdGF0aW9uKGV4aWZSb3RhdGlvbk9yQmFzZTY0SW1hZ2UpO1xuICAgIH1cbiAgICBzd2l0Y2ggKGV4aWZSb3RhdGlvbk9yQmFzZTY0SW1hZ2UpIHtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4ge3JvdGF0ZTogMCwgZmxpcDogdHJ1ZX07XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIHtyb3RhdGU6IDIsIGZsaXA6IGZhbHNlfTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4ge3JvdGF0ZTogMiwgZmxpcDogdHJ1ZX07XG4gICAgICAgIGNhc2UgNTogcmV0dXJuIHtyb3RhdGU6IDEsIGZsaXA6IHRydWV9O1xuICAgICAgICBjYXNlIDY6IHJldHVybiB7cm90YXRlOiAxLCBmbGlwOiBmYWxzZX07XG4gICAgICAgIGNhc2UgNzogcmV0dXJuIHtyb3RhdGU6IDMsIGZsaXA6IHRydWV9O1xuICAgICAgICBjYXNlIDg6IHJldHVybiB7cm90YXRlOiAzLCBmbGlwOiBmYWxzZX07XG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiB7cm90YXRlOiAwLCBmbGlwOiBmYWxzZX07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRFeGlmUm90YXRpb24oaW1hZ2VCYXNlNjQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyhiYXNlNjRUb0FycmF5QnVmZmVyKGltYWdlQmFzZTY0KSk7XG4gICAgaWYgKHZpZXcuZ2V0VWludDE2KDAsIGZhbHNlKSAhPSAweEZGRDgpIHtcbiAgICAgICAgcmV0dXJuIC0yO1xuICAgIH1cbiAgICBjb25zdCBsZW5ndGggPSB2aWV3LmJ5dGVMZW5ndGg7XG4gICAgbGV0IG9mZnNldCA9IDI7XG4gICAgd2hpbGUgKG9mZnNldCA8IGxlbmd0aCkge1xuICAgICAgICBpZiAodmlldy5nZXRVaW50MTYob2Zmc2V0ICsgMiwgZmFsc2UpIDw9IDgpIHJldHVybiAtMTtcbiAgICAgICAgY29uc3QgbWFya2VyID0gdmlldy5nZXRVaW50MTYob2Zmc2V0LCBmYWxzZSk7XG4gICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICBpZiAobWFya2VyID09IDB4RkZFMSkge1xuICAgICAgICAgICAgaWYgKHZpZXcuZ2V0VWludDMyKG9mZnNldCArPSAyLCBmYWxzZSkgIT0gMHg0NTc4Njk2Nikge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGl0dGxlID0gdmlldy5nZXRVaW50MTYob2Zmc2V0ICs9IDYsIGZhbHNlKSA9PSAweDQ5NDk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gdmlldy5nZXRVaW50MzIob2Zmc2V0ICsgNCwgbGl0dGxlKTtcbiAgICAgICAgICAgIGNvbnN0IHRhZ3MgPSB2aWV3LmdldFVpbnQxNihvZmZzZXQsIGxpdHRsZSk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZpZXcuZ2V0VWludDE2KG9mZnNldCArIChpICogMTIpLCBsaXR0bGUpID09IDB4MDExMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmlldy5nZXRVaW50MTYob2Zmc2V0ICsgKGkgKiAxMikgKyA4LCBsaXR0bGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgobWFya2VyICYgMHhGRjAwKSAhPSAweEZGMDApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2Zmc2V0ICs9IHZpZXcuZ2V0VWludDE2KG9mZnNldCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9BcnJheUJ1ZmZlcihpbWFnZUJhc2U2NDogc3RyaW5nKSB7XG4gICAgaW1hZ2VCYXNlNjQgPSBpbWFnZUJhc2U2NC5yZXBsYWNlKC9eZGF0YVxcOihbXlxcO10rKVxcO2Jhc2U2NCwvZ21pLCAnJyk7XG4gICAgY29uc3QgYmluYXJ5U3RyaW5nID0gYXRvYihpbWFnZUJhc2U2NCk7XG4gICAgY29uc3QgbGVuID0gYmluYXJ5U3RyaW5nLmxlbmd0aDtcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBieXRlc1tpXSA9IGJpbmFyeVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICByZXR1cm4gYnl0ZXMuYnVmZmVyO1xufVxuIl19