UNPKG

ng7-pica

Version:

Angular module to resize images files in browser

89 lines (88 loc) 10.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Injectable } from '@angular/core'; import * as EXIF from 'exif-js'; export class NgxPicaExifService { /** * @param {?} image * @return {?} */ getExifOrientedImage(image) { return new Promise((resolve, reject) => { EXIF.getData((/** @type {?} */ (image)), () => { /** @type {?} */ const allExifMetaData = EXIF.getAllTags(image); /** @type {?} */ const exifOrientation = allExifMetaData.Orientation; if (exifOrientation) { if (!/^[1-8]$/.test(exifOrientation)) { throw new Error('orientation should be [1-8]'); } /** @type {?} */ const canvas = document.createElement('canvas'); /** @type {?} */ const ctx = canvas.getContext('2d'); /** @type {?} */ let deg = 0; /** @type {?} */ let cx = 0; /** @type {?} */ let cy = 0; /** @type {?} */ let width = image.width; /** @type {?} */ let height = image.height; if ([5, 6, 7, 8].indexOf(exifOrientation) > -1) { width = image.height; height = image.width; } canvas.width = width; canvas.height = height; switch (exifOrientation) { case 3: case 4: cx = -image.width; cy = -image.height; deg = 180; break; case 5: case 6: cy = -image.height; deg = 90; break; case 7: case 8: cx = -image.width; deg = 270; break; default: break; } if ([2, 4, 5, 7].indexOf(exifOrientation) > -1) { ctx.translate(width, 0); ctx.scale(-1, 1); } ctx.rotate(deg / 180 * Math.PI); ctx.drawImage(image, cx, cy); /** @type {?} */ const img = new Image(); img.width = width; img.height = height; img.onload = () => { resolve(img); }; img.src = canvas.toDataURL(); } else { resolve(image); } }); }); } } NgxPicaExifService.decorators = [ { type: Injectable } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXBpY2EtZXhpZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmc3LXBpY2EvIiwic291cmNlcyI6WyJsaWIvbmd4LXBpY2EtZXhpZi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBSWhDLE1BQU0sT0FBTyxrQkFBa0I7Ozs7O0lBRXBCLG9CQUFvQixDQUFDLEtBQXVCO1FBQy9DLE9BQU8sSUFBSSxPQUFPLENBQW1CLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JELElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQUMsS0FBWSxFQUFDLEVBQUUsR0FBRyxFQUFFOztnQkFDOUIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FDSTs7Z0JBRGxELE1BQ0ksZUFBZSxHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUM7Z0JBRWxELElBQUksZUFBZSxFQUFFO29CQUVqQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRTt3QkFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO3FCQUNsRDs7b0JBRUQsTUFBTSxNQUFNLEdBQXNCLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQ2hDOztvQkFEbEMsTUFDSSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7b0JBRWxDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FJdUI7O29CQUpsQyxJQUNJLEVBQUUsR0FBRyxDQUFDLENBR3dCOztvQkFKbEMsSUFFSSxFQUFFLEdBQUcsQ0FBQyxDQUV3Qjs7b0JBSmxDLElBR0ksS0FBSyxHQUFXLEtBQUssQ0FBQyxLQUFLLENBQ0c7O29CQUpsQyxJQUlJLE1BQU0sR0FBVyxLQUFLLENBQUMsTUFBTSxDQUFDO29CQUVsQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO3dCQUM1QyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQzt3QkFDckIsTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7cUJBQ3hCO29CQUVELE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO29CQUNyQixNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztvQkFFdkIsUUFBUSxlQUFlLEVBQUU7d0JBQ3JCLEtBQUssQ0FBQyxDQUFDO3dCQUNQLEtBQUssQ0FBQzs0QkFDRixFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDOzRCQUNsQixFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDOzRCQUNuQixHQUFHLEdBQUcsR0FBRyxDQUFDOzRCQUNWLE1BQU07d0JBQ1YsS0FBSyxDQUFDLENBQUM7d0JBQ1AsS0FBSyxDQUFDOzRCQUNGLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7NEJBQ25CLEdBQUcsR0FBRyxFQUFFLENBQUM7NEJBQ1QsTUFBTTt3QkFDVixLQUFLLENBQUMsQ0FBQzt3QkFDUCxLQUFLLENBQUM7NEJBQ0YsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzs0QkFDbEIsR0FBRyxHQUFHLEdBQUcsQ0FBQzs0QkFDVixNQUFNO3dCQUNWOzRCQUNJLE1BQU07cUJBQ2I7b0JBRUQsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTt3QkFDNUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3hCLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ3BCO29CQUVELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2hDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQzs7b0JBRTdCLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7b0JBRXhCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO29CQUNsQixHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztvQkFFcEIsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7d0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUNoQixDQUFDO29CQUVGLEdBQUcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO2lCQUNoQztxQkFBTTtvQkFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ2xCO2FBQ0osQ0FBQyxDQUFDO1NBQ04sQ0FBQyxDQUFDOzs7O1lBM0VWLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgRVhJRiBmcm9tICdleGlmLWpzJztcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmd4UGljYUV4aWZTZXJ2aWNlIHtcblxuICAgIHB1YmxpYyBnZXRFeGlmT3JpZW50ZWRJbWFnZShpbWFnZTogSFRNTEltYWdlRWxlbWVudCk6IFByb21pc2U8SFRNTEltYWdlRWxlbWVudD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8SFRNTEltYWdlRWxlbWVudD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgRVhJRi5nZXREYXRhKChpbWFnZSBhcyBhbnkpLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxsRXhpZk1ldGFEYXRhID0gRVhJRi5nZXRBbGxUYWdzKGltYWdlKSxcbiAgICAgICAgICAgICAgICAgICAgZXhpZk9yaWVudGF0aW9uID0gYWxsRXhpZk1ldGFEYXRhLk9yaWVudGF0aW9uO1xuXG4gICAgICAgICAgICAgICAgaWYgKGV4aWZPcmllbnRhdGlvbikge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghL15bMS04XSQvLnRlc3QoZXhpZk9yaWVudGF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvcmllbnRhdGlvbiBzaG91bGQgYmUgWzEtOF0nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWcgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3ggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3kgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG51bWJlciA9IGltYWdlLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBudW1iZXIgPSBpbWFnZS5oZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKFs1LCA2LCA3LCA4XS5pbmRleE9mKGV4aWZPcmllbnRhdGlvbikgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBpbWFnZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBpbWFnZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZXhpZk9yaWVudGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ggPSAtaW1hZ2Uud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3kgPSAtaW1hZ2UuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZyA9IDE4MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeSA9IC1pbWFnZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVnID0gOTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ggPSAtaW1hZ2Uud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVnID0gMjcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChbMiwgNCwgNSwgN10uaW5kZXhPZihleGlmT3JpZW50YXRpb24pID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUod2lkdGgsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNjYWxlKC0xLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGN0eC5yb3RhdGUoZGVnIC8gMTgwICogTWF0aC5QSSk7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1hZ2UsIGN4LCBjeSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaW1nLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIGltZy5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoaW1nKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBpbWcuc3JjID0gY2FudmFzLnRvRGF0YVVSTCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoaW1hZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbn1cbiJdfQ==