ng-pica
Version:
Angular module to resize images files in browser
107 lines • 10.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
import * as EXIF from 'exif-js';
var NgxPicaExifService = /** @class */ (function () {
function NgxPicaExifService() {
}
/**
* @param {?} image
* @return {?}
*/
NgxPicaExifService.prototype.getExifOrientedImage = /**
* @param {?} image
* @return {?}
*/
function (image) {
return new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
EXIF.getData(((/** @type {?} */ (image))), (/**
* @return {?}
*/
function () {
/** @type {?} */
var allExifMetaData = EXIF.getAllTags(image);
/** @type {?} */
var exifOrientation = allExifMetaData.Orientation;
if (exifOrientation) {
if (!/^[1-8]$/.test(exifOrientation)) {
throw new Error('orientation should be [1-8]');
}
/** @type {?} */
var canvas = document.createElement('canvas');
/** @type {?} */
var ctx = canvas.getContext('2d');
/** @type {?} */
var deg = 0;
/** @type {?} */
var cx = 0;
/** @type {?} */
var cy = 0;
/** @type {?} */
var width = image.width;
/** @type {?} */
var 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 {?} */
var img_1 = new Image();
img_1.width = width;
img_1.height = height;
img_1.onload = (/**
* @return {?}
*/
function () {
resolve(img_1);
});
img_1.src = canvas.toDataURL();
}
else {
resolve(image);
}
}));
}));
};
NgxPicaExifService.decorators = [
{ type: Injectable }
];
return NgxPicaExifService;
}());
export { NgxPicaExifService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXBpY2EtZXhpZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctcGljYS8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtcGljYS1leGlmLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFHaEM7SUFBQTtJQThFQSxDQUFDOzs7OztJQTNFVSxpREFBb0I7Ozs7SUFBM0IsVUFBNEIsS0FBdUI7UUFDL0MsT0FBTyxJQUFJLE9BQU87Ozs7O1FBQW1CLFVBQUMsT0FBTyxFQUFFLE1BQU07WUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLG1CQUFBLEtBQUssRUFBTyxDQUFDOzs7WUFBRTs7b0JBQ25CLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQzs7b0JBQzFDLGVBQWUsR0FBRyxlQUFlLENBQUMsV0FBVztnQkFFakQsSUFBSSxlQUFlLEVBQUU7b0JBRWpCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFO3dCQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7cUJBQ2xEOzt3QkFFSyxNQUFNLEdBQXNCLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDOzt3QkFDOUQsR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDOzt3QkFFN0IsR0FBRyxHQUFHLENBQUM7O3dCQUNQLEVBQUUsR0FBRyxDQUFDOzt3QkFDTixFQUFFLEdBQUcsQ0FBQzs7d0JBQ04sS0FBSyxHQUFXLEtBQUssQ0FBQyxLQUFLOzt3QkFDM0IsTUFBTSxHQUFXLEtBQUssQ0FBQyxNQUFNO29CQUVqQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO3dCQUM1QyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQzt3QkFDckIsTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7cUJBQ3hCO29CQUVELE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO29CQUNyQixNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztvQkFFdkIsUUFBUSxlQUFlLEVBQUU7d0JBQ3JCLEtBQUssQ0FBQyxDQUFDO3dCQUNQLEtBQUssQ0FBQzs0QkFDRixFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDOzRCQUNsQixFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDOzRCQUNuQixHQUFHLEdBQUcsR0FBRyxDQUFDOzRCQUNWLE1BQU07d0JBQ1YsS0FBSyxDQUFDLENBQUM7d0JBQ1AsS0FBSyxDQUFDOzRCQUNGLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7NEJBQ25CLEdBQUcsR0FBRyxFQUFFLENBQUM7NEJBQ1QsTUFBTTt3QkFDVixLQUFLLENBQUMsQ0FBQzt3QkFDUCxLQUFLLENBQUM7NEJBQ0YsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzs0QkFDbEIsR0FBRyxHQUFHLEdBQUcsQ0FBQzs0QkFDVixNQUFNO3dCQUNWOzRCQUNJLE1BQU07cUJBQ2I7b0JBRUQsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTt3QkFDNUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3hCLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ3BCO29CQUVELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2hDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQzs7d0JBRXZCLEtBQUcsR0FBRyxJQUFJLEtBQUssRUFBRTtvQkFFdkIsS0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7b0JBQ2xCLEtBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO29CQUVwQixLQUFHLENBQUMsTUFBTTs7O29CQUFHO3dCQUNULE9BQU8sQ0FBQyxLQUFHLENBQUMsQ0FBQztvQkFDakIsQ0FBQyxDQUFBLENBQUM7b0JBRUYsS0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7aUJBQ2hDO3FCQUFNO29CQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDbEI7WUFDTCxDQUFDLEVBQUMsQ0FBQztRQUNQLENBQUMsRUFBQyxDQUFDO0lBQ1AsQ0FBQzs7Z0JBNUVKLFVBQVU7O0lBOEVYLHlCQUFDO0NBQUEsQUE5RUQsSUE4RUM7U0E3RVksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIEVYSUYgZnJvbSAnZXhpZi1qcyc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5neFBpY2FFeGlmU2VydmljZSB7XG5cbiAgICBwdWJsaWMgZ2V0RXhpZk9yaWVudGVkSW1hZ2UoaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQpOiBQcm9taXNlPEhUTUxJbWFnZUVsZW1lbnQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPEhUTUxJbWFnZUVsZW1lbnQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIEVYSUYuZ2V0RGF0YSgoaW1hZ2UgYXMgYW55KSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFsbEV4aWZNZXRhRGF0YSA9IEVYSUYuZ2V0QWxsVGFncyhpbWFnZSksXG4gICAgICAgICAgICAgICAgICAgIGV4aWZPcmllbnRhdGlvbiA9IGFsbEV4aWZNZXRhRGF0YS5PcmllbnRhdGlvbjtcblxuICAgICAgICAgICAgICAgIGlmIChleGlmT3JpZW50YXRpb24pIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIS9eWzEtOF0kLy50ZXN0KGV4aWZPcmllbnRhdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignb3JpZW50YXRpb24gc2hvdWxkIGJlIFsxLThdJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgZGVnID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN5ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBudW1iZXIgPSBpbWFnZS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogbnVtYmVyID0gaW1hZ2UuaGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChbNSwgNiwgNywgOF0uaW5kZXhPZihleGlmT3JpZW50YXRpb24pID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gaW1hZ2UuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gaW1hZ2Uud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGV4aWZPcmllbnRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN4ID0gLWltYWdlLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5ID0gLWltYWdlLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWcgPSAxODA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3kgPSAtaW1hZ2UuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZyA9IDkwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN4ID0gLWltYWdlLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZyA9IDI3MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoWzIsIDQsIDUsIDddLmluZGV4T2YoZXhpZk9yaWVudGF0aW9uKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHgudHJhbnNsYXRlKHdpZHRoLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zY2FsZSgtMSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjdHgucm90YXRlKGRlZyAvIDE4MCAqIE1hdGguUEkpO1xuICAgICAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKGltYWdlLCBjeCwgY3kpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGltZy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICBpbWcuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGltZyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGltYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG59XG4iXX0=